docker compose – マルチコンテナアプリを定義・実行する

コンテナ管理

docker compose は、compose.yaml(または docker-compose.yml)で定義した複数コンテナの起動・停止・ログ・スケールなど、スタックのライフサイクルをまとめて操作する CLI です(Compose v2)。Compose は単一の YAML でサービス・ネットワーク・ボリュームを定義します。 (Docker Documentation)
※ v2 では docker compose(スペースあり)を推奨。旧 docker-compose(Python製 v1)はレガシーです。 (Docker Documentation, Stack Overflow)

構文(Syntax)

docker compose [OPTIONS] COMMAND [ARGS...]

# 代表例
docker compose up [OPTIONS] [SERVICE...]
docker compose down [OPTIONS]
docker compose logs [OPTIONS] [SERVICE...]
docker compose exec [OPTIONS] SERVICE COMMAND [ARGS...]
docker compose run  [OPTIONS] SERVICE [COMMAND] [ARGS...]

主な共通オプション:

  • -f FILE(複数指定可): Composeファイルを明示(デフォルトは compose.yaml 等)
  • -p NAME: プロジェクト名(オーケストレーションの名前空間)
  • --env-file FILE: .env の代替・追加読み込み
  • --profile NAME: プロファイルを有効化(複数可)
    これらはほぼ全サブコマンドに共通です。 (Docker Documentation)

主なオプション一覧

オプション説明使用例
-f FILE使用する Compose ファイルを指定(複数可)docker compose -f compose.yaml -f compose.prod.yaml up -d (Docker Documentation)
-p NAMEプロジェクト名(COMPOSE_PROJECT_NAME相当)docker compose -p myapp up -d (Docker Documentation)
--env-file FILE追加の環境ファイルを読み込みdocker compose --env-file .env.prod up -d (Docker Documentation)
--profile NAME指定プロファイルのみ有効化docker compose --profile worker up -d (Docker Documentation)
up -dデタッチ起動docker compose up -d (Docker Documentation)
up --build起動前にビルドdocker compose up -d --build (Docker Documentation)
up --remove-orphansファイルに無い孤児コンテナを削除docker compose up --remove-orphans (Docker Documentation)
up --scale SVC=Nサービスのインスタンス数を指定docker compose up -d --scale web=3 (Docker Documentation)
down -v停止+ネットワーク解放、ボリューム削除docker compose down -v (Docker Documentation)
down --rmi local all画像削除(タグなし/全て)docker down --rmi local all
logs -f -tログ追従(タイムスタンプ付き)docker compose logs -f -t web (Docker Documentation)
exec -TTTYなしでコマンド実行docker compose exec -T app pytest (Docker Documentation)
run --rm一回限りのタスク実行docker compose run --rm worker rake db:migrate (Docker Documentation)
config --servicesサービス名を出力docker compose config --services (Docker Documentation)
config --variables参照変数を一覧(v2系で追加)docker compose config --variables (Docker Documentation)

実行例

基本:スタックを起動し、ログを追う

説明: compose.yaml から起動し、ログを追従します。
コマンド:

docker compose up -d
docker compose logs -f

-d はデタッチ、logs -f は追従) (Docker Documentation)

複数ファイルとプロジェクト名の指定

説明: 追加の上書きファイルを適用し、プロジェクト名を固定します。
コマンド:

docker compose -p myapp \
  -f compose.yaml -f compose.prod.yaml \
  --env-file .env.prod up -d

(Docker Documentation)

スケールアウトと設定検証

説明: Web を 3 副本で起動し、設定を検証します。
コマンド:

docker compose up -d --scale web=3
docker compose config --services

(Docker Documentation)

実行中コンテナへ入り、メンテコマンドを実行

説明: アプリサービスに入り、マイグレーション等を実行します(TTY不要なら -T)。
コマンド:

docker compose exec app sh -lc 'printenv | head'
docker compose exec -T app ./manage.sh migrate

(Docker Documentation)

片付け:関連リソースをまとめて削除

説明: コンテナ・ネットワーク・(必要に応じて)ボリュームとイメージを削除します。
コマンド:

docker compose down -v --rmi local

(Docker Documentation)

エラー例:Compose ファイルが見つからない

説明: 対象ディレクトリに compose.yaml 等が無いと失敗します。
コマンド:

mkdir /tmp/empty && cd /tmp/empty
docker compose up

出力例(概略):

can't find a suitable configuration file in this directory or any parent

-f で明示するか、ファイルを配置してください。) (Docker Documentation)

関連コマンド

  • docker : 単体コンテナ操作の基本 CLI。Compose もこれを基盤に動きます。 (Docker Documentation)
  • podman-compose : Podman 向けの互換ツール。
  • kompose : Kubernetes マニフェストへの変換ツール。
  • docker context : リモート/別環境のデーモンを切替。Compose からも利用可能。 (Docker Documentation)

備考

  • ファイル仕様: 旧 v2/v3 フォーマットは Compose Specification に統合。compose.yaml が推奨名です。 (Docker Documentation)
  • v1→v2 移行: 旧 docker-compose からの移行ガイド(CLI 名称・挙動差・環境変数の扱いなど)を参照。 (Docker Documentation)
  • .env と環境変数: .env は Compose 実行時に自動読込。--env-file で複数・差し替えが可能。env_file: をサービス側で optional にもできる(2.24.0+)。 (Docker Documentation)
  • 孤児コンテナ: プロジェクト名やファイル差替えで「orphan」警告が出ることがある。--remove-orphans を活用。 (Docker Documentation, Stack Overflow)
  • 新機能の追加: v2 系は継続的に機能追加(例: config --variables, up --watch など)。最新のリリースノートを確認してください。 (Docker Documentation)
  • 権限: Docker デーモンにアクセスできるユーザー(root か docker グループ)で実行します。
  • インストール: 通常は Docker CLI のプラグインとして同梱。サーバ向けにスタンドアロン版も提供されています。 (Docker Documentation)

参考

  • Compose CLI リファレンス(総合): docker compose コマンド群と共通オプション。 (Docker Documentation)
  • Compose file リファレンス(仕様): サービス/ボリューム/ネットワーク/プロファイル等。 (Docker Documentation)
  • docker compose up / down / logs 詳細: 起動・停止・ログ取得時の各種フラグ。 (Docker Documentation)
  • v1→v2 移行ガイド/差分: (Docker Documentation)
  • リリースノート(新機能・変更点): (Docker Documentation)
Bash玄

はじめまして!Bash玄です。

エンジニアとしてシステム運用に携わる中で、手作業の多さに限界を感じ、Bashスクリプトを活用して業務を効率化したのがきっかけで、この道に入りました。「手作業は負け」「スクリプトはシンプルに」をモットーに、誰でも実践できるBashスクリプトの書き方を発信しています。

このサイトでは、Bashの基礎から実践的なスクリプト作成まで、初心者でもわかりやすく解説しています。少しでも「Bashって便利だな」と思ってもらえたら嬉しいです!

# 好きなこと
- シンプルなコードを書くこと
- コマンドラインを快適にカスタマイズすること
- 自動化で時間を生み出すこと

# このサイトを読んでほしい人
- Bashに興味があるけど、何から始めればいいかわからない人
- 定型業務を自動化したい人
- 効率よくターミナルを使いこなしたい人

Bashの世界に一歩踏み出して、一緒に「Bash道」を極めていきましょう!

Bash玄をフォローする

コメント