Dockerが注目されている理由を探る
Dockerとは
Dockerとは、Docker社が開発しているオープンソースのコンテナ型仮想化ソフトウェアである。Linux上でLXC(Linux Container)の技術を活用し、コンテナ型の仮想環境を作成するものだ。
Dockerの主な特徴は、以下の通りである。
- コンテナはカーネル部分をベースのOSと一部共有するため、リソース使用量が非常に少ない
- Docker社が用意しているリポジトリ(DockerHub)に、構築済みのコンテナイメージがあるので、構築作業が不要
- コンテナの作成からプロダクトのインストール・設定するまでの手順を、“Dockerfile”というテキストファイルに定義できる(インフラのコード化)。このDockerfileを用いることで、Dockerが導入されている環境であればどこであっても、準備した環境を稼働させられるため携帯性が高くなる。
これらの特徴からDocker環境では一台のサーバで多数のコンテナを同時に実行したり、実行していたコンテナを別環境で稼働させたりすることが可能だ。
サーバ仮想化方式ごとの特徴比較
コンテナ型の仮想化と、ハイパーバイザ型やホスト型の仮想化とは、どのような点が異なるのだろうか。まずは仮想化の方式の違いから見ていこう。
コンテナ型仮想化 (Docker) | ハイパーバイザ型仮想化 (VMWare ESXi) | ホスト型仮想化 (Linux KVM) | |
---|---|---|---|
仮想マシン | OS部分を一部ホストOSと共有するため、VMごとにOSインストールをする必要はない | VMごとにOSをインストールする必要がある | VMごとにOSをインストールする必要がある |
稼働OSの種類 | Linuxのみ稼働可能 Windowsは現状稼働しない | Windows、Linux、一部のUnixも稼働可能 | Windows、Linux、一部のUnixも稼働可能 |
利用開始までの時間 | OSインストール不要のため、利用開始までの時間が短い | 初回構築時にはネットワーク・OSインストール等の作業が発生するため、利用開始までの時間が長い | 初回構築時にはネットワーク・OSインストール等の作業が発生するため、利用開始までの時間が長い |
ネットワーク | 標準では、ホスト側に作成されたDocker専用のNICとしか通信出来ない | ネットワークの作成が可能で、VMにも任意の数のvNICを付与可能 | ネットワークの作成が可能で、VMにも任意の数のvNICを付与可能 |
リソース | 標準ではHDDリソースの指定が出来ない。CPU、メモリについてはリソース割り当て上限を指定可能 | CPU、メモリ、HDDのリソースについて割り当てを指定する必要がある | CPU、メモリ、HDDのリソースについて割り当てを指定する必要がある |
オーバーヘッド | コンテナはホストOSから見ると単一のプロセスであり、オーバーヘッドはほぼない | VMから機器までのアクセス経路がハイパーバイザのみなので、ホスト型仮想化に比べるとオーバーヘッドは少ない | VMから機器までのアクセス経路が他の仮想化技術に比べ長いため、比較した場合には一番オーバーヘッドが大きくなる |
各方式の特徴は、以下の通りだ。
コンテナ型仮想化
コンテナ型仮想化は、ホストOS上でコンテナプロセスが実行されており、その上にコンテナが立ち上がってアプリケーションが実行される。他の方式との相違点として、コンテナはホストOSから見ると一つのプロセスとして認識されている点が挙げられる。またコンテナは、ホストOSのカーネル部分を共有するため、各コンテナにはOSは導入されていない。
ハイパーバイザ型仮想化
ハイパーバイザ型仮想化は、独自の仮想化管理ソフトであるハイパーバイザをサーバへ直接導入し、サーバ全体を仮想化に利用する。仮想環境上のアプリケーションからサーバまでの経路がホスト型仮想化製品よりも短いため、高いレスポンスが得られる。立ち上げられるVM数は、コンテナと比較すると少なくなる。
ホスト型仮想化
ホスト型仮想化は、ホストOS上で仮想化ソフトを実行させ、その上にゲストOSを稼働させる。ここで取り上げる3種の仮想化の中では一番オーバーヘッドが高くなる傾向にあるが、ホストOS上で直接実行しているアプリと並行利用できるため、個人環境での利用に人気がある。
各サーバ仮想化の実装方式を図で表すと、以下のようになる。図中の緑色の範囲が、仮想化の範囲である。