Docker

Docker Compose

複数のコンテナ、ネットワーク、ボリュームをcompose.yamlへまとめます。

Docker入門の講座一覧

01

compose.yamlを書く

Composeでは、サービスをYAML形式で宣言します。次の例はNginxとRedisを別サービスとして起動する構成です。

compose.yamlYAML
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    depends_on:
      - cache
  cache:
    image: redis:alpine

webとcacheがサービス名です。Composeは同じプロジェクト用のネットワークを作り、webからcacheという名前でRedisへ接続できるようにします。depends_onは起動順の関係を表しますが、アプリケーションが接続可能になるまで待つ設定とは別なので、実運用ではヘルスチェックや再接続も検討します。

02

Composeで起動する

起動と一覧確認COMMAND
docker compose up -d
docker compose ps
docker compose logs --tail 20
出力例OUTPUT
NAME             IMAGE         SERVICE   STATUS         PORTS
sample-web-1     nginx:alpine  web       running        0.0.0.0:8080->80/tcp
sample-cache-1   redis:alpine  cache     running

up -dは必要なイメージを取得し、ネットワークを作ってサービスをバックグラウンドで起動します。ブラウザでhttp://localhost:8080を確認し、docker compose psでサービスの状態を見ます。Compose v2では、一覧のSTATUSにrunningと表示されます。プロジェクト名によってコンテナ名の先頭は変わります。

03

設定の展開結果を確認する

YAMLのインデントや環境変数の指定を間違えると、意図した構成にならないことがあります。実際にComposeが解釈した設定をconfigで確認します。

構成を検証するCOMMAND
docker compose config

設定ファイルを変更したら、まずdocker compose configで構文と展開結果を確認し、その後にdocker compose up -dを実行します。docker compose exec cache redis-cli pingを実行すれば、起動中のRedisへ接続してPONGを確認できます。

サービス内で実行COMMAND
docker compose exec cache redis-cli ping
実行結果OUTPUT
PONG
04

停止方法を使い分ける

Composeの終了COMMAND
docker compose stop
docker compose start
docker compose down

stopはコンテナを残して停止し、startで再開します。downはコンテナとComposeが作ったネットワークを削除します。名前付きボリュームも削除するdown -vはデータを消すため、学習用データであることを確認してから使います。次の確認・安全な運用でログやトラブルの調べ方を扱います。