Docker挫折したマンを助けたい

kujira_zasyou

どうも、エンジニアのミヤマです。

最近、コンテナやDockerといったワードをよく聞くようになってきました。
しかし一方で、さわってみて挫折した人も少なくないのかなと思います。

そんなDockerで挫折した人をもう一度立ち直らせるべく、今回はDockerを導入するにあたって気をつけること、意識すること、さらに、実際に導入するというところまでやっていきます。

このブログでは、アーキテクチャ的な用語はできるだけ使わずに説明します。

まず「イメージ」と「コンテナ」を理解する

docker_arch1

Dockerを始めると一番最初に理解するべきは、「イメージ」と「コンテナ」という概念です。

「イメージ」を作る

まずは、「イメージ」についてです。

ところで、osをインストールしたことはありますか?

WindowsならインストールのCD-ROMを入れて、インストールすると思います。
そのCDの中には、OSの「イメージ」が入っています。
このとき「イメージ」は、まっさらな、初期状態のOSが入っています。

データは持っていません。

dockerは、この「イメージ」という単位で管理されます。
dockerにおける「イメージ」は、そういうOSのCD-ROMを想像すると「イメージ」の理解がしやすいかもしれません。

「コンテナ」で実行する

Dockerは、イメージを「コンテナ」で実行します。
これは、イメージを実行するための仮想マシンみたいなもの、という理解でいいです。

ここで頭の片隅に残してほしいのは、コンテナは一つのプロセスとネットーワークをつくる、ということです。

Dockerってこんな感じ

docker_arch2

Dockerは、プロセス、ネットワークを仮想化する

Dockerでは、ひとつのコンテナに一つのイメージを実行します。

このイメージの正体は、ひとつのプロセスです。

例えば、それはphpのイメージやapacheのイメージ、rubyのイメージ、mysqlのイメージを以って、コンテナで実行することで、
その中には、それらに応じたプロセスが実行されます。

ここで大事なことは、ひとつのDockerのコンテナの中には、一つのプロセスが実行される、ということです。

Dockerでネットワークをつくる

Dockerでは、コンテナはコンテナ同士をつなぐネットワークを作ることができます。

例えば、phpを実行するコンテナとmysqlを実行するコンテナをネットワークをつないで、ひとつのシステムを構成することができます。

なぜDockerか?

ここまでDockerってこんな感じのモノ、を示してきました。でも、なぜDockerを使う必要があるんでしょうか?ここでDockerのメリット、デメリットを考えてみます。

Dockerのメリット

  • 管理がラク

一つのサーバで、複数のサービスを運用すると、結構面倒です。サーバを増やそうとすると、そのたびに初期設定をして。。。ということをするんですが、Dockerはそれをまるっと一つの「イメージ」(詳しくは後で)として管理することができます。
一方でDockerならコマンド一つでサービス(プロセス)、一つのサーバの中にあたかも仮想マシン的な感じで、実行することができます。
でも、Dockerはそれを一つのイメージとして管理します。
また、これはインフラリソースの柔軟性ともいえます。

Dockerのデメリット

  • 学習コスト

Dockerは「コンテナ」です。
「コンテナ」であり、「仮想マシン」とは似て非なるもの。

今までのVirtualBoxなどの仮想マシンアプリを使ってきた人にはとっつきにくいと思います。
dockerを始めるときは、そういった先入観を捨てないといけないように思います。

これになれるまでに時間がかかります。まー、慣れです。

  • 脆弱性

これは、Dockerの開発が進んでいるが故にしかたがありません。
IT技術において脆弱性はどんなものにもありますし。
今後も何かしらのセキュリティホールは見つかると思います。


次回は実際に、dockerのコンテナを実行したりしてみようとおもいます。今回はこんなところで。

The following two tabs change content below.

ミヤマ

「(プログラミング言語)使い」みたいなのダサいと思ってる系エンジニアです。そんなことより、モテたいです。
新アプリ事前登録受付中!!

今月のオススメアプリ♪

stache