私が働いている会社の開発担当者から、Docker で少し違うことをするように頼まれましたが、私も慣れています。目標は、次の責任を持つ 2 つのコンテナーを持つことです。
コンテナー A: フロントエンドの反応アプリケーションをビルドし、バンドルを というディレクトリに配置するノード コンテナーapp/dist/
。これが完了すると、コンテナーは実行を停止します。
コンテナー B: から静的ファイルをサーバーする alpine nginx コンテナー/usr/share/nginx/html/app
。
<Container A>/app/dist
コンテナ A に構築されたファイルは、 にマウントされるボリュームを使用してコンテナ B に提供され<Container B>/usr/share/nginx/html/app
ます。
パブリックにアクセス可能なポートと nginx コンテナーの間に HAProxy レイヤーがあることに注意してくださいapp
。
上記のタスクは、次のような docker compose ファイルを使用して編成されています。
version: '2'
volumes:
webapp_build_volume: {}
services:
webapp_build:
build:
context: .
dockerfile: 'config/nginx/dockerfile-builder'
volumes:
- webapp_build_volume:/app/dist
- webapp_static_volume:/app/src/app/static
app:
build:
context: 'config/haproxy'
dockerfile: 'dockerfile-app-haproxy'
links:
- web
volumes:
- /var/run/docker.sock:/var/run/docker.sock
ports:
- '80:80'
- '1936:1936'
web:
build:
context: .
dockerfile: 'config/nginx/dockerfile-web'
environment:
- EXCLUDE_PORTS=443
- VIRTUAL_HOST=*
depends_on:
- webapp_build
volumes:
- webapp_build_volume:/usr/share/nginx/html/app
これは現在、docker 構成ファイルが初めてビルドされるときにのみ機能します。ボリュームが作成されると、ボリューム内のファイルは更新されなくなります。名前付きボリュームは確立後に更新できないと読みましたが、確認できません。実行を伴う回避策を見つけましたdocker-compose rm --force && docker volume webapp_build rm
が、CI サービスが非常に遅くなるため、可能であればキャッシュされたコンテナーを強制終了する必要はありません。
何か明確にできることがあれば教えてください (ここには多くの可動部分があることを理解しています)。私は docker 2 ベータ版も使用していますが、それによって私がここで行ったことをどのように変更できるかわかりません。