docker compose

説明

Docker Compose です。

使い方

$ docker compose COMMAND

補足説明

Docker コンテナ内で複数のサービスを構築・管理するため、compose サブコマンドを docker compose [-f <arg>...] [options] [COMMAND] [ARGS...] ように使えます。

-f で Compose ファイルの名前やパスを指定

-f フラグを使い、Compose 設定ファイルの場所を指定します。

複数の Compose ファイルを指定

複数の -f 設定ファイルを追加指定できます。複数のファイルを指定すると、 Compose が1つの設定の中にそれらを統合します。指定したファイル順の設定で、 Compose が構築します。後続のファイルは、事前の処理を上書き・追加します。

たとえば、このコマンド行を見てみます。

$ docker compose -f docker-compose.yml -f docker-compose.admin.yml run backup_db

docker-compose.yaml ファイルは、 webapp サービスを指定しようとします。

services:
  webapp:
    image: examples/web
    ports:
      - "8000:8000"
    volumes:
      - "/data"

もしも docker-compose.admin.yml でも同じ名前のサービスを定義すると、以前のファイルで定義されていた同じ名前のフィールドは、すべて上書きされます。

services:
  webapp:
    build: .
    environment:
      - DEBUG=1

複数の Compose ファイルを使う場合、全てのパスは、 -f で指定した1番目の設定ファイルからの相対パスになります。この基準となるパスは、 --project-directory オプションを使って上書きできます。

-f にファイル名の代わりに - (ダッシュ)を使うと、標準入力から設定を読み込みます。標準入力からの設定に含まれる全てのパスは、現在の作業ディレクトリからの相対パスです。

- フラグはオプションです。このフラグをコマンドライン上で使わなければ、 Compose は作業ティレクトリと親ディレクトリを行き来し、 compose.yamldocker-compose.yaml ファイルを探します。

Commpose ファイルのパスを指定

-f フラグを使い、Compose ファイルのパスを指定できます。このファイルのパスとは、現在のディレクトリに存在していなくても、コマンドラインでパスを指定するか、あるいはシェル上の COMPOSE_FILE 環境変数 もしくは environment ファイル内で指定できます。

コマンドライン上で -f オプションを使う例として、Compose で Rails サンプルの実行を想定します。そして、 sandbox/rials ディレクトリに compose.yaml ファイルがあるとします。 docker compose pull のようなコマンドを使うとき、次のように -f フラグを使うと、あらゆる場所から db サービスに対する postgres イメージを取得できます。

$ docker compose -f ~/sandbox/rails/compose.yaml pull db

プロジェクト名を -p を使い指定

各設定ファイルはプロジェクト名を持ちます。 -p フラグを指定すると、プロジェクト名を指定できます。このフラグを指定しなければ、 Compose は現在のディレクトリ名をプロジェクト名として使います。プロジェクト名は COMPOSE_PROJECT_NAME 環境変数でも指定できます。

大部分の compose サブコマンドは、 compose ファイル無しでは実行できません。ですが、適切なリソースから情報を取得する場合は、プロジェクト名を渡すだけです。

$ docker compose -p my_project ps -a
NAME                 SERVICE    STATUS     PORTS
my_project_demo_1    demo       running

$ docker compose -p my_project logs
demo_1  | PING localhost (127.0.0.1): 56 data bytes
demo_1  | 64 bytes from 127.0.0.1: seq=0 ttl=64 time=0.095 ms

profile でオプションのサービスを有効化

--profile を使い、1つまたは複数のアクティブなプロファイルを指定できます。 docker compose --profile frontend up を実行すると、 プロファイル frontend のサービスと、プロファイルを指定していないサービスを開始します。また、複数のプロファイルも指定できます。 docker compose --profile frontend --profile debug up であれば、 frontenddebug が有効になります。

プロファイルは COMPOSE_PROFILES 環境変数でも指定できます。

環境変数でセットアップ

-f-p--profiles フラグを含む、様々な docker compose オプションを環境変数で指定できます。

COMPOSE_FILE 環境変数の設定は、 -f` フラグを渡すのと同じです。 COMPOSE_PROJECT_NAME 環境変数は、 -p フラグを渡すのと同じです。さらに COMPOSE_PROFILES 環境変数は、 --profiles フラグを渡すのと同じです。

フラグが明示的に指定される場合は、関連する環境変数は無視されます。

オプション

名前, 省略形 デフォルト 説明
--ansi auto ANSI 制御文字の表示を制御( never | always | auto
--env-file   別の環境設定ファイルを指定
--file , -f   Compose 設定ファイル
--no-ansi   ANSI 制御文字を表示しません(非推奨)
--profile   有効にするプロファイルを指定
--project-directory   別の作業ディレクトリを指定(デフォルト:Compose ファイルが存在するパス)
--project-name , -p   プロジェクト名
--verbose   詳細な出力
--workdir   非推奨! かわりに --project-directory を使う。別の作業ディレクトリを指定(デフォルト:Compose ファイルが存在するパス)

親コマンド

コマンド 説明
docker Docker CLI のベースコマンド。

子コマンド

コマンド 説明
docker compose biuld サービスの構築もしくは再構築
docker compose convert compose ファイルをプラットフォーム固有の形式に変換
docker compose cp サービス・コンテナとローカル・ファイルシステム間でファイルやフォルダをコピー
docker compose create サービス用のコンテナを作成
docker compose down コンテナやネットワークの停止と削除
docker compose events コンテナからリアルタイムにイベントを受信
docker compose exec 実行中のコンテナ内でコマンドを実行
docker compose images 作成したコンテナが使っているイメージを一覧表示
docker compose kill サービスコンテナを強制停止
docker compose logs コンテナからの出力を表示
docker compose ls 実行中の compose プロジェクトを一覧表示
docker compose pause サービスの一時停止
docker compose port ポートを確保している公開ポートを表示
docker compose ps コンテナを一覧表示
docker compose pull サービスのイメージを取得
docker compose push サービスのイメージを送信
docker compose restart コンテナの再起動
docker compose rm 停止済みのサービス・コンテナを削除
docker compose run サービスを一度限りのコマンドとして実行
docker compose start サービスの開始
docker compose stop サービスの停止
docker compose top 実行中のプロセスを表示
docker compose unpause サービスの一時停止を解除
docker compose up コンテナの作成と開始