Compose で プロフィール を使う¶
これにより、1つの docker-compose.yml
ファイルで、たとえばデバッグ用や開発タスクといった、特定の場面でのみ起動する追加サービスを定義できます。
サービスにプロフィールを割り当てる¶
サービスにプロフィールを割り当てるには、 profiles 属性 にプロフィール名を
version: "3.9"
services:
frontend:
image: frontend
profiles: ["frontend"]
phpmyadmin:
image: phpmyadmin
depends_on:
- db
profiles:
- debug
backend:
image: backend
db:
image: mysql
こちらにあるサービス frontend
と phpmyadmin
は、プロフィール frontend
と debug
にそれぞれ割り当てられ、それぞれ対応するプロフィールが有効な時にのみ起動します。
profiles
属性がないサービスは「常に」有効です。たとえば、この例では docker compose up
によって backend
と db
のみ起動します。
有効なプロフィール名は、正規表現 [a-zA-Z0-9][a-zA-Z0-9_.-]+
の形式です。
注釈
アプリケーションの中心となるサービスは、常に有効かつ自動的に起動するよう、 profiles
を割り当てるべきではありません。
プロフィールの有効化¶
プロフィールを有効にするには、 コマンドラインのオプション で --profile
を追加するか、 COMPOSE_PROFILE 環境変数 を使います。
$ docker-compose --profile debug up
$ COMPOSE_PROFILES=debug docker-compose up
このコマンドは、どちらも debug
プロフィールを有効にしてアプリケーションを起動します。先述の docker-compose.yml
ファイルを使えば、これによってサービス backend
、 db
、 phpmyadmin
が起動します。
複数のプロフィールを指定するには、複数の --profile
フラグを使うか、 COMPOSE_PROFILE
環境変数でカンマ区切りのリストを渡します。
$ docker-compose --profile frontend --profile debug up
$ COMPOSE_PROFILES=frontend,debug docker-compose up
プロフィールの自動有効化と依存関係の解決¶
コマンドライン上で対象となるサービスに対して明示的に profiles
を割り当てる場合、このプロフィールは自動的に有効化されるため、手動で有効化する必要はありません。これは一度だけの実行やデバッグツールに役立ちます。次の設定例で考えましょう。
version: "3.9"
services:
backend:
image: backend
db:
image: mysql
db-migrations:
image: backend
command: myapp migrate
depends_on:
- db
profiles:
- tools
# backend と db のみ起動
$ docker-compose up -d
# こちらは db-migrations を実行(必要となる db も起動)するにあたり、
# プロフィール `tools` を自動的に有効化
$ docker-compose run db-migrations
ただし docker-compose
は、コマンドライン上でサービスのプロフィールを自動的に有効化しますが、依存関係のプロフィールは有効化しないのを覚えておいてください。つまり、対象とするサービスにある depends_on
で指定された(依存関係のある)サービスは、共通のプロフィールを持つ必要があり、常に有効化される( profiles
は無視されます)か、明示的に一致するプロフィールを有効化する必要があります。
version: "3.9"
services:
web:
image: web
mock-backend:
image: backend
profiles: ["dev"]
depends_on:
- db
db:
image: mysql
profiles: ["dev"]
phpmyadmin:
image: phpmyadmin
profiles: ["debug"]
depends_on:
- db
# これは「web」だけ起動
$ docker-compose up -d
# これは mock-backend を起動し(必要となる db も起動)、
# 自動的にプロフィール「dev」を有効化
$ docker-compose up -d mock-backend
# これはプロフィール「dev」が無効化されているので起動失敗
$ docker-compose up phpmyadmin
対象が phpmyadmin
の場合、そのプロフィール、ここでは debug
が自動的に有効化されますが、 db
が必要とするプロフィール、ここでは db
は自動的に有効化されません。この問題を解決するには、 db
サービスに debug
プロフィールを追加するか、
db:
image: mysql
profiles: ["debug", "dev"]
あるいは db
のプロフィールを明示します。
# プロフィール「debug」は対象の phpmyadmin によって自動的に有効化
$ docker-compose --profile dev up phpmyadmin
$ COMPOSE_PROFILES=dev docker-compose up phpmyadmin
ほかの Compose ドキュメント¶
Compose ファイル リファレンス
参考
- Using profiles with Compose | Docker Documentation