質問: DockerでECSを使ってWebサービスの環境構築を行おうと考えています。 ただDockerの中のOSを何にすれば良いかわからず困っています。 と言いますのも、Dockerの一般的な構築はサービス毎にDockerを個別に立てるのが一般的と聞きました。 そうなるとまずDockerをまとめるDockerがおり、その中に役割毎のDocker(サーバ、DB...)を立てるのかと想像しました。 だとすると役割毎に立てるDockerのOSを一般的なLinuxOS(CentOSなど)にしてしまうと、OSの容量だけでもかなり増えてしまいそうです。 その問題を解決するためにCoreOSというOSが存在することを知りました。 そうなると疑問点があります。 このDockerをまとめるDockerもCoreOSにするべきなんでしょうか? また今まで自分が書いた想定は一般的なのでしょうか? ご回答いただけると助かります。
回答: おそらくですが、質問者様は、いわゆるマイクロサービスアーキテクチャを docker で実装する話をしているのだと思います。さらには、あるフロントエンド用のサービス(html のレンダリングなどは、ここでやる想定)があって、そのサービスがバックエンドサービスと通信を行い、ウェブアプリケーションとして動作させる形態を想像しているのだと思います。 またその際に、バックエンドの docker は、フロントエンドのサーバー (docker) の中で立ち上げることも想定しているのかなと思っています。 仮にそうだったとした場合、一つ重要な点は、 フロント用サービスと、バックエンドのサービスは、基本的に独立したサーバーとして運用する構成にするのが通常である、という点です。 docker でフロントとバックエンドのサーバーを分けた場合、それらは同じ階層の docker として運用し、一方(フロント) がもう一方(バックエンド) に通信を行いに行く、という構成になると思います。 わかりやすいのは、 docker-compose にバックエンドとフロントエンド、それらをつなぐポート情報を記述するようなイメージでしょうか。 こういった構成をとった場合、フロントとバックエンドのベースイメージは、基本的になんでもいいはずです。重要なのは、コンテナの expose しているポートに通信すると、正しく期待した動作をコンテナがしてくれることです。 さらに注釈を加えると、 docker の中で docker を使うのは、やめたほうがいいと思います。docker の unix socket をコンテナの中に埋め込むような方法などで、コンテナの中からでも docker を使えるように設定できなくはないですが、マウントの解決がやたら面倒になった記憶があります。