Dockerの「軽さ」
仮想化技術は利便性が高く、様々なシーンで活用されています。しかしながら、従来の仮想化技術はやはり物理環境と比較すると「起動が遅い」「処理速度が落ちる」といった弊害があり、ユースケースが限られてしまっていることがありました。
Dockerは仮想化技術でありながら圧倒的な「軽さ」を実現し、その問題を解決しています。まず、ハードウェア仮想化や物理マシンとの比較を通して、Dockerの「軽さ」を見てみましょう。
起動が速い
ハードウェア仮想化は、CPU、メモリ、ハードディスクなどのハードウェアを仮想化しているため、ハードウェアやOSの起動が必要となり、起動に分単位の時間を要します。
一方で、コンテナ型仮想化においては、コンテナ起動時にはOSはすでに起動しており、プロセスの起動のみ行うため、秒単位の時間で完了します。
処理が速い
OS上のアプリケーションを操作する場合、ハードウェア仮想化においては、仮想化されたハードウェアおよびハイパーバイザーを経由して処理が行われます。この経由している分だけ、通常の物理マシンよりも処理に余分な時間(オーバーヘッド)を要します。
一方で、コンテナ型仮想化はカーネルを共有しており、各プロセスが処理を行うのと同じ程度の時間しかかからないため、ほとんどオーバーヘッドがありません。
物理マシンとコンテナ型仮想化の比較
「軽さ」の検証の一貫で、物理マシンと比較してどのくらいのオーバーヘッドがあるのかということを、「sysbench」というベンチマークツールを使って、パフォーマンス計測してみました。
今回の計測では、CPU、メモリ、ファイルI/Oの3つの観点で、物理マシン、コンテナ型仮想化(Docker)、ハードウェア仮想化(VirtualBox)の3つを比較しています。結果は次のグラフのようになりました。
物理マシンとコンテナ型仮想化のパフォーマンスは、全ての項目においてほぼ同等という結果になっています。
一方で、ハードウェア仮想化はメモリ、ファイルIOでは約2倍、CPUでは約5倍の時間がかかっています。
この結果から、コンテナ型仮想化では、物理マシンと比較しても、パフォーマンスの劣化がほとんどないことが分かります。