する質問をすることでしか得られない、回答やアドバイスがある。40質問したいことなんでもかんでもDockerを使うべきなのか?といったところが主題です。CIツールなどを使ってみて、ふと抱いた疑問です。いろんな意見が聞ければと思います。大規模サービスの経験がないので、そもそもが違っていたらすみません。顧客ごとにバージョンが違うような運営がされてるサービスがあるとします。ver.Luna]これがapacheないしはnginxによって、virtualHost機能などで顧客A.example.comとか、example.com/顧客Aとかで配信されてるとします。内部的には区切られた運用がされているとします。各バージョンごとのhotfixはそこそこ頻繁にされていて、masterへと統合され次第、各バージョンに対してパッチしていたとします。一斉にプロビジョニングツールに置換しようという機運が高まったとします。Gitを用いて、masterがpushされ次第、ExampleImage/Oxygen:latestのようなイメージを作成し、docker-composeを用いてdown/pull/upするようにする。Dockerイメージはソフトウェア、ミドルウェア、Webサーバーなんかをひとかたまりにしていて、アクセスはnginx-proxyとかでコンテナ内部にリバースプロキシする。よってWebやミドルは分割される。顧客数が100などのオーダーであった場合、メモリの面で費用が嵩むような気がします。その代わりDockerによって細やかな設定の手間は省くことができます。対してAnsible,Chefでは運用の実態としては従来通りだが修正だったり新規契約だったり毎に発生する作業を簡略化できます。都度軽いRecipeの修正が必要になってくるでしょう。明らかにどちらかの方が優れている、と言えることはあるのでしょうか。付記たとえばDockerを使うことでapacheのC10K問題のようなメモリ不足が100ユーザーくらいできてしまうと目も当てられないですし、Ansible+Chefで運用するにしても、たとえばnginx+PHPだと(詳しいことは知りませんが)PHPはシングルスレッドなので、動作の低速化が懸念されるような気がいたします。一部の顧客が高負荷になったときにAnsible+Chefでは共倒れしてしまいそうですが、dockerならうまくバランスが取れそうです。いえdockerを使うとベースのメモリ消費量が高いから、そもそもスケールした時点でコストがものすごくかさんでしまいそうです。軍配が上がりそうな気がしています。皆さんどうでしょうか。ご意見お聞かせください!attachmentクリップ0気になる質問をクリップするクリップした質問は、後からいつでもマイページで確認できます。クリップした質問に回答があった際、通知やメールを受け取ることができます。自分も答えを知りたい質問者以外のユーザにも役立つ評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。-評価を下げられる数の上限に達しました評価を下げることができません1日5回まで評価を下げられます1日に1ユーザに対して2回まで評価を下げられます質問の評価を下げるteratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。コメントをしてください。送信する質問の評価を下げる機能の利用条件この機能を利用するためには、以下の事項を行う必要があります。件sort評価が高い順sort新着順sort古い順link+2よく調査されている印象を受けました。質問者さんはDockerをほとんど触った事がないのでは?ちょっと軌道修正すれば良い感じの結論が出せるでしょう。知っておいて欲しいのは、そもそもDockerはLinuxの1プロセスとして動作する仮想マシン風アプリなのでそんなにオーバーヘッドはありません。Dockerを使ったからといって全てが全自動になるわけでもありません。実際Dockerのコンテナを動かす為のオプションやdocker-compose.ymlファイルは依然Ansible等のプロビジョニングツールを使う事になるでしょう。optionを実行このどちらかになるくらいの違いしか無いわけですね。Dockerを使うことでapacheのC10K問題のようなメモリ不足が100ユーザーくらいできてしまうと目も当てられないですし、いや、そもそもこれメモリの問題じゃないんで...Apache2.2が10Kの同時アクセスを捌けず、慌ててCPUやメモリを追加しても性能が伸び悩む現象を指しています。これは単にApache2.2の作りが悪くて多数のアクセスを捌けないだけの問題です。我々普通のエンジニアがWebサーバアプリを自作するとなった時に、普通に設計して実装したら同じ問題出ちゃうよね〜ということで騒がれただけの話です。その後NginxやApache2.4が登場しC10K問題は過去の話になりました。Dockerとは違う話なんで一緒にしないようにしてくださいね。ここからどの様に調査していけばいいかをざっくり解説します。そもそもApacheとNginxを使った時にPHPとどういう関係で動かしているかよくわかってないんじゃないかと思いますのでそこからApacheはディレクトリとサーバのパスを1:1で紐付ける事が大前提の静的ファイルを配信するWebサーバです。PHPを動かしたいという人の為にmod_phpというモジュールが別途用意されており、これを組み込んだApacheは(設定ファイルを確認しながら)PHPのプロセスを4つほど立ち上げます。PHPファイルへのアクセスが来た場合、空いているPHPのプロセスへファイルを読み込ませて実行、出力結果をクライアントへ返し、PHPプロセスは即刻再起動する作りになっています。Nginxはmod_phpのようなモジュールは提供されていません。PHP-FPMという高速に動作するサーバを別途立ち上げてそこに接続を受け流しています。実行環境を構築するPHP-FPMはApacheのmod_phpと似たような挙動で、空のPHPプロセスを4つほど立ち上げて、処理が終わったらプロセスは削除しないで変数等を初期化して使い回すちょっと賢い設計だったかと記憶しています。要するにmod_phpもPHP-FPMも空のPHPプロセスを複数立ち上げてるだけで、アクセスが来ない限りそんなにメモリを食わないよって所が重要です。Dockerでやる場合、大まかに2つの手法があります。質問文で想定しているのは前者で、マイクロサービスの理想はそちらにあるでしょう。自分でDockerイメージのホスティングサーバを立ち上げて管理するかの二択になるでしょう。pull等を利用して変更後のPHPファイルを受け取る手間が発生します。ここで登場するのがCIツールやAnsible等ですが、この場合はやってる事は従来通りの手法なので普通にサーバ立ち上げた後のコマンドが変わるだけです。Dockerなんで別にファイルを外から注入してもそんなにパフォーマンスは落ちません。後者の方が良いんじゃないかな?感はありますね。評価が高い回答ほどページの上位に表示されます。remove低評価0回答の評価を下げる下記のような回答は推奨されていません。評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。編集ありがとうございます。これまで、Dockerでいろんなサービスのパッケージ(Redmineとか、GitLabとか...)を1つのマシンで立ち上げて複数動かしてると、動作が重くなってしまったり、DockerがハングしてしまったことがあってDockerってリソースたくさん食うのかな?たくさんコンテナを立ち上げすぎると不安定になるのかな?っていう疑問がありました。(もちろんこの不安定には配布イメージの構成だったりがあるんだと思います。GitLabはDockerであろうが、サーバー設置であろうが、メモリ設定を適切にしないと動作が安定しませんし....)なので、そこを出発点として、なんというか....サーバーとWebサーバーソフトウェアが1対1である場合と、Dockerによって1対多になる構成の場合(Dockerとサーバーが1対1)とで、もしパフォーマンスに差異があるのなら、いろんなリスクを考えてもどっちの方が利便性だったり動作として良いのかなってところでした。結局Dockerの消費するリソースっていうのは大きく考えなくてよくて(OSを内包してるからといって、そんなにオーバーヘッドはない)究極ソフトウェアはメモリとCPUがあれば処理はいくらでも捌けるものであり、C10Kなど、諸般の問題っていうのは結局作りの問題に過ぎなくて、Dockerが安定していて、nginx+FPMという優れた仕組みがある以上、サーバーとWebが1対1であろうが、1対多であろうが、どっちでもいいって感じなんですね。:Dありがとうございます。いう疑問がありました。(もちろんこの不安定には配布イメージの構成だったりがあるんだと思います。利便性だったり動作として良いのかなってところでした。どっちでもいいって感じなんですね。頂いたご意見への回答は行っておりません。