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を追加できます。 作成ファイルに追加して、サービスを選択的に有効にします。