##[Docker]の概念。
Dockerとは、Go言語で作成されたリナックスコンテナ基盤のオープンソース仮想化プラットフォームだ。
###仮想化を使う理由は?
向上したコンピュータの性能をより効率的に使うために仮想化技術が多く登場した。
サーバー管理者の立場では、CPU使用率が10%台にしかならない活用度が低いサーバーのリソースの無駄にならざるを得ない。
だからといって、全てのサービスを一つのサーバーの中に入れると、安定性に問題が生じかねない。
そこで安定性を高め、リソースも最大限に活用できる方法で現れたのがサーバー仮想化である。
皆さんが知っている代表的な仮想化プラットフォームとしてVMがあります。
####コンテナとは?
コンテナは、仮想化技術の一つとして、代表的にLXC(Linux Container)がある。 従来OS を仮想化させていたものと異なり、コンテナはOS レベルの仮想化でプロセスを隔離して動作する方式で行われる。
一サーバの複数のOSを仮想化して使用するのと、コンテナ方式でプロセスを隔離して動作するのとでは、どのような違いがあるのか?
####VM仮想化プラットフォームvsDocker仮想化プラットフォーム
既存の私たちに慣れたVMの場合は、HostOSの上に仮想化させるためのHypervisorエンジン、そしてその上にGuestOSをのせて使う。
これは仮想化されたハードウェアの上にOS が乗っかる形でほぼ完璧にHost と分離されると考えてよい。
反面、コンテナ基盤の仮想化はDockerエンジンの上にApplication実行に必要なバイナリだけが上がるようになる。
OS仮想化を見ると、Host OSと完全に分離されるメリットはありますが、OSの上にOSを乗せるために重くて遅くならざるを得ませんが、コンテナ基盤の仮想化は、Host OSそしてDockerエンジンの上ですぐに動作し、Hostのカーネルを共有します。
カーネルを共有すればio処理が簡単になり性能の効率を高めることができる。
コンテナを使用することは、仮想マシンを生成するのではなく、HostOS が使用するリソースを分離して、様々な環境を作れるようにすることである。
コンテナ基盤はOS仮想化より優れていると言われているが、必ずしもそうではない。
OS 仮想化はコンテナベースの仮想化よりも高い隔離レベルをサポートしている。
これはセキュリティ的な面でさらに有利だ。
またOS 仮想化のカーネルを共有しないメリットもある。
カーネルを共有しないため、マルチOSが可能だ。
カーネルを共有しないためにマルチOSが不可能であることは、Linux 上にWindow を載せることができないという短所がある。
にもかかわらず、なぜDockerを使う理由は性能向上、優れた移植性、簡単にScale Outができる柔軟性だ。