コンテナと仮想マシンの違いを図解で説明
〜Dockerの考え方〜
「コンテナ」と「仮想マシン」の違いを説明できますか?
どちらも1台のサーバで複数の環境を動かす技術なので、同じように見えると思います。
最近は、会社でも「Dockerで環境を作って」と言われることが増えてきました。
コンテナと仮想マシンの違いについて、図を使って説明していきます。
仮想マシンの基本は、仮想マシンの仕組みを図解で説明の記事を読んでみてください。
一番の違いはゲストOSの有無
コンテナと仮想マシンの一番の違いは、環境ごとにOSを持つかどうかです。

仮想マシンは、ハイパーバイザの上でOSごと動かします。
このOSをゲストOSといいます。環境ごとに、パソコンをもう1台用意するようなイメージです。
コンテナは、ゲストOSを持ちません。
ホストOSのカーネルを共有して、アプリと必要なライブラリだけをまとめて動かします。
カーネルは、OSの中心にあたる部分です。
ゲストOSがない分、コンテナは軽く動きます。
コンテナの作り方
コンテナの技術で代表的なものがDockerです。
Dockerでは、次の3つの言葉を押さえておきましょう。
- Dockerfile: イメージの作り方を書いたファイル
- イメージ: コンテナのひな形
- コンテナ: イメージから作って動かしている実体

流れは次のようになります。
① Dockerfileからイメージを作る
② イメージからコンテナを作って動かす
1つのイメージから、同じコンテナをいくつでも作ることができます。
利用者が増えた時に、同じコンテナを増やすこともできます。
コンテナの良いところ
コンテナの一番の良いところは、環境ごと持ち運べることです。
システム開発では、「自分のパソコンでは動いたのに、本番のサーバでは動かない」ということがよくあります。
原因の多くは、ライブラリのバージョンなど、環境の違いです。

コンテナなら、アプリと必要なものをイメージにまとめることができます。
イメージは、レジストリと呼ばれる置き場にアップロードしておきます。
開発のパソコンと本番のサーバで同じイメージを使えば、環境の違いによるトラブルを減らせます。
ただし、CPUの種類が違うと、同じイメージが動かないことがあります。複数のCPU向けに作ったイメージなら、Dockerが合うものを選びます。
仮想マシンの良いところ
コンテナが便利なら、全部コンテナにすれば良いと思うかもしれません。
しかし、仮想マシンにも良いところがあります。
コンテナはホストOSのカーネルを共有するので、カーネルが合わないOSを動かすことはできません。
例えば、LinuxのカーネルでWindows用のコンテナは動かせません。
仮想マシンならゲストOSを自由に選べるので、Linuxのサーバの上でWindowsを動かすこともできます。
また、OSごと分かれているので、環境同士の分離も強くなります。
仮想マシンを動かす製品
仮想マシンを動かすソフトをハイパーバイザといいます。
代表的な製品が、MicrosoftのHyper-VやVMwareです。

ハイパーバイザには、ハードウェアの上で直接動く型と、ホストOSの上で動く型があります。この記事の最初の図は、ホストOSの上で動く形です。
詳しくは、仮想マシンの仕組みを図解で説明の記事で説明しています。
Windowsでコンテナを動かす時
Windowsのパソコンで使うDocker Desktopは、WSL 2という仕組みの上でLinuxのコンテナを動かします。
WSL 2は、Hyper-Vの技術を使った軽い仮想マシンです。
Linuxのカーネルを持たないWindowsでLinuxのコンテナが動くのは、裏で仮想マシンが動いているからです。
コンテナと仮想マシンは対立する技術ではなく、組み合わせて使われています。
コンテナと仮想マシンの比較
2つの違いをまとめると、次のようになります。

どちらが優れているというわけではなく、目的によって使い分けます。
アプリを軽く動かして増やしたいならコンテナ、OSごと環境を分けたいなら仮想マシンが向いています。
実際には、クラウドの仮想マシンの上でコンテナを動かすことも多いです。
まとめ
今回はコンテナと仮想マシンの違いについて説明しました。
一番の違いはゲストOSの有無です。
仮想マシンはOSごと動かし、コンテナはホストOSのカーネルを共有してアプリを動かします。
基本情報技術者試験でも、仮想化の技術としてコンテナの特徴を押さえておきましょう。
言葉だけでは分かりにくい技術なので、一度Dockerを触ってみることをお勧めします。
Docker Desktopを会社で使う時は、会社の規模によって有料の契約が必要になるので確認しましょう。


