コンテナと仮想マシンの違いを図解で説明
〜Dockerの考え方〜

「コンテナ」と「仮想マシン」の違いを説明できますか?

どちらも1台のサーバで複数の環境を動かす技術なので、同じように見えると思います。

最近は、会社でも「Dockerで環境を作って」と言われることが増えてきました。

コンテナと仮想マシンの違いについて、図を使って説明していきます。

仮想マシンの基本は、仮想マシンの仕組みを図解で説明の記事を読んでみてください。

一番の違いはゲストOSの有無

コンテナと仮想マシンの一番の違いは、環境ごとにOSを持つかどうかです。

構造の比較の図。仮想マシンはハイパーバイザの上にゲストOSとアプリを置き、コンテナはコンテナエンジンの上にライブラリとアプリを置く

仮想マシンは、ハイパーバイザの上でOSごと動かします。

このOSをゲストOSといいます。環境ごとに、パソコンをもう1台用意するようなイメージです。

コンテナは、ゲストOSを持ちません。

ホストOSのカーネルを共有して、アプリと必要なライブラリだけをまとめて動かします。

カーネルは、OSの中心にあたる部分です。

ゲストOSがない分、コンテナは軽く動きます。

コンテナの作り方

コンテナの技術で代表的なものがDockerです。

Dockerでは、次の3つの言葉を押さえておきましょう。

  • Dockerfile: イメージの作り方を書いたファイル
  • イメージ: コンテナのひな形
  • コンテナ: イメージから作って動かしている実体
コンテナを作る流れの図。Dockerfileからイメージを作り、イメージから複数のコンテナを作る

流れは次のようになります。

① Dockerfileからイメージを作る

② イメージからコンテナを作って動かす

1つのイメージから、同じコンテナをいくつでも作ることができます。

利用者が増えた時に、同じコンテナを増やすこともできます。

コンテナの良いところ

コンテナの一番の良いところは、環境ごと持ち運べることです。

システム開発では、「自分のパソコンでは動いたのに、本番のサーバでは動かない」ということがよくあります。

原因の多くは、ライブラリのバージョンなど、環境の違いです。

イメージを運ぶ図。開発のパソコンからレジストリへアップロードし、本番のサーバへダウンロードして、環境の違いを減らす

コンテナなら、アプリと必要なものをイメージにまとめることができます。

イメージは、レジストリと呼ばれる置き場にアップロードしておきます。

開発のパソコンと本番のサーバで同じイメージを使えば、環境の違いによるトラブルを減らせます。

ただし、CPUの種類が違うと、同じイメージが動かないことがあります。複数のCPU向けに作ったイメージなら、Dockerが合うものを選びます。

仮想マシンの良いところ

コンテナが便利なら、全部コンテナにすれば良いと思うかもしれません。

しかし、仮想マシンにも良いところがあります。

コンテナはホストOSのカーネルを共有するので、カーネルが合わないOSを動かすことはできません。

例えば、LinuxのカーネルでWindows用のコンテナは動かせません。

仮想マシンならゲストOSを自由に選べるので、Linuxのサーバの上でWindowsを動かすこともできます。

また、OSごと分かれているので、環境同士の分離も強くなります。

仮想マシンを動かす製品

仮想マシンを動かすソフトをハイパーバイザといいます。

代表的な製品が、MicrosoftのHyper-VやVMwareです。

主な仮想化の製品の表。Hyper-VとVMware ESX(ESXi)はハイパーバイザ型、VMware WorkstationとVirtualBoxはホスト型

ハイパーバイザには、ハードウェアの上で直接動く型と、ホストOSの上で動く型があります。この記事の最初の図は、ホストOSの上で動く形です。

詳しくは、仮想マシンの仕組みを図解で説明の記事で説明しています。

Windowsでコンテナを動かす時

Windowsのパソコンで使うDocker Desktopは、WSL 2という仕組みの上でLinuxのコンテナを動かします。

WSL 2は、Hyper-Vの技術を使った軽い仮想マシンです。

Linuxのカーネルを持たないWindowsでLinuxのコンテナが動くのは、裏で仮想マシンが動いているからです。

コンテナと仮想マシンは対立する技術ではなく、組み合わせて使われています。

コンテナと仮想マシンの比較

2つの違いをまとめると、次のようになります。

仮想マシンとコンテナの比較表。OS、起動の目安、サイズ、動かせるOS、分離の強さを比べている

どちらが優れているというわけではなく、目的によって使い分けます。

アプリを軽く動かして増やしたいならコンテナ、OSごと環境を分けたいなら仮想マシンが向いています。

実際には、クラウドの仮想マシンの上でコンテナを動かすことも多いです。

まとめ

今回はコンテナと仮想マシンの違いについて説明しました。

一番の違いはゲストOSの有無です。

仮想マシンはOSごと動かし、コンテナはホストOSのカーネルを共有してアプリを動かします。

基本情報技術者試験でも、仮想化の技術としてコンテナの特徴を押さえておきましょう。

言葉だけでは分かりにくい技術なので、一度Dockerを触ってみることをお勧めします。

Docker Desktopを会社で使う時は、会社の規模によって有料の契約が必要になるので確認しましょう。