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 ファイルを探します。

Compose ファイルのパスを指定

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

コマンドライン上で -f オプションを使う例として、Compose で Rails サンプルの実行を想定します。そして、 sandbox/rails ディレクトリに 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--profile フラグを含む、様々な docker compose オプションを環境変数で指定できます。

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

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

オプション

名前, 省略形

デフォルト

説明

--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 build

サービスの構築もしくは再構築

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

コンテナの作成と開始