条件付きでdocker-composeにボリュームをマウントする
私はdocker-compose.yml
設定。コンテナの1つにTomcatサーバーがあり、デフォルトの.war
ファイルはwebapps
ディレクトリに展開されています。
ホストマシンに常駐する一部のユーザーによって展開されるwar
アーカイブを渡す(オーバーライドする)機能が必要です。私は最高の方法は、何らかの方法で切り替え/オーバーライドを開始する能力を持つことだと思いますdocker-compose
:デフォルトとして、コンテナ内にあるwebapp(war
ファイル)を実行したいのですが、ホストからディレクトリをマウントできるようにしたい(たとえば、開発/デバッグ中)必要なら。
現在、私のdocker-compose.yml
。デフォルトが必要な場合はコメント化されています。
volumes:
# By default, there is the latest version of the application already present in the container
# If you want to provider the container with your own .war file, uncomment the following line
# - ./application/webapps:/usr/local/Tomcat/webapps
それを達成するより良い方法はありますか?
その行をコメントアウトするボリュームをマウントする(しない)代わりに、 https://docs.docker.com/compose/extends/#example-use-case を使用して、指定するサービス拡張を実行しますボリューム。
これは、2つの異なる問題に取り組むために行います。
- Dockerイメージが実稼働環境で実行され、必要なすべてのファイルがバンドルされている場合、ボリュームを指定しません。
- 開発中にボリュームを指定して、ライブの変更を確認します。
.warファイル名が「app.war」だとしましょう。次のようなenv変数を使用して上書きできます。
volumes: -./application/webapps/${APPLICATION_ENV}.war:/usr/local/Tomcat/webapps/app.war
その後、別のwarファイルを実行する必要がある場合は、APPPLICATION_ENV
値を、コンテナーを実行して再起動するために必要な値に変更するだけです。
docker-compose
に「条件付きボリューム」があるとは思いませんが、その方法で環境に応じてapp.warを変更できます。
他の方法は、docker-compose up/start
の後にスクリプトを実行して上書きし、必要な場合にのみ実行します。
docker-compose exec your-container-name-name cp /a/volume/path/app.war /usr/local/Tomcat/webapps/app.war