同じLAMP(またはLEMP)アプリケーションの多くのインスタンスをデプロイする必要があります:
アプリケーションに必要なもの:
Nginx
、MariaDB
、PHPFPM
)composer
、bower
、...)Dockerのドキュメントと多くのハウツーを読んだ後、このWebアプリケーションをドッキングするためのさまざまなソリューションを見つけました:
すべてのスタックは1つのコンテナにあります:
mysql
およびwebappデータファイル用のマウントされたボリューム例:
Tutum
は、Wordpress Application: https://github.com/tutumcloud/tutum-docker-wordpress のオールインワンコンテナーを提供しますPhusion
は、Docker用に最適化されたベースイメージを提供し、ドキュメントの精度を高めます( https://github.com/phusion/baseimage-docker#docker_single_process ):
Dockerは、コンテナ内の複数のプロセスで正常に動作します。実際、1つのプロセスに限定すべき技術的な理由はありません。
長所(私見):
短所(私見):
デプロイするWebアプリケーションごとに、コンテナスタックがデプロイされます:
Nginx
、Mysql
、PHP-FPM
、composer
、bower
、...)は、ドッキングするか、phpfpmコンテナにマージすることもできます。例:
Gaudi
は、3つの「デーモン」コンテナ(nginx、mysql、phpfpm)と2つのアプリコンテナ(composer、bower)に基づくLEMPアーキテクチャの例を提供します( http:// marmelab .com/blog/2014/06/04/demo-symfony-with-docker-and-gaudi.html )Pro(私見):
短所(私見):
私はOpsよりもDevであり、また混乱しています。
だから、質問:
最近、このタイプのセットアップについてDockerで分析を行いました。 Dockerを一種のMicroVMと見なす人がいることは知っていますが、私の考えは、Dockerの哲学はコンテナごとの単一プロセスに傾いているということです。これは、プログラミングにおける単一責任の原則によく追従します。 Dockerコンテナが多ければ多いほど、再利用性が低くなり、管理が難しくなります。ここに私の考えをすべて掲載しました。
http://software.danielwatrous.com/a-review-of-docker/
その後、Dockerを使用してLEMPスタックを構築しました。 PHPとNginxプロセスを別個のDockerコンテナーに分割することにはあまり価値がありませんでしたが、Webとデータベースの機能は別個のコンテナーにあります。リンクとボリュームの管理方法も示しますコンテナでSSHデーモンが実行されないようにするために共有します。ここで行ったことを参考にしてください。
http://software.danielwatrous.com/use-docker-to-build-a-lemp-stack-buildfile/
コンテナごとの単一機能の複雑さの複雑さについては、あなたは正しいです。個別の分散層があるように見えます。非常に大規模なアプリケーションがこれを長年行ってきましたが、通信、セキュリティ、および管理に関しては複雑さが増しています。もちろん、多くの利点ももたらします。
両方のソリューションが可能です。ただし、Dockerの「哲学」との互換性が高いため、ソリューション2(プロセスごとに1つのコンテナー)を使用します。
Dockerの良いところは、独立したビルディングブロック(単一のアプリケーションのイメージ)でアプリケーションスタック(あなたのものと同じ)を作成できることです。これらの構成要素を組み合わせて再利用できます。 公式Dockerレジストリ を見ると、ほとんどのコンポーネントがビルド前のイメージとして見つかります。例えば。 Nginxは https://registry.hub.docker.com/u/dockerfile/nginx に、MySQLデータベースは https://registry.hub.docker.comにあります。/_/mysql 。したがって、プロセス/アプリごとに1つのコンテナーを使用することを選択した場合、スタックのセットアップは非常に簡単になります。
(注意、これは単なる例であり、PHP and stuff ...)には慣れていません。)
画像を取得:
docker pull mysql
docker pull dockerfile/nginx
docker pull tutum/Apache-php
docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql
docker run -d -p 80:80 -v <sites-enabled-dir>:/etc/nginx/sites-enabled -v <log-dir>:/var/log/nginx dockerfile/nginx
docker run -d -p 80:80 tutum/Apache-php
このように非常に簡単にスタックをセットアップできます。また、必要に応じて、いくつかの単一のコンポーネントを変更できます。例えば。別のコンポーネントに触れることなく、MariaDBでMySQLデータベースを変更できます。
このソリューションの最も複雑なことは、スタックの構成方法です。コンテナをリンクするには、 https://docs.docker.com/userguide/dockerlinks をご覧ください。このアプローチを使用して、たとえばMySQLコンテナーとアプリケーションコンテナー。