軽量なアプリケーション実行環境であるコンテナ機能がWindows OSでも使えるようになった。Windowsコンテナには2種類あるが、その違いは? Linuxコンテナとは何が違う?
対象OS:Windows Server 2016/Windows 10
Windows Server 2016(およびWindows 10 Anniversary Update以降)では、Dockerのコンテナ技術を使った「Windowsコンテナ」機能が利用できるようになった。これはLinux+Dockerという組み合わせで広く使われているコンテナ型仮想化技術(以下「Linuxコンテナ」と呼ぶ)をベースにして、Windows OS上でも同じようなコンテナ機能を利用できるようにしたものである。
本TIPSでは、Windowsコンテナの概要や2種類のWindowsコンテナ、Linuxコンテナとの違いなどについてまとめておく。
Dockerとは、もともとはLinux OSの持つコンテナ機能やリソースの管理機能などをベースに作られた、コンテナ型の仮想化技術である。PC全体を仮想化する仮想マシン技術と比べると、軽量・高速で、実行に必要なリソースも少なくて済み、システムの構成変更や展開の容易さなどから、開発段階から実運用環境まで、幅広く利用されている。コンテナ上で動作するプログラムは、基本的にはLinuxのバイナリである 。
Dockerの概要については、次の記事を参照していただきたい。
Windowsコンテナは、このDockerのコンテナ技術をWindows Server 2016やWindows 10、Azure上などでも利用できるようにしたものである。ただしWindowsコンテナ中で動作するのはLinuxのプログラムではなく、Windows向けのプログラムである。.NET FrameworkやIIS、PowerShellなどの実行環境として利用することが想定されている。
だがコンテナの管理ツール(Dockerのクライアントツール)はほぼ同じであり、LinuxコンテナでもWindowsコンテナでも同じように管理・展開できる。
Windows Server 2016にWindowsコンテナの実行環境をインストールする方法については、次の記事を参照していただきたい。
一言でWindowsコンテナといっても、実際には「Windows Serverコンテナ」と「Hyper-Vコンテナ」の2種類がある。主な違いは次の通りである。
項目 | Windows Serverコンテナ | Hyper-Vコンテナ | |
---|---|---|---|
特長 | 軽量・高速 | 高い隔離性 | |
コンテナの起動 | 速い(プロセスの起動だけでよいため) | 遅い(仮想マシンの起動とコンテナOSのブートに時間がかかる) | |
コンテナの実行 | ホストOS上のプロセスとして実行 | Hyper-V上のゲストOS内のプロセスとして実行 | |
隔離性 | ・Hyper-Vコンテナよりも低い ・同じホスト上のコンテナは、同じ1つのホストOS下で実行される ・悪意のあるコンテナやOSに脆弱性があると、他のコンテナも影響を受ける可能性がある |
・コンテナごとに仮想マシンとして隔離されるので、独立性は高い ・他のコンテナの影響を受けることはほぼない |
|
ホストOSとコンテナOSの関係 | 同じバージョンにする必要がある。一致しない場合はコンテナを実行できない | 異なるOSや異なるバージョン/パッチレベルでも構わない | |
■ホストOS | |||
Windows Server 2016 (フル/Server Core) |
○ | ○ | |
Nano Server | ○(コンテナ内のベースOSイメージもNano Serverベースのものにすること。Server Coreは不可) | ○ | |
Windows 10 | × | ○ | |
2種類のWindowsコンテナ |
コンテナの詳細については、以下のページも参照していただきたい。
Windows Serverコンテナは、Linux上のDockerコンテナ(Linuxコンテナ)と同じような仕組みで動作するコンテナである。
Windows Serverコンテナを起動すると、その中で動作しているプロセスは、実際にはホストのWindows OS上のプロセスとして実行されている(実行中のプロセスは、ホストOS上のタスクマネージャなどでも確認できる)。この方法では、Linuxコンテナと同様に、軽量・高速なコンテナの起動や展開、管理が期待できる。
これに対してHyper-Vコンテナは、仮想マシン技術(Hyper-V)を使ったコンテナ技術である。Hyper-Vコンテナを起動するとHyper-Vのハイパーバイザ上に(コンテナ実行用の)新しい仮想マシンが作成され、その中で軽量なコンテナ用OS(Server CoreやNano Server)が起動して、さらにその上でコンテナが実行される。
Hyper-V+仮想マシンという構成のため、起動には時間がかかるし、リソースも多く必要になる一方で、コンテナ(仮想マシン)ごとにリソースの割り当てや制御方法、セキュリティ設定などをある程度自由にカスタマイズできる。
Hyper-Vコンテナの特長は、その高い独立性にある。例えばコンテナアプリに脆弱性があったとしても、他のコンテナが影響を受ける危険性は低くなる。またそれぞれのコンテナごとに異なるOSインスタンスを持つことができるので、機能をカスタマイズしたOSを利用したり、ホストOSとは異なるバージョンやエディションのOSを組み合わせたりすることも自由である。
このHyper-Vコンテナは、特にクラウド上でコンテナを利用するようなケースで有用だ。たとえ「悪意のあるコンテナ」が同じシステム上に収容されていたとしても、その影響を受けにくくなるだろう。また顧客ごとに要求するコンテナOSのバージョンやパッチ適用レベルなどが異なることもあるだろうが、その場合でも利用できる。
Windows ServerコンテナもHyper-Vコンテナも、実行するコンテナイメージ自体は同じで、その起動方法が異なっているだけである。どちらのモードでコンテナを実行するのかは、「docker run」コマンドのオプションなどで変更できる。「docker run --isolation process」とするとWindows Serverコンテナとして、「docker run --isolation hyperv」とするとHyper-Vコンテナとして実行される(デフォルトはWindowsサーバーコンテナタイプ)。
Windows Serverコンテナのイメージには、ベースとなるServer CoreやNano ServerのOSイメージが含まれている。Windows Serverコンテナを実行する場合、このイメージをホストOSのカーネルで実行するため、ベースとなっているOSイメージのバージョンと、WindowsコンテナホストのWindows OSのバージョン(正確にはビルド番号。例えば「10.0.14393.351」なら「14393」の部分)を一致させておく必要がある。以下のページの「コンテナー ホストのバージョンとコンテナー イメージのバージョンを一致させる」の項を参照のこと。
Hyper-Vコンテナの場合は、Hyper-V仮想マシン内で独自にコンテナOSが実行されているため、ホストOSとバージョン(ビルド番号)を一致させる必要はない。
ホストOS | Windows Serverコンテナ | Hyper-Vコンテナ(ゲストOS) |
---|---|---|
Windows Server 2016 | Server Core/Nano Server | Server Core/Nano Server |
Windows Server 2016 Core | Server Core/Nano Server | Server Core/Nano Server |
Nano Server | Nano Server | Server Core/Nano Server |
Windows 10 Pro/Enterprise | ×(利用不可) | Server Core/Nano Server |
WindowsコンテナにおけるホストOSとコンテナOSの関係 Windows Serverコンテナを使う場合は、ベースOSがNano ServerならコンテナもNano Serverベースのコンテナが必要。そうでない場合は、もしくはHyper-Vコンテナの場合は、コンテナのベースとなるOSはServer CoreとNano ServerOSのどちらでもよい。 |
なおWindows OSのコンテナ機能を使って、Linuxコンテナを直接実行することはできない。WindowsコンテナはWindowsのプログラムしか実行できないからだ。逆も同じで、LinuxのDockerでWindowsコンテナを実行することはできない。
※アーキテクチャの違いによるエラーの例
C:\>docker pull hello-world ……Linuxコンテナをダウンロードさせてみる
Using default tag: latest
latest: Pulling from library/hello-world
image operating system "linux" cannot be used on this platform ……Linux向けのコンテナはエラーになる
C:\>
LinuxコンテナをWindows OS上で実行したければ、何らかの仮想マシン環境を用意してLinuxを動作させ、その上にDockerをインストールすればよい。
例えばDocker社が提供している「Docker for Windows」を使えば、Windows 10のHyper-V上にLinuxコンテナ実行用の軽量OSとDocker環境がインストールされる。これでLinuxコンテナを実行できる。
Docker for Windowsのインストールや利用方法については以下の記事を参照していただきたい。
■この記事と関連性の高い別の記事
Copyright© Digital Advantage Corp. All Rights Reserved.