1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

docker run で1コンテナずつ起動するのは問題ありません。
ただ、Web サーバーと補助コンテナのように 複数を毎回セットで動かす と、起動・停止のたびにコマンドを打ち直すのは面倒です。

この記事では Docker Compose を使い、YAML ファイル1本で複数コンテナを一括起動・停止する手順を、WSL2 上の Ubuntu ターミナルから進めます。

この記事でやることは次のとおりです。

  • docker-compose.yaml の基本構造(services / ports / volumes / environment)を理解する
  • docker compose up / down / ps / logs でスタックを操作する
  • --scale で同じサービスのレプリカを増やす
  • docker run のオプションと YAML の対応関係を確認する

※ この記事では、Ubuntu 環境のターミナルで Docker CLI / Compose を実行します。コンテナ間のネットワークや DNS の詳細は、シリーズ ⑥ Docker ネットワークとコンテナ間通信の図解 を参照してください。


環境設定につきましては以下の記事を参考にしてください。

Docker Compose とは

Docker Compose は、複数コンテナの定義と起動を YAML 1本で管理する 仕組みです。
docker compose up で定義したサービスをまとめて起動し、docker compose down でまとめて停止・削除できます。

たとえば nginx(Web)と busybox(補助)の2つを毎回動かす場合、docker run だけだと起動・停止のたびに 2回コマンドを打つ 必要があります。Compose なら YAML に書いておけば、up / down で一括操作できます。

全体の流れ

  1. 作業ディレクトリと docker-compose.yaml を用意する
  2. docker compose up -d でスタックを起動する
  3. docker compose ps / curl / logs で確認する
  4. docker compose down で停止・削除する
  5. (任意)--scale で web サービスを3台に増やす

Step 1: 作業ディレクトリとファイルを用意する

WSL 上の Linux ファイルシステムで実行します(/mnt/c/... よりマウントが安定しやすいです)。

ディレクトリ作成・移動

mkdir -p ~/hands-on/compose_demo/web
cd ~/hands-on/compose_demo

web/index.html

hello from compose

docker-compose.yaml

services:
  web:
    image: nginx:latest
    environment:
      - APP_ENV=demo
    ports:
      - "8080:80"
    volumes:
      - ./web:/usr/share/nginx/html:ro
  worker:
    image: busybox
    command: ["sleep", "infinity"]

YAML の読み方

キー 意味
services 起動するコンテナの一覧
web / worker サービス名(Compose 内で識別子になる)
image 使用する Docker イメージ
ports "ホスト:コンテナ" のポート公開
volumes ホストの ./web をコンテナ内 /usr/share/nginx/html に読み取り専用でマウント
environment コンテナ内の環境変数
command イメージ既定 CMD の上書き

Step 2: スタックを起動する

docker compose -f docker-compose.yaml -p compose_demo up -d

-p compose_demoプロジェクト名 です。コンテナ名やネットワーク名の接頭辞になります。

出力例:

[+] up 3/3
 ✔ Network compose_demo_default    Created
 ✔ Container compose_demo-web-1    Started
 ✔ Container compose_demo-worker-1 Started

Step 3: 状態を確認する

Compose 管理下の一覧

docker compose -p compose_demo ps

ホストから HTTP 確認

curl localhost:8080

出力例:

hello from compose

ログを追う(任意)

docker compose -p compose_demo logs -f web

Ctrl + C でログ表示だけ止めます。コンテナは -d 起動のままです。

Step 4: 停止・削除する

docker compose -p compose_demo down

ネットワークとコンテナがまとめて削除されます。

出力例:

[+] down 3/3
 ✔ Container compose_demo-worker-1 Removed
 ✔ Container compose_demo-web-1    Removed
 ✔ Network compose_demo_default    Removed

Step 5: --scale でレプリカを増やす(任意)

同じ nginx サービスを3台起動する例です。scale 用に ポートレンジ を使い、container_name は指定しません。

docker-compose.scale.yaml

services:
  web:
    image: nginx:latest
    ports:
      - "8080-8082:80"
    volumes:
      - ./web:/usr/share/nginx/html:ro
  worker:
    image: busybox
    command: ["sleep", "infinity"]

起動

docker compose -f docker-compose.scale.yaml -p compose_demo up -d --scale web=3
docker compose -p compose_demo ps
curl localhost:8080
curl localhost:8081
curl localhost:8082

3つとも hello from compose が返れば OK です。

片付け

docker compose -p compose_demo down

docker run と YAML の対応

Compose は、繰り返し使う docker run オプションを YAML に移したものと考えると整理しやすいです。

docker run docker-compose.yaml
--name my-nginx container_name: my-nginx(scale 時は省略推奨)
-p 8080:80 ports: ["8080:80"]
--env KEY=VAL environment: ["KEY=VAL"]
-v $(pwd):/path volumes: ["./dir:/path"]
nginx(末尾のイメージ) image: nginx:latest
sleep infinity(末尾 CMD) command: ["sleep", "infinity"]

まとめ

この記事では、Docker Compose で複数コンテナを YAML 1本から一括起動・停止する手順を確認しました。

  • Compose は YAML 1本 で複数コンテナを定義し、up / down で一括操作できる
  • docker compose ps / logs でスタック単位の確認ができる
  • --scale で同一サービスの台数を増やせる(ポートレンジと container_name 非指定が前提)
  • コンテナ間通信の仕組みは Docker ネットワークとコンテナ間通信の図解(シリーズ ⑥)を参照

参考

本記事を作成するうえで、以下の資料を参考にさせていただきました。

  1. https://docs.docker.com/compose/
  2. https://docs.docker.com/reference/compose-file/

株式会社ジールでは、「ITリテラシーがない」「初期費用がかけられない」「親切・丁寧な支援がほしい」「ノーコード・ローコードがよい」「運用・保守の手間をかけられない」などのお客様の声を受けて、オールインワン型データ活用プラットフォーム「ZEUSCloud」を月額利用料にてご提供しております。

ご興味がある方は是非下記のリンクをご覧ください:

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?