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

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

ただいまの
回答率

90.35%

  • CentOS

    2821questions

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

  • Docker

    803questions

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

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

解決済

回答 5

投稿

  • 評価
  • クリップ 0
  • VIEW 925

Green_man

score 9

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

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 5

checkベストアンサー

+4

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

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

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+3

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

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に入門することが遠回りなようで近道だと思っています。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

+1

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

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 17:59

    > DockerはVirtualBOXと同じく仮想マシンを使ったWebサーバを構築する技術です。

    DockerはWebサーバ限定なのでしょうか?

    キャンセル

  • 2018/04/24 18:01

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

    キャンセル

0

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

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

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • CentOS

    2821questions

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

  • Docker

    803questions

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

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