質問: Dockerをつかって開発環境を作成したいです。 環境としては以下を考えております。 ### アプリケーション * CentOS7 * Aapache2.4 * Ruby2.4 * Rails5 * Vue2 ### DB、セッション周り(バージョンは未定) * MySQL * Redis Dockerを使って開発環境を作る場合、 アプリケーションとして一つのコンテナ、 DB、セッション周りに一つのコンテナという感じで2つのコンテナがあれば良いかなというところです。 DBやセッション系はすでに公開されているDockerイメージを仕様するつもりです。 ですが、アプリケーションの方は、apache,ruby,npm等必要な為、centosのイメージをdockerhubより取得し、 必要なミドルウェアをインストールして、スナップショットをとってイメージを保存しようと考えております。 聞きたいこととしては、このようなやり方が適切なのかどうかです。 docker初心者なので、イメージはそものそも自分で作ることはあまりないのか、最低限のイメージを取得し自分でカスタマイズするのがスタンダードなのか、ちょっと分かりませんでした。 また、dockerは一つのミドルウェアにつき一つのコンテナという認識だったのですが、今回アプリケーションでは複数のミドルウェアをインストールし起動することになります。 果たしてこのやり方は、間違っているのか?ほか位の良い方法があるのか聞きたいです。 よろしくお願いたします。 --- 追記 アプリケーションのコンテナイメージを最小限のcentosにしようと思った理由としては、ミドルウェアが複数あるためです。 rubyだけ起動する環境で良ければ、ruby用のイメージを取得したのですが、apacheもnpmもとなると rubyが入っているイメージにapache、npmも入れていくなら、最小限にして全てのミドルウェアをインストールしようと考えました。
回答: > > また、dockerは一つのミドルウェアにつき一つのコンテナという認識だったのですが、今回アプリケーションでは複数のミドルウェアをインストールし起動することになります。 > > > よく言われる原則はミドルウェアではなくプロセスだと思います。 一つのプロセスにつき一つのコンテナです。 > > ですが、アプリケーションの方は、apache,ruby,npm等必要な為、centosのイメージをdockerhubより取得し、 > > 必要なミドルウェアをインストールして、スナップショットをとってイメージを保存しようと考えております。 > > > これをするならDockerfileを組むべきだと思います。 コードで管理できた方が現状把握や今後の変更が容易になるからです。 > > アプリケーションとして一つのコンテナ、 > > DB、セッション周りに一つのコンテナという感じで2つのコンテナがあれば良いかなというところです。 > > > 一般的にはredisとMySQLをわざわざ一つのコンテナにはしないのではないでしょうか。 RailsとVueについてはアプリ構成が分からないとなんともですが、私ならAPI(Rails)+SPA(Vue)にしますので、Rails, Vue.js(+Nginx), MySQL, redis の4つのコンテナに分けます。