Dockerの新製品の種類私は設計に関する質問があります。 メインアプリケーションディレクトリ内の他のコンテナで使用されているデータや情報をビルドで更新する必要があるPHPアプリケーションをDockerで展開する最良の方法は何ですか?Dockerデプロイメントアップデート共有ボリューム
例(アプリのsymfonyの種類を簡素化):
- application
- app
- src
- vendor
- conf
- conf/vhost.conf
- web/assets/*
する最初の試みは、2枚の画像
- を構築することでした/のは、唯一の2サービス
- php-fpm - nginx
1を簡素化しましょうphp-fpm:with
ADD。/var/www/htmlと設定/プロジェクト/
VOLUME/var/www/htmlと設定/プロジェクト/
ベンダー(作曲)Dockerfile
に私が到達することができた、そのようにインストールの/ var/WWW/HTML /プロジェクト/ nginxの上
volumes_fromのPHP-FPM
=> [構成および資産など
しかし、もし私が間違っていないのであれば、それは次のビルドでは私のイメージがVOLUME/var/www/html/project /を更新しないためですボリューム) =>私のコードは決して更新されません。
2 /それから私はそれをやってしまった:nginxの上のPHP-FPM:
- providing the last code base in the image: COPY . /data/image/app
- creating a named volume: docroot
- mount docroot on php-fpm
- adding a rsync on the entrypoint to sync /data/image/app to docroot:/var/www/html/project (with the good excludes that I needed)
- doing the vendors(composer) install in the entrypoint
=>は、まだvolumes_fromを使用。
私はしたいので重要です:いくつかの構成ファイルおよび/またはリソースを使用します、私はSolrのを追加する必要があり
- the conf/vhost.conf
- the assets
- maybe other stuff
など
3 /私は別のアプローチがあるとし具体的には、私は各画像に必要なものを追加することになります。
ビルドプロセスの複雑さが増えると思いますが、それは意味があります。
だから、私は何かを逃したと思いますか?アプローチ2/3/4、
ありがとうございました!
Thx!あなたのDMZとのアナロジーは面白いです。仰るとおりです。 #3は2枚の画像で計画されました。私はphp-fpmを拡張でき、nginxは拡張できないようにしたい。 私は決定を下すためにまだ完全にはっきりしていない2つの事柄を見ています。 - rsyncの方法(複数のコンテナ、同時に起動、またはグローバルボリューム(Swarm)など)を使用して明白な落とし穴がありますか? - 静的なファイル以上はどうですか?私は複数のサービスを持っています #3は最もクリーンなパスだと思いますが、#2はDockerの世界で有効な実用的なアプローチですか? – Plopix
rsyncの複数のコピーを実行する限り、私はそうではありません。 rsyncの複数のコピーを実行することを心配している場合は、ここで説明するように単純なロックファイルロジックを実装できます:http://stackoverflow.com/questions/9390134/rsync-cronjob-that-will-only -run-if-rsync-isnt-alreadynt-running swarmを使用しているときにグローバルボリュームの概念はありませんが、ボリュームを何らかの方法でバックアップすることはできますネットワークファイルシステムのrt。 – programmerq
あなたのコードはもはやあなたのDockerイメージの一部ではないので、私は#2のアプローチがまったく嫌いです。 画像は自己完結型である必要があります。これは、プロジェクトのビルド成果物でなければなりません。画像からコードを取り除くと、もはや独自の画像を配布することはできません。 – programmerq