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

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

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Docker

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

Q&A

解決済

5回答

14148閲覧

Dockerって1つのコンテナに複数のパッケージをインストールして構築してはいけないのでしょうか?

Green_man

総合スコア18

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

Docker

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

1グッド

0クリップ

投稿2018/04/24 04:51

勉強中の学生です。
centosでサーバー構築をしているのですが
Dockerで構築を行っていてふと疑問です

Dockerのサイトなどをみていて皆さん機能やパッケージごとにコンテナを構築してそれぞれを連携されているようですがコンテナを1つ立てて、そこに複数のパッケージを入れるのはあまり良くないのでしょうか?

例えば1つのコンテナにMySQLやアパッチ等をいれて実装するなど

Dockerについてまだ認識不足なところもあるので
なにかおかしい点が有りましたらご指摘いただけたら嬉しです

chapin👍を押しています

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

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

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

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

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

guest

回答5

0

ベストアンサー

コンテナを1つ立てて、そこに複数のパッケージを入れるのはあまり良くないのでしょうか?

はい。
理由は、Dockerの恩恵を最大限に受けることができないからです。

じゃあ、その恩恵って何なの?ってなりますよね。
それはEach container should have only one concernに書かれています。

ここでは主に水平方向スケーリングの容易性コンテナの再利用性が挙げられています。

主に開発環境で利用想定であれば、特に後者のコンテナの再利用性なんかは重要になってくると思います。

例えば、アプリAの開発のためにMySQLとApacheを1コンテナで作成した場合、
急にアプリBをPostgreSQLとApacheで開発するぞってなって時にApacheコンテナの再利用性が失われますよね?
MySQLとApacheを別コンテナにしていれば、Apacheコンテナだけ流用できるわけです。

あと、個人的にはトラブルシューティングがしやすいパッチやアップグレードの影響を最小限にできる等も大きな恩恵だと思っています。

投稿2018/04/24 08:13

xenbeat

総合スコア4258

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

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

0

正確にはパッケージごと、機能ごとではなく、プロセスごとです。

https://eng-entrance.com/linux-command-ps
http://gihyo.jp/admin/serial/01/linux_containers/0002

まあ、大体のケースでは「機能ごと」で捉えても弊害はないような気がします。

自分の端末でプロセスを確認するにはターミナル上でpsコマンドを実行します。
(Macの場合。WindowsならLinux仮想マシン上を起動する必要があります)。

Dockerでは「プロセスごとにコンテナを分ける」というのが模範的な作法(ベストプラクティス)とされています。
ただ、作法は絶対ではないので、コンテナに全てのプロセスを詰め込んで動かすことは可能です。

Linuxを軽くかじっていないと「そもそもプロセスって何?」となるので、Dockerを扱うにあたっては最低限のLinuxの知識が前提とされているように思います。
私もDockerがさっぱりわからなかったのですが『新しいLinuxの教科書』を読んでから大分楽になりました。
Dockerに入門するにはまずLinuxに入門することが遠回りなようで近道だと思っています。

投稿2018/04/24 05:39

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

そこに複数のパッケージを入れるのはあまり良くないのでしょうか?

YESかNOかで言えばその通りなのでYES。

結論から言えばDockerはオーバヘッドがほぼ無くてコンテナを沢山作れます。
じゃあPHPとMySQLはわざわざ同じコンテナで動かさなくても良いよねという文化なのです。


以下ちょっと詳細な解説

Dockerは大枠で見ればVirtualBOXと同じく仮想マシンを生成する技術です。
VirtualBOXでは1台のマシンに「MySQLやアパッチ等をいれて実装する」のが一般的ですね。
Dockerでも同様の事がしたくなりますが事情が異なります、

参考サイト: 今からでも間に合うDockerの基礎。コンテナとは何か、Dockerfileとは何か。Docker Meetup Tokyo #2

Dockerは別に仮想マシン(コンテナ)を何台立ち上げても(ローレベルでは)仮想マシンではないのでオーバーヘッドが殆どありません。
ポコポコとこれはApache(+PHP)専用マシン、MySQL専用マシンという風に機能毎にコンテナを作っても構いません。

例えばPHPは7.2.1の新しい構文を使いたいけど、
MySQLは枯れてる方が嬉しいから5.6使おう…みたいな選択も簡単に出来るわけですね。

各サーバソフトはDcokerHubというサイトでバージョン別に管理されてますので、
特殊なモジュールを導入しない限りはDockerHubから落として使うだけで事足ります。


VirtualBOXはCPUから切り出した仮想CPU、メモリから切り出した仮想メモリ、という風にホストマシンから様々な機能を切り出して専有します。
その切り出した能力を集めて1台の仮想マシンを作るので非常にコストが重く低速であり、ホストマシンにも多大な負荷をかけてしまいます。

Dockerと同じようにApacheで1台、MySQLで1台という構成は不可能ではありませんが、
重いIDEやブラウザとセットで利用する場合はそれなりに高性能なスペックのマシンが要求されます。

従って、実際の開発環境構築時は1台だけ立ち上げて、
その1台にシステムを構築する全てのソフトウェアをぶち込む設計が一般的でしょう。

投稿2018/04/24 05:28

編集2018/04/24 09:16
miyabi-sun

総合スコア21158

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

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

over

2018/04/24 08:59

> DockerはVirtualBOXと同じく仮想マシンを使ったWebサーバを構築する技術です。 DockerはWebサーバ限定なのでしょうか?
miyabi-sun

2018/04/24 09:01

おっと違いますね。直しておきます。
guest

0

マイクロサービスとかをキーワードにして検索してみてはいかがでしょう。

開発環境の閉じ込めなら全部突っ込んでもいいかも。
これは1つの機能ということに分類されるかもしれませんが。
https://github.com/Kaggle/docker-python/blob/master/Dockerfile

投稿2018/04/24 09:58

mkgrei

総合スコア8560

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

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

0

良い悪いではなく、
分けることにメリットがあっても
分けないことにメリットがありません。

例えば1つのコンテナにMySQLやアパッチ等をいれて実装するなど

これって開発に限った話をしていますか?
開発に限った話であれば、dockerの恩恵はあまり大きくないかと思います。
(開発環境構築という話であれば大きいですが、1人での開発なると。。。)
ホストOSにそのまま環境作ったほうが簡単です。

(以下、dockerに限った話ではありませんが)
一般的なシステムは、apacheやdatabaseなどでサーバを分けて運用されています。
なおかつ正副の2台構成だったりします。
運用視点で、簡単な理由のいくつかとして、
・どれか1つのサーバが落ちた場合も障害の影響を最小限にするため
・障害の切り分け(調査)を早くするため
・復旧までの時間を最短にするため
などが挙げられます。
基本的にシステムは作ることより
どれだけ安定して運用できるかが重要になります。

こういったことを考えると、
1つのコンテナに全部入れてしまうとメリットが感じられません。

投稿2018/04/24 08:16

szk.

総合スコア1400

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問