本番環境でのDocker環境でのSymfonyの使用

マンス

Docker-Composeを使用してDockerにsymfonyアプリケーションを実装しようとしています。私は少なくとも次のコンテナを持っています:

  • Nginx
  • Rabbitmqサーバー
  • PHP-FPM
  • MySQL
  • Solr

現在、上記の設定を使用した開発環境もあります。

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」に渡されます。

  1. 環境を整える
  2. ベンダーのダウンロードと更新
  3. リソースをcdnに同期し、dbスキーマを更新します。
  4. アプリケーションサーバーを実行します(この場合はphp-fpm、私はsupervisordを使用してタスクを実行します)

その結果、次のようになります。

#$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]

編集
0

コメントを追加

0

関連記事

分類Dev

本番環境でのDockerの使用

分類Dev

本番環境でのDockerの理解

分類Dev

java:本番環境でのprintStackTraceの使用

分類Dev

本番環境でのMemoryStoreの使用

分類Dev

本番環境でのHyperledgerFabricの使用

分類Dev

ApacheHAWQの本番環境での使用

分類Dev

本番環境でのsymfony / dotenvバンドルの使用

分類Dev

本番環境でdockerを使用したrabbitmqの使用

分類Dev

本番環境でのTomcatの実行

分類Dev

本番環境でのJavaScriptの更新-IIS

分類Dev

本番環境でのSymfonyのキャッシュの処理

分類Dev

本番環境でのSpring Data Rest

分類Dev

本番環境でのBrowserify.js

分類Dev

Railsnomethoderrorは本番環境でのみ

分類Dev

本番環境でのNoSuchMethodError例外

分類Dev

docker-swarmvs.docker-本番環境の単一ホストで作成

分類Dev

本番環境でのDjangoでのSQL Serverの使用

分類Dev

SpringBootアプリの本番環境でのTomcatの使用

分類Dev

Rails本番環境でのAngularのng-srcの使用

分類Dev

本番環境で使用した場合のDockerコンテナの動作

分類Dev

jdbcを使用した本番環境でのoreintdbの使用

分類Dev

本番環境でのMSグラフAPIの使用

分類Dev

Angular2:本番環境でのgzipファイルの使用

分類Dev

Rails4-本番環境でのCDNの使用

分類Dev

本番環境でのGoogleAppEngineとデータストアの使用

分類Dev

Heroku本番環境のFactoryBot

分類Dev

本番環境でGoのHTTPサーバーを使用する

分類Dev

本番環境で使用するApachecassandraのバージョン

分類Dev

本番環境とテスト環境でのGitLabブランチ

Related 関連記事

ホットタグ

アーカイブ