Dockerの利点

Docker はコンテナ型の仮想化サービスを提供します。先に述べたようにコンテナ型の仮想化はホストとなるOSとゲストOSの間で kernel を共有しています。

この特徴に起因して、以下の様な利点が Docker には存在します。

  • ゲストOS はホストの Kernel を直接使うためオーバーヘッドが小さくて高速
  • ゲストOS がそれぞれに Kernel を持たないため、Memory 消費量や Disk 消費量を節約できる
  • 必要とする資源が少ないため、多くのゲストOSを立ち上げることが可能
  • Kernel を新しく起動する必要がないため、ゲストOSの起動が速い

また、Docker はコンテナを起動する際に、各コンテナごとにDisk上にデータを持つのではなく「一つのイメージから複数のコンテナを作る」という方式でゲストをたちあげます。

これはイメージからたちあがるコンテナはいつも同じということでもあります。

そのため、Docker には以下の様な利点もあります。

  • コンテナのイメージ(雛形)からコンテナ(実体)を作るため、同一構成のOSを簡単に複数作れる
  • テストが通ったイメージは本番環境でもすぐに使える(開発とデプロイのサイクルが速い)

Dockerの欠点

Docker 上のコンテナはホストの kernel をそのまま利用します。 そのため、kernel を共有できる Red Hat Enterprise Linux や Ubuntu は共存できるものの、根本的に kernel の異なる Windows Server はホストとなる Linux 上で動かすことはできません。

HyperVisor 型の仮想化はゲストの Kernel 自体も仮想的に動作させるため、Linux 上で Windows を動かしたり、またその逆も実現可能です。

これらの特徴から、Docker には以下の様な欠点があると言えます。

  • 提供できるホストの種類が少ない(Windows Serverは無理)
  • 完全仮想化に比べて、管理者が学ぶべきことが多い

Dockerの活用場面

上記のように Docker には HyperVisor 型の仮想化とは異なる特徴があります。

そのため、Docker は「永続的に利用する仮想マシン」という使い方よりも「使い捨てにする仮想マシンを動かす」や「大量に同一の構成を作るサービスの基盤構築」といった用途に強みがあります。

また、Docker はその思想として「一度作ったコンテナに変更は加えない」という特徴があるので、「作った時と同じように動き続けることが求めれられる仮想マシン」にも向いています。