Docker-Composeを使用してDockerにsymfonyアプリケーションを実装しようとしています。私は少なくとも次のコンテナを持っています:
現在、上記の設定を使用した開発環境もあります。
Symfonyアプリケーションはローカル(ホスト)に保存され、アプリケーションを読み取ることができるように、PHP-FPMコンテナーでボリュームが使用されます。これはうまく機能します。我々bash
作曲/アプリ/コンソールコマンドを実行するためのphp-FPM容器に。
また、rabbitmqサーバーからのメッセージを消費するコンシューマー(Symfonyコマンド)を手動で実行します。
プロダクションでの私のオプションは何ですか?
1)アプリケーションを実行する単一のコンテナーを作成し、他のコンテナーがそれを使用できるようにすることはできますか?php-fpmコンテナーがアプリケーションコードにアクセスする必要があることがわかりましたが、コンシューマーを実行するためのコンテナーも作成したいと思います-コンテナーに実行するサービスの名前を渡します-つまり、単一のイメージを持つことができます任意のキューからのメッセージを処理するために柔軟に起動できます。このオプションのログ/キャッシュはどうなりますか?
2)アプリケーションは、それを必要とする各イメージ内に保存されていますか?これは私の最も嫌いなオプションです。アプリケーションを更新するには、各イメージをビルドする必要があります。
3)まだ調べていないことはありますか?
アプリケーションを簡単に更新できるようにしたい-おそらくスクリプト化されたものですが、ダウンタイムを最小限に抑えたいです-haproxyなどを使用してそれを行うことができます-他の誰かが本番環境でマルチコンテナsymfonyアプリケーションを実行した経験がありますか?
サービスごとにコンテナを実行します。Dockerの原則の1つは、「関心の分離」であることを忘れないでください。
ただし、同じコンテナにNginx + PHP-FPMがある場合があります。
(devまたはprod環境で)すべてのサービスを起動するには、docker-composeと魔法の「SYMFONY_ENV = dev」環境変数を使用してすべてを起動できます。コンシューマーを別のコナイナーで起動することをお勧めしますが、プロジェクト/ログ/キャッシュパスが異なる可能性があります。消費者が共有CPU /メモリ/ディスクで実行している場合、本番環境でオンラインパフォーマンスに影響を与える可能性があることを考慮してください。
私は現在、webappをデプロイ/ポストデプロイするための代替案を調査しています。次善のソリューションは、単純なエントリポイントbashスクリプトです(これは「dockerrun -dmyimagephp_entrypoint.sh」に渡されます。
その結果、次のようになります。
#$OPTIMIZE is an ENV-propagated or a calulated variable
su -c "php composer.phar install $OPTIMIZE" webmgr
cp -f web/HTACCESS_${SYMFONY_ENV} web/.htaccess
/usr/bin/supervisord -c /etc/supervisord/supervisord.conf
私がsupervisordを使用している理由は、実行する必要のある[program:]セクションをコピー/マウントする必要があるため、php-fpmとCLI /コンシューマーの両方の作業に適した単一のphpイメージを維持するためです。コンテナを強制終了せずにphpappserverを再起動することもできます。さらに、supervisordは、「デーモン化された」プロセスの管理に非常に優れています。
更新しました
webappはボリュームとしてマウントされ、docker-compose.ymlはプロジェクトのルートディレクトリにあります。このディレクトリには、dockerイメージ構成とsymfonyプロジェクトが含まれています。これはdocker-compose.ymlの抜粋です
webapp_fpm:
image: ...
volumes:
- ./symfony:/var/www/html
- ./docker-conf/supervisord:/etc/supervisord
- /var/log/appname/symfony:/var/log/symfony
entrypoint: "/bin/bash php_entrypoint.sh"
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加