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

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

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

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

Q&A

解決済

1回答

2340閲覧

Dockerに対する疑問

hojo

総合スコア195

Docker

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

1グッド

1クリップ

投稿2016/07/27 01:39

編集2016/07/27 01:54

現在Dockerについて学習しています。

DockerはLinux上で動作するコンテナ型の仮想化技術で、アプリケーションをDockerイメージとしてネットワーク上にアーカイブすることにより、どんなところにいても簡単にコンテナを作成して走らせることができる。また、Docker for macやWindowsなどもリリースされていてLinuxの枠を飛び越えて様々な環境(OS)上でコンテナを走らせることができるようになっているため、アプリケーションをコンテナ化することでOSに依存しない可搬性を手に入れることができる。また、デプロイの際にもコンテナを差し替えることでアプリケーションのアップデートができるため管理が楽になり、スケールさせる際にもサーバを増やしてコンテナを走らせるだけで同じサーバを複製できるほか、ローカル環境でもコンテナを動作させることができるため、開発環境の構築も楽になる。Dockerfileを利用すればイメージを抽象化でき、ビルドすることで様々な独自環境のイメージを作成することができるようになるため、容量の大きなイメージ自体を管理する必要もなくなり、Gitを併用すればアプリケーションソースの管理だけでなく、そのソースが動く環境をもバージョン管理することができるようになる。

と解釈しています。

イメージ説明

Dockerと言うと、印象に残るクジラのキャラクターを思い浮かべますが、このアイコンを見てみると「海」がDockerが動作しているコンピュータの環境(OS)であり「クジラ」が仮想化技術、そしてクジラの上に乗っかってる「箱」がコンテナと解釈することができると思います。とてもわかりやすい良いシンボルだと思います。

しかし、実際にDockerに触れてみると、いろいろと疑問が生まれてきました。

[疑問1]
このクジラのシンボルのように複数のコンテナを1つの環境で走らせることってあるのか?

例えば、もともとApacheを利用して複数のサイトをVirtualHostで運用していた場合、それぞれサイトをコンテナ化した場合にはこのような状態になるということでしょうか?その際にポートが衝突する問題が発生すると思うのですが「nginx-proxy」のようなプロキシを利用することで回避するのがベストプラクティスということなのでしょうか?

[疑問2]
MySQLのコンテナを作成し、PHPのウェブサービスのコンテナと同時に1つのサーバでコンテナを走らせたというようなパターンを考えた場合、スケールアウトできなくなりませんか?

サーバをスケールアウトさせると、DBの単一性が崩れるため、データがとっちらかってDBとして機能しなくなりませんか?このような場合、MySQLのコンテナをもう一匹のクジラの上に乗せる(つまりもう一台サーバを増やしてMySQL専用サーバの上でMySQLのコンテナを走らせる)ことで、1匹1コンテナのような形で2匹のクジラに管理させるようになるのでしょうか?そうすると、疑問1にもつながるのですが、複数のコンテナを一つの環境で走らせることがなくなると思ってしまうんですが...

[疑問3]
docker-composeなるものが存在し、より抽象度の高いコンテナを跨いだ環境の構築の自動化ができるようですが、結局、物理的なサーバが分かれることを考えると(例えばスケールアウトしてロードバランサによって負荷分散することを考えると)環境構築ができなくなりませんか?

Dockerはもともと複数のサーバで走らせることを想定していないのでしょうか?まさかそんなはずはないと思うのですが、混乱してしまっています。おそらく何か僕に足りない知識があると思うので是非アドバイスよろしくお願いします。

kei344👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

[疑問1]
複数のコンテナを1つの環境で走らせることってあるのか?

ハードウェアリソースをより効果的に利用するのが仮想化技術であり、複数コンテナ運用が前提のサイトが多いと思います。

その際にポートが衝突する問題

各コンテナには仮想ネットワークインターフェースが割り当てられ、各コンテナが物理サーバのような振る舞いになります。
従ってポートの衝突は発生しません。

[疑問2]
MySQLのコンテナを作成し、PHPのウェブサービスのコンテナと同時に1つのサーバでコンテナを走らせたというようなパターンを考えた場合、スケールアウトできなくなりませんか?

その考え方だと物理でも無理があると思いますが如何でしょうか?
(もしかしたら、[疑問1]の回答で納得頂けるのかもしれませんが・・・)
DBサーバはクラスタ構成にする、PHPなどのWebサービスを提供するサーバはロードバランスをするなどの設計が必要になり、コンテナ構成だから、仮想/物理構成だからという違いはないと考えます。

、1匹1コンテナのような形で2匹のクジラに管理させるようになるのでしょうか?そうすると、疑問1にもつながるのですが、複数のコンテナを一つの環境で走らせることがなくなると思ってしまうんですが...

クジラは意識せず、各コンテナが物理マシンの振る舞いになるとの理解であればどうでしょうか?

[疑問3]

docker-compose というのを使ったことがないのですが、少し調べてみたら、旧記事にはサポート範囲がローカルのみとありました。

投稿2016/07/27 02:23

over

総合スコア4309

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

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

hojo

2016/07/27 18:01

なるほど「各コンテナには仮想ネットワークインターフェースが割り当てられ、各コンテナが物理サーバのような振る舞いになります。 」という点を理解していなかったことが全ての混乱を招いているような気がしました。 Dockerのネットワークの仕組みを学習しようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問