Docker Composeでは,compose.yaml に定義した複数のサービスをまとめて操作できる.

普段の開発でよく使うものを,作業の流れに沿ってまとめておく.<service> には webdb など,Composeファイルに書いたサービス名を指定する.

現在のComposeでは,ハイフン付きの docker-compose ではなく,Docker CLIに統合された docker compose を使う.

設定を確認する

1docker compose config

環境変数の展開や複数ファイルの結合後に,最終的に適用される設定を表示する.起動前にComposeファイルの記述を確認したいときに便利だ.

サービスを起動する

フォアグラウンドで起動し,各サービスのログをまとめて表示する.

1docker compose up

Ctrl+C で停止できる.バックグラウンドで起動する場合は -d を付ける.

1docker compose up -d

Dockerfileや依存関係を変更したあと,イメージを作り直して起動する.

1docker compose up -d --build

状態を見る

1docker compose ps

サービスごとのコンテナ名,状態,公開ポートを確認できる.停止中のコンテナも含める場合は -a を付ける.

1docker compose ps -a

ログを見る

すべてのサービスについて,直近100行からログを追う.

1docker compose logs --tail 100 -f

特定サービスだけに絞る場合は,末尾にサービス名を付ける.

1docker compose logs --tail 100 -f <service>

追跡を終了するときは Ctrl+C を押す.

コンテナの中で操作する

起動中のサービスコンテナでシェルを開く.

1docker compose exec <service> sh

イメージにBashが入っている場合は sh の代わりに bash を使える.

シェルへ入らず,コマンドだけ実行することもできる.

1docker compose exec web npm test

exec は,すでに起動しているコンテナ内でコマンドを実行する.

一時コンテナで実行する

1docker compose run --rm <service> <command>

たとえば,マイグレーションを実行するなら次のようになる.

1docker compose run --rm web npm run migrate

run はサービス設定を使って新しい一時コンテナを作る.起動済みコンテナを使う exec とは動作が異なる.--rm を付けると,コマンド終了後に一時コンテナが削除される.

停止,再開,再起動する

サービスを停止する.コンテナは削除されない.

1docker compose stop

停止したサービスを再開する.

1docker compose start

すべてのサービスを再起動する.

1docker compose restart

特定サービスだけを再起動する場合は,サービス名を付ける.

1docker compose restart <service>

終了して削除する

コンテナとネットワークを停止して削除する.

1docker compose down

Composeファイルから削除されたサービスのコンテナも片付ける場合は,次を使う.

1docker compose down --remove-orphans

名前付きボリュームも含めて削除する場合は --volumes を付ける.

1docker compose down --volumes

データベースなどの永続データも消える可能性があるため,実行前にComposeファイルのボリューム定義を確認する.

イメージを取得,ビルドする

Composeで使うイメージを取得する.

1docker compose pull

Composeファイルの定義に従ってイメージをビルドする.

1docker compose build

キャッシュを使わずに作り直す場合は --no-cache を付ける.

1docker compose build --no-cache

よく使う流れ

1# ビルドして起動する 2docker compose up -d --build 3 4# 状態を見る 5docker compose ps 6 7# webサービスのログを追う 8docker compose logs --tail 100 -f web 9 10# webサービスのコンテナ内へ入る 11docker compose exec web sh 12 13# 終了して片付ける 14docker compose down

まずは uppslogsexecdown の5つを覚えておけば,Composeを使った日常的な開発を進められる.

参考