本ページはプロモーションが含まれています

Docker

Docker Compose入門|30分で動かす最短ガイド

トム

・都内自社開発企業勤務/Javaバックエンドエンジニア
/Java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎 詳細なプロフィール

「Dockerは触ってみたけど、コンテナが2つ3つに増えた瞬間、コマンドが長すぎて頭がバグる…」そんな経験ありませんか?私も最初、WebサーバーとDBを別々の docker run で起動していたとき、毎朝ターミナル履歴を 連打する人間になっていました。マジで非効率です。

そこで救世主になるのが Docker Compose です。yml1枚にコンテナの構成を書いておけば、docker compose up -d の一発で全部立ち上がります。複数コンテナの管理がやっと「人間が扱える作業」になる感じです。

この記事では、私が普段の個人開発でも仕事でも使い倒している Docker Compose の最短入門ルートを、定義・違い・インストール・yml書き方・コマンド・トラブル対処まで一気に解説します。読み終わったあと、30分以内に手元で up -d が叩ける状態になることをゴールにしました。

この記事でわかること

  • Docker Compose の正体とDockerとの違い
  • docker-compose.yml の最小構成と書き方
  • 毎日使う必須コマンド7つ
  • 初心者がハマりやすいトラブルの直し方

結論:Docker Composeは複数コンテナをymlで束ねるツール

結論から言うと、Docker Compose は「複数のコンテナをまとめて定義・起動・停止するためのツール」です。yml形式の設定ファイル1枚にサービス構成を書き、docker compose コマンドで操作します。

WebアプリとDB、キャッシュサーバーをセットで動かしたい場面では、もう Compose 一択と言っていいくらい標準装備です。

1分でわかるDocker Composeの定義

Docker Compose とは、複数の Docker コンテナで構成されるアプリケーションを compose.yaml で宣言的に定義し、まとめて起動・停止・破棄できる公式ツールです。

2026年現在は Docker Desktop や Docker Engine に「Compose v2」がプラグインとして同梱されており、コマンドは docker-compose(旧)ではなく docker compose(スペース区切り)が標準になりました。

つまり、今から始める方が覚えるべきは docker compose up 系のコマンドだけです。古い記事に出てくるハイフン版は気にしなくて大丈夫です。

こんな人におすすめ(向き・不向き)

向いているのは「ローカルでWebアプリの開発環境を整えたい」「DB込みでサンプルアプリを動かしたい」「チームで開発環境を統一したい」人です。

逆に、本番運用で大規模なオーケストレーションをしたいなら Kubernetes のほうが筋がいいので、用途を分けて考えるのが現実的です。私もローカル開発は Compose、本番は別のオーケストレータ、と完全に切り分けています。

DockerとDocker Composeの違いを比較表で整理

違いを一言で言うと、Docker は「コンテナ1つを操作するための土台」、Docker Compose は「複数コンテナをまとめて操作するための上乗せレイヤー」です。Compose の中身は結局 Docker を呼び出しているので、別物ではなく親戚みたいな関係です。

単体Dockerだとつらい場面

素のDockerだと、コンテナを増やすたびに docker run のオプションが膨らみます。ネットワーク作成、ボリュームマウント、環境変数、ポート公開…全部コマンドラインに書く必要があり、あとから誰かに共有するときが地獄です。

「同じ環境を再現してね」とSlackで送るときに、長いワンライナーをペーストする時点で何かがおかしいです。

比較表:コマンド数・再現性・運用負荷

項目Docker(単体)Docker Compose
起動コマンドコンテナごとに docker rundocker compose up 1回
設定の保存シェルスクリプト等で外出しyml1ファイル
ネットワーク手動で作成・接続自動で生成・接続
環境の再現性手順書頼みymlがそのまま手順書
向いている用途単発の検証複数コンテナの開発環境

Docker Composeを使う3つのメリット

メリットは大きく分けて「コマンド削減」「再現性」「ヒューマンエラー削減」の3つです。どれも地味に見えて、開発スピードに直結します。私自身、Compose を本格導入してから「環境構築で半日溶かす」が消滅しました。

複数コンテナを1コマンドで起動できる

Web・DB・Redisを束ねた構成でも、docker compose up -d 1発で全部立ち上がります。停止も down だけ。コマンドを覚える脳のリソースが空くので、本来やりたいアプリ実装に集中できます。

yml1ファイルで環境を再現できる

compose.yaml をGitに含めておけば、別のPCでもチームメンバーでも、cloneして1コマンドで同じ環境が立ちます。「私の環境では動くんですけどね」みたいな伝統芸能が滅びます。OSや言語ランタイムの差にも振り回されません。

チーム開発でのミスが減る

環境変数やポート、ボリュームのマウント先がymlに集約されるので、誰が見ても構成が把握できます。レビューもしやすく、変更履歴がGitに残るので「いつDBバージョン上げたっけ?」が git log で追えるのは精神衛生にいいです。

Docker Composeのインストール手順

2026年時点では、ほとんどのケースで個別インストールは不要です。Docker Desktop もしくは Docker Engine に Compose v2 がプラグインとして同梱されているからです。

古い記事のように pip install docker-compose する必要はないので、まずは現状を確認するところから始めます。

macOS / Windows(Docker Desktop同梱)

macOSとWindowsは Docker Desktop を入れるだけで Compose も同時に使えます。インストール後、ターミナルで以下を叩いてバージョンが返ってくればOKです。

docker compose version
# Docker Compose version v2.x.x のように表示されればOK

Linux(plugin版v2のセットアップ)

Linuxの場合は Docker Engine に加えて docker-compose-plugin パッケージを入れます。Ubuntu系なら以下です。

sudo apt-get update
sudo apt-get install -y docker-compose-plugin
docker compose version

古い docker-compose(ハイフン版)が残っていると混乱の元になるので、見つけたらアンインストールしておきましょう。新規で入れる方は v2 だけで大丈夫です。

docker-compose.yml の書き方を実例で解説

yml の書き方はシンプルで、services の下にコンテナを並べていくだけです。最低限 imageports を書けば動きます。最初から完璧なyml を書こうとせず、必要な項目を1つずつ足していくのが挫折しないコツです。

基本構造:services / volumes / networks

compose.yaml のトップレベルでよく使うキーは3つだけ覚えれば十分です。

  • services:起動するコンテナ群(必須)
  • volumes:データを永続化する領域
  • networks:コンテナ同士をつなぐ仮想ネットワーク(省略可)

networks を省略しても、Compose がプロジェクト専用のネットワークを自動で作ってくれます。サービス名で名前解決できるので、最初は気にしなくてOKです。

最小構成サンプル(Nginx + MySQL)

WebサーバーとDBの定番セットを20行で書けます。これをコピペして docker compose up -d すれば、http://localhost:8080 でNginxの初期画面が拝めます。

services:
  web:
    image: nginx:1.27
    ports:
      - "8080:80"
    depends_on:
      - db
  db:
    image: mysql:8.4
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: app
    volumes:
      - db_data:/var/lib/mysql
volumes:
  db_data:

環境変数とボリュームの設定例

パスワードや接続文字列をyml に直書きするのは事故のもとです。.env ファイルに切り出し、ymlからは ${VAR} 形式で参照するのが安全な書き方になります。

# .env
MYSQL_ROOT_PASSWORD=rootpass
MYSQL_DATABASE=app

# compose.yaml の一部
db:
  image: mysql:8.4
  environment:
    MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    MYSQL_DATABASE: ${MYSQL_DATABASE}

.env は必ず .gitignore に追加します。これを忘れて公開リポジトリにpushしてしまう事故、定番すぎるので最初に防御線を張っておきましょう。

押さえておきたい基本コマンド7選

毎日使うコマンドは7つで足ります。最初はこの表をブックマークして、必要に応じて引いてくる運用で十分です。全部暗記する必要はありません。

up / down / ps / logs / exec / build / restart

コマンド役割
docker compose up -dコンテナ起動(バックグラウンド)
docker compose downコンテナ停止+削除
docker compose ps稼働中コンテナの一覧
docker compose logs -f web指定サービスのログを追跡
docker compose exec web shコンテナ内でシェルを開く
docker compose buildDockerfileから再ビルド
docker compose restartサービスを再起動

-d オプションと開発時の使い分け

-d(detached)はバックグラウンド起動で、ターミナルがすぐ返ってきます。普段使いはこちらが便利です。一方、起動時のログをガッツリ見たいときは -d を外して docker compose up をフォアグラウンドで実行するほうがデバッグが速いです。私は新しいymlを書いた直後だけ -d なしで動かして、安定したら -d に戻す運用にしています。

よくあるトラブルと解決方法

初心者がハマりがちなトラブルは大体3パターンに集約されます。原因と対処をセットで覚えておけば、同じ落とし穴を2回踏まずに済みます。

ポート競合エラーの直し方

port is already allocated が出たら、ホスト側のポートが他のプロセスに使われています。yml の ports をたとえば "8080:80" から "8081:80" に変えるか、占有しているプロセスを lsof -i :8080 で特定して止めれば解決します。

私はだいたい古い compose down し忘れが原因です。

ボリューム・権限エラー

permission denied が出るのはマウント先のオーナーがコンテナ内のユーザーと食い違っているケースです。Linuxホストでは、ホスト側ディレクトリの所有者を確認し、必要なら chown で揃えます。

MySQLのボリュームを作り直したいときは docker compose down -v でボリュームごと削除してから up すれば、初期化処理が再実行されます。

yml記法のハマりどころ

yml はインデントがすべてです。タブとスペースが混ざるとエラーになるので、エディタで「タブをスペースに変換」設定を有効にしておくのが安全です。

あと、ports の値はクオートで囲って文字列扱いにしないと、22:22 のような数字がパースエラーになるケースがあります。地味すぎる罠ですが、最初の数十分はだいたいこれで溶けます。

よくある質問(FAQ)

初心者からよく受ける質問をまとめました。詰まったら、まずここを見るとだいたい解決します。

Q. docker-compose と docker compose は何が違いますか?

A. ハイフン版は v1 系の旧コマンド、スペース区切りはプラグイン化された v2 系の新コマンドです。2026年現在は v2 が標準なので、新規プロジェクトでは docker compose を使えば問題ありません。

Q. compose.yaml と docker-compose.yml はどちらを使うべき?

A. 公式が推す新しいファイル名は compose.yaml です。Compose v2 は両方読めますが、新規作成なら compose.yaml を選ぶのが今後のスタンダードに合います。

Q. 本番運用にも使えますか?

A. 小規模なら可能ですが、スケーリングや自己復旧が必要な本番環境では Kubernetes など専用のオーケストレータを推奨します。Compose は「ローカル・検証環境のための最強ツール」と割り切るのが一番幸せです。

Q. Dockerfile と compose.yaml はどう使い分ける?

A. Dockerfile は「1つのコンテナの作り方」、compose.yaml は「複数コンテナの組み合わせ方」を書きます。役割が違うので両方書くのが普通で、competeする関係ではありません。

Q. ymlを変更したのに反映されません

A. docker compose up -d をもう一度実行すれば、変更があったサービスだけ再作成されます。Dockerfileを変えた場合は --build を付ければ再ビルドされます。

まとめ:まずは up -d で動かしてみよう

Docker Compose は、複数コンテナをまとめる「設定ファイル+コマンド」のセットです。最初に覚えるのは up -ddownlogs の3つで十分で、慣れてから残りを足していけば十分戦えます。

  • Compose は複数コンテナをymlで束ねる公式ツール
  • 2026年現在はv2が標準でdocker compose(スペース区切り)
  • 最小構成は servicesimageports だけでOK
  • 機密情報は .env へ切り出し、.gitignore 必須
  • 困ったら logs -f でコンテナのログを覗くのが最短

まずは記事中の最小構成ymlをそのまま貼り付けて、docker compose up -d を叩いてみてください。コンテナが立ち上がる瞬間の気持ちよさを味わえれば、もう半分以上理解したのと同じです。

あとは自分のプロジェクトに合わせてサービスを足していくだけで、開発体験が段違いに変わります。

  • この記事を書いた人
  • 最新記事

トム

・都内自社開発企業勤務/Javaバックエンドエンジニア
/Java歴10年以上 ・首都圏在住30代
・資格:基本情報技術者/応用情報技術者/Java Silver/Python3エンジニア認定基礎 詳細なプロフィール

-Docker