Docker Composeは、サービスを選択的に使用するためのプロファイルをサポートするようになりました。 docker-compose.yml
のサービス 1つ以上の名前付きプロファイルにリンクできます。プロファイル名をdocker-compose up
に渡す そのプロファイルのサービスのみを開始し、特定の環境と構成に合わせてスタックのバリアントを作成できるようにします。
Composeはこれまで、アプリケーションの標準的な分散である単一のスタックを定義することに重点を置いてきました。プロファイルにより、スタックのどの部分を使用するかをカスタマイズする余地が増え、複雑なサービスのセットがよりモジュール化され、構成可能になります。
プロファイルの使用は完全にオプションです。既存のDockerComposeファイルは引き続き機能し、プロファイルをすぐに採用する必要はありません。
サービスプロファイルは、DockerComposeの開発とテストのフローでいくつかの一般的なフラストレーションを解決します。デバッグコンテナやロギングサービスなど、開発でのみ使用したいサービスがある場合があります。本番環境では、これらのサービスは必要なく、開始を避けたいと考えています。
以前は、これを実現するには、サービス定義を複数のファイルに分割する必要がありました。次に、扱いにくいup
が必要になります 開発中のすべてを開始するコマンド:
# docker-compose.yml version: "3" services: app: image: my-app:latest # docker-compose-dev.yml version: "3" services: debug: image: my-app-debug:latest
# start in production docker-compose up -d # start in development docker-compose -f docker-compose.yml -f docker-compose-dev.yml up -d
プロファイルを使用すると、両方のサービス定義を1つのファイルに結合できます。ファイルパスを手動で入力しなくても、フラグまたは環境変数を使用して特定のプロファイルを選択できます。これにより、文書化、作成、実行の手間が軽減された、より便利なエクスペリエンスが実現します。
プロファイルは、profiles
を設定することで作成されます docker-compose.yml
のサービスのフィールド 。プロファイルはリストとして指定されます。各サービスには、1つまたは複数のプロファイルを与えることができます。
version: "3" services: app: image: my-app:latest debug: image: my-app-debug:latest profiles: - dev
プロファイルインスタンスは、profiles
に付けられた名前から暗黙的に作成されます 田畑。プロファイルを共有するサービスは自動的に参加します。
プロファイルに含まれるサービスを開始するには、--profile
を追加します docker-compose up
へのフラグ :
docker-compose up --profile dev
このコマンドは、両方のapp
を起動します およびdebug
上記の作成ファイルからのサービス。 docker-compose up
を実行した場合 、--profile
を省略 フラグ、app
のみ サービスが開始されます。
--profile
を繰り返すことで、複数のプロファイルを同時に開始できます 国旗。 ComposeはCOMPOSE_PROFILES
もサポートしています --profile
の代替としての環境変数 。これは、プロファイル名のコンマ区切りのリストを受け入れます。
profiles
のないサービス 要求されたプロファイルに関係なく、フィールドは常に開始されます。サービスにプロファイルが与えられると、そのプロファイルが要求された場合にのみサービスが開始されます。複数のプロファイルを持つサービスの場合、それらのいずれかをリクエストすると、サービスを開始できます。
docker-compose run
を使用して手動でサービスを開始した場合、プロファイルは常に無視されます 。この場合、Composeは、プロファイルを共有している場合、またはプロファイルが割り当てられていない場合、要求されたサービスが依存するすべてのサービスも開始します。
ここでは、docker-compose run debug
を実行しています。 debug-utils
を開始します dev
であっても、サービス プロファイルが明示的に選択されていません:
version: "3" services: app: image: my-app:latest debug-utils: image: my-app-debug-utils:latest profiles: - dev debug: image: my-app-debug:latest depends_on: debug-utils profiles: - dev
暗黙の開始は、指定されたサービスの直接の扶養家族にのみ適用されます。 debug-utils
の場合 depends_on
もありました 、およびそのサービスはdev
を共有していませんでした プロファイル、正しく起動しません。
依存関係の解決がdocker-compose run
で正しく機能するため 、ツリー内のすべてのサービスは、最上位のサービスのプロファイルを共有するか、永続的に有効にする必要があります。これらの条件のどちらも当てはまらない場合は、--profile
を追加する必要があります 追加の必要なプロファイルを明示的にアクティブ化するためのフラグ。
サービスプロファイルは、サービスのさまざまな組み合わせを簡単に管理できる便利な作成機能です。プロファイルを使用することにより、サービスを複数の作成ファイルに分割することを回避できます。 --profile
を追加する 通常、複数のYAMLファイルをマージするよりも自然に感じます。
プロファイルを使用すると、メインのComposeアプリケーション内にサブスタックを構築できます。作成仕様の一部としてのそれらの導入は、開発中のスタックが、本番環境で使用されるもの以外の追加のサービスを組み込むことが多いという認識です。
より一般的には、プロファイルはスタックのカスタマイズを容易にすることでComposeをより用途の広いものにします。プロファイルは、環境管理へのアプローチとして想定されていますが、コミュニティが人気のある画像のさまざまなバリエーションを作成するのにも役立ちます。 WordPressのdocker-compose.yml
について考えてみてください mysql
を使用 およびmariadb
プロファイル:事前構成されたデータベースサービスを簡単に切り替えて、好みに合ったエンジンを選択できるようになりました。
Docker Compose 1.28は、今年初めにプロファイルを導入しました。 Composeバイナリの最新バージョン、またはWindowsとMac用のDocker Desktopがある限り、profiles
を追加できます。 作成ファイルに追加して、サービスを選択的に有効にします。