質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

3回答

2316閲覧

Docker:一つのコンテナにつき一つのアプリの理由

Ykkykk

総合スコア140

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2020/08/31 04:34

Dockerについて学習しているのですが、しばしばコンテナ間のネットワーク設定などの例示としてWordPressとMysqlをそれぞれのコンテナとして通信させるようなものを見ます。
例えばこちらのサイトでは、「はじめに」の中で以下のように、

一つのコンテナでは一つの機能(アプリケーション)を動かす構成にする場合が多い

と明確に記されております。

一つのコンテナ内にWordPressとMysqlを構築することもできるのではないかと思うのですが、なぜDocker(コンテナ一般?)では一つのコンテナにつき一つの機能を構築するのでしょうか?

例えば、CURLでHTTP通信を行ったり、MosquittoでMQTT通信を行ったりする一つのアプリケーションがあった場合、アプリケーションはCURLの処理とMosquittoの処理に分割するのが定石、ということになるのでしょうか?

コンテナについてもまだあまり理解していないため、このような疑問を感じているのかもしれません。
大変初歩的な事柄で恐縮ですが、ご教示いただけますと幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

一つのコンテナ内にWordPressとMysqlを構築することもできるのではないかと思うのですが、なぜDocker(コンテナ一般?)では一つのコンテナにつき一つの機能を構築するのでしょうか?

例えば、全てをまとめて一つのコンテナに収容してしまうと、
wordpressのみをアップデートしたい場合、
無駄にMysqlのビルドも実行されることになります。

二つに分けておけば、
wordpressを(あるいはmysqlを)アップデートするときは、その対象のコンテナのイメージを書き換えて再度ビルドするだけで良くなるので、分けているのではないでしょうか?また、その恩恵として、ビルドにかかる時間などが変わってくる、、、ということもあるのだと思います。

CURLでHTTP通信を行ったり、MosquittoでMQTT通信を行ったりする一つのアプリケーションがあった場合、アプリケーションはCURLの処理とMosquittoの処理に分割するのが定石

こちらの質問について、
確かに一つのコンテナに一つの機能を、、とありますが、
状況に応じては、まとめておいた方が都合が良い場合もあるようです。

拙いですが、参考になればと思います。

以下、参考書籍です。

https://www.amazon.co.jp/Docker-Kubernetes-%E5%AE%9F%E8%B7%B5%E3%82%B3%E3%83%B3%E3%83%86%E3%83%8A%E9%96%8B%E7%99%BA%E5%85%A5%E9%96%80-%E5%B1%B1%E7%94%B0-%E6%98%8E%E6%86%B2/dp/4297100339/ref=asc_df_4297100339/?tag=jpgo-22&linkCode=df0&hvadid=295704876452&hvpos=&hvnetw=g&hvrand=945474181450663720&hvpone=&hvptwo=&hvqmt=&hvdev=c&hvdvcmdl=&hvlocint=&hvlocphy=1009300&hvtargid=pla-526880560751&psc=1&th=1&psc=1

投稿2020/08/31 04:51

uky

総合スコア244

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ykkykk

2020/08/31 06:57

ご回答いただきありがとうございます。 状況に応じて一つのコンテナにしてしまったほうが良いこともあるということですね。 ありがとうございます!
guest

0

ベストアンサー

一般的な開発時にはその方が便利だからですね。
0. nginx
0. apache
0. mysql
0. postgres
0. php
0. python

のコンテナがあったとして、
1と3と5の組み合わせて開発していたけどphpをpythonに変えたいって時に1と3と6の組み合わせに変えるだけで済むからです。
他にもnginxだけバージョン変えたものを組み合わせて試したいとか。

反対に、提示されているワードプレスのように基本的には必ず同じ組み合わせphp+apache+mysqlで動くようなものならひとつのコンテナにまとめてしまった方が便利だと思います。
※ワードプレスが上記組み合わせかどうかは知りません。

個人的には便利そうなwebアプリをdocker-hubから落として使う事がありますが、それらのアプリはひとつのコンテナで完結しています。

投稿2020/08/31 04:48

hentaiman

総合スコア6426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ykkykk

2020/08/31 06:57

ご回答いただきありがとうございます。 開発や運用を考えると小さく分割して作成したほうが基本的には良いということですね。また場合によってはひとまとまりのコンテナにしたほうが良い場合もあるということですね。ありがとうございます!
guest

0

なぜDocker(コンテナ一般?)では一つのコンテナにつき一つの機能を構築するのでしょうか?

コンテナは旧来の仮想マシンと比較して、軽量で起動が高速、かつ複製が容易であるという利点があります。

コンテナを作成する際に単一機能で切り分けて作成しておくことで、例えば運用中に一部の処理だけ負荷が集中したらコンテナの複製を作るなどしてスケールアウト(負荷分散)することができます。

また、開発においても個々の機能単位で別々に開発することができるため、別機能のために必要なミドルウェアとの相性で不具合が起きる、といった事態がなくなります。

ざっくりこういう利点があるので、ひとつのコンテナに複数の機能を持たせないのが一般的です。

このような発想を突き詰めれば、システム全体をマイクロサービスと呼ばれる独立した小さなアプリケーションを組み合わせる開発手法となります。

コンテナ型仮想化はこの開発手法と相性が良いため、

一つのコンテナでは一つの機能(アプリケーション)を動かす構成にする場合が多い

と紹介されているんでしょう。

投稿2020/08/31 06:16

gentaro

総合スコア8947

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ykkykk

2020/08/31 06:58

ご回答いただきありがとうございます。 マイクロサービスという開発手法と相性が良いということなのですね。そちらについても調べたいと思います。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問