メインコンテンツまでスキップ

Docker Compose チートシート:目的別コマンドリファレンス

タグ:

業務で Docker Compose を使っていると、オプションや構文を都度調べ直すことがよくあります。本記事では、業務でよく使う Docker Compose コマンドを目的別にまとめました。操作したいことからすばやく引けるリファレンスとして活用してみましょう。

ビルド

サービスのイメージをビルドします。compose.ymlbuild セクションに定義された Dockerfile を使ってビルドします。サービス名を指定するとそのサービスのみビルドできます。

docker compose build
docker compose build <サービス名>

キャッシュを使わずにイメージをビルドし直します。依存パッケージを更新したときや、ビルドが途中でキャッシュされて期待通りに動かないときに使います。

docker compose build --no-cache

compose.yml に定義したイメージを Docker Hub などのレジストリから取得します。ビルド不要なサービスのイメージを事前に用意しておくときに使います。

docker compose pull

起動

コンテナを作成して起動します。-d を付けるとバックグラウンドで実行されます。サービス名を指定するとそのサービスのみ起動でき、依存関係のあるサービスは合わせて起動されます。

docker compose up
docker compose up -d
docker compose up -d <サービス名>

イメージをビルドしてから起動します。コードの変更を反映させたいときに使います。

docker compose up --build -d

停止中のコンテナを起動します。docker compose down せずに stop で止めた場合は、こちらで再開できます。

docker compose start

コンテナを再起動します。設定ファイルの変更を反映させたいときや、コンテナが不安定なときに使います。特定のサービスだけ再起動することもできます。

docker compose restart
docker compose restart <サービス名>

環境変数

Docker Compose はプロジェクトルートの .env ファイルを自動的に読み込みます。compose.yml 内で ${変数名} として参照できます。環境ごとに異なる設定値(ポート番号、データベース名など)を外部から注入するときに役立ちます。

# .env ファイルの例
DB_NAME=mydb
DB_PORT=5432

.env 以外のファイルを指定したい場合は --env-file オプションを使います。開発・ステージング・本番で異なるファイルを使い分けるときに便利です。

docker compose --env-file .env.production up -d

docker compose run でコンテナを起動する際に、特定の環境変数を上書きするには -e オプションを使います。

docker compose run -e LOG_LEVEL=debug <サービス名> <コマンド>

環境変数が正しく読み込まれているか確認するには docker compose config で展開後の compose.yml を表示するか、コンテナ内で env コマンドを実行します。

docker compose config
docker compose exec <サービス名> env

スケーリング

サービスを複数のコンテナで起動するには --scale オプションを使います。ロードバランサーの動作確認や負荷テストなどで複数コンテナを並べたいときに役立ちます。

docker compose up -d --scale <サービス名>=3

スケール数を変えて再度 up を実行すると、起動済みのコンテナ数が更新されます。増減を動的に試したいときに使います。

docker compose up -d --scale <サービス名>=1

スケールアウトしたコンテナのポートがホスト側でバッティングしないよう、compose.yml では ports にホスト側ポートを固定指定せず、コンテナ側ポートのみ指定しておくと安全です。

# ホスト側ポートを固定しない書き方
ports:
- "8080"

何台起動しているか確認するには docker compose ps を使います。スケール数が反映されているかを素早く把握できます。

docker compose ps

ネットワーク

Docker Compose はデフォルトでプロジェクト名をプレフィックスとしたネットワークを自動作成します。同じ compose.yml に定義されたサービスはこのネットワーク内でコンテナ名(サービス名)で名前解決できます。

複数の compose.yml にまたがってサービスを連携させたい場合は、外部ネットワークを使います。あらかじめ docker network create でネットワークを作成しておき、compose.ymlnetworks セクションで external: true として参照します。

networks:
shared-net:
external: true

ネットワークの一覧を確認します。プロジェクト名をプレフィックスとした自動作成ネットワークや外部ネットワークが表示されます。

docker network ls

特定のネットワークに接続しているコンテナや設定の詳細を確認します。コンテナ間の名前解決が期待通りに動いているか調べるときに役立ちます。

docker network inspect <ネットワーク名>

docker compose down はデフォルトでネットワークも削除しますが、外部ネットワーク(external: true)は削除対象にはならないです。プロジェクト間で共有しているネットワークを意図せず消さずに済みます。

コンテナ状態

サービスの状態(起動中・停止中など)を確認します。コンテナ名・ステータス・使用ポートが一覧で表示されるため、起動確認に役立ちます。--all を付けると停止中のコンテナも含めて表示されます。

docker compose ps
docker compose ps --all

サービスコンテナで実行中のプロセスを確認します。コンテナ内で何が動いているかを把握したいとき、意図しないプロセスが起動していないかチェックするときに使います。

docker compose top

ログを表示します。-f でリアルタイム追跡ができ、--tail で表示行数を絞れます。複数サービスのログをまとめて確認したいときはサービス名を省略し、特定サービスだけに絞りたいときは名前を指定します。

docker compose logs
docker compose logs -f
docker compose logs --tail 100 <サービス名>

コンテナ操作

実行中のサービスコンテナに入ります。bash が入っていないコンテナ(Alpine Linux ベースなど)では sh を使います。

docker compose exec -it <サービス名> bash
docker compose exec -it <サービス名> sh

コンテナを起動せずに一時コンテナでコマンドを実行します。マイグレーションやシードの実行などに便利です。--rm を付けると実行後に自動で削除されます。

docker compose run --rm <サービス名> <コマンド>

ホストからコンテナにファイルをコピーします。設定ファイルの送り込みに使います。

docker compose cp <ホスト側パス> <サービス名>:<コンテナ側パス>

コンテナからホストにファイルをコピーします。ログファイルや設定ファイルの取り出しに使います。

docker compose cp <サービス名>:<コンテナ側パス> <ホスト側パス>

設定確認

compose.yml の内容を変数展開した状態で表示します。環境変数が正しく反映されているか確認するときに役立ちます。

docker compose config

定義されているサービス名の一覧を表示します。スクリプトからサービス名を取得したいときなどに使います。

docker compose config --services

トラブルシューティング

コンテナが起動直後に終了してしまう場合など、コンテナ内に入れないときは docker compose run で新しいコンテナを対話的に起動して状況を確認します。エラーの再現手順を手動で試したいときにも便利です。

docker compose run --rm <サービス名> bash

コンテナのイベント(起動・停止・クラッシュなど)をリアルタイムで追跡します。クラッシュループしているサービスの検出に使います。--json を付けると JSON 形式で出力されるため、スクリプトで処理しやすくなります。

docker compose events
docker compose events --json

直近のログだけ確認したい場合は --since で時間を指定します。長時間稼働しているサービスで全ログ量が多いときの絞り込みに役立ちます。

docker compose logs --since 1h <サービス名>

ポートが意図通りに公開されているか確認します。サービスのコンテナ側ポートに対応するホスト側ポートが表示されます。スケーリングで複数コンテナを起動している場合、どのホストポートに割り当てられたか調べるときにも使えます。

docker compose port <サービス名> <コンテナ側ポート>

停止/削除

実行中のコンテナを停止します。コンテナは削除されず、次回 up で再利用されます。

docker compose stop

コンテナを停止して削除します。ネットワークも合わせて削除されます。イメージも削除したい場合は --rmi all を付けます。

docker compose down
docker compose down --rmi all

ボリュームも含めて削除します。データも失われるため、使う際は注意が必要です。開発環境をまっさらな状態に戻したいときに使います。

docker compose down -v

コマンド早見表

よく使うコマンドの構文をまとめました。引数の順序を忘れたときの確認にご活用いただけます。

コマンド内容
docker compose up [service]コンテナを作成して起動
docker compose downコンテナを停止して削除
docker compose start [service]停止中のコンテナを起動
docker compose stop [service]コンテナを停止
docker compose restart [service]コンテナを再起動
docker compose build [service]イメージをビルド
docker compose pull [service]イメージを取得
docker compose exec [service]実行中コンテナでコマンドを実行
docker compose run [service]一時コンテナでコマンドを実行
docker compose logs [service]ログを表示
docker compose ps [service]サービスの状態を表示
docker compose top [service]プロセスを表示
docker compose cp [src]ホストとコンテナ間でファイルをコピー
docker compose configcompose.yml の設定を表示
docker compose eventsイベントをリアルタイムで追跡

まとめ

  • コンテナを動かすまでの基本的な流れは「ビルド → 起動 → 状態確認」です
  • 環境変数は専用ファイルで管理し、設定ファイルに直接書かないようにしましょう
  • コードや依存パッケージを更新したときはイメージをビルドし直しましょう
  • 複数の設定ファイルにまたがってサービスを連携させたい場合は外部ネットワークを使いましょう
  • 問題が起きたときはログを確認し、コンテナ内部に入って調べましょう
  • データを初期化したいときはボリュームごと削除できます