ここから本文です

Windows上で稼働するLinux、動かしているのはどのテクノロジー?

10/11(水) 8:10配信

@IT

●Linux仮想マシン on Hyper-V

 Windows 10上でLinux環境を実現する最もシンプルな方法は、仮想化テクノロジーを導入して、仮想マシンを作成し、任意のLinuxをインストールして実行(またはメディアからライブ起動)することです。Homeエディションを除くPC向けの64ビット(x64)版Windows 10(およびWindows 8.1)は、仮想化テクノロジーとして「Hyper-V」(Windows ServerのHyper-Vに対して「クライアントHyper-V」と呼ぶことがあります)を搭載しており、これを利用することでLinux仮想マシンを実行することが可能です。

Bash on Ubuntu on WindowsのLinux環境(画面はWindows 10 Insider Preview バージョン1709、ビルド16288)

 仮想化テクノロジーとしてHyper-Vを使用せずに、「VMware Workstation」や「Oracle VirtualBox」などを導入することでも実現可能です。

●Bash on Ubuntu on Windows(Windows Subsystem for Linux)

 Homeエディションを除く64ビット版のWindows 10 Anniversary Update(バージョン1607)からは、「Windows Subsystem for Linux(WSL)」というWindowsの新しいサブシステムが実装されました。さらにWindowsストアを通じて提供される「Bash on Ubuntu on Windows」をインストールすることで、ネイティブなUbuntuのOS環境を起動し、Linuxアプリケーションの実行環境をWindows上に実現することが可能です。

 Windows 10 Creators UpdateまでのWSLはβ版として提供されていますが、Windows 10 Fall Creators Update(バージョン1709)からは正式版になる予定です。また、WSLはWindows Serverバージョン1709(Windows ServerのSemi-Annual Channel)にも搭載される予定です。さらに、Ubuntu以外のLinuxディストリビューションも利用可能になる予定です。

 WSLは、仮想マシンとは全く異なる“アプリケーションのためのサンドボックス環境”(プロセスベースの分離されたコンテナ環境、コンテナは後で出てくるDockerのコンテナとは異なり、文字通りのコンテナ)を提供するテクノロジーであり、Microsoft Researchの「Drawbridgeプロジェクト」をWindowsに実装(picoprocessとして)したものです。

 Drawbridgeプロジェクトの別の実装として、SQL Server 2017のLinux版である「SQL Server on Linux」があります。Windows上でLinuxのネイティブなアプリケーションがそのまま動くのと同じように、WindowsバイナリであるSQL ServerがLinux上で動くのです。

●Linuxコンテナ on Windows(Docker for Windows)

 Dockerが無料提供している「Docker for Windows」を導入すると、Docker Hubで公開されている任意のLinuxコンテナをWindows 10上で実行することが可能です。Bash on Windows on Linuxとは異なり、Dockerホストのプロセスとして実行されるサンドボックス環境である「Dockerコンテナ」でLinuxアプリケーションの実行環境が実現されます。

 実は、Docker for WindowsのDockerホスト(エンジン)環境は、Windows上で直接動いているわけではなく、Hyper-V上で動作するLinux仮想マシン(仮想マシン名「MobyLinuxVM」)が提供しており、Windows 10側のローカルのDockerクライアントをこのLinux仮想マシンのDockerホストに接続することで実現されています。

 「Docker Toolbox」と呼ばれていた以前のバージョンでは、Hyper-Vの代わりにOracle VirtualBoxが使用されていました(Hyper-Vを利用できない場合、Windows 10 バージョン1607以前のバージョンの場合は、Docker Toolboxを使用する必要があります)。

 Docker for Windowsは、64ビット版Windows 10 Anniversary Updateが提供する「コンテナ」機能をサポートしており、こちらに切り替えることで、Windowsコンテナ(microsoft/windowsservercoreおよびmicrosoft/nanoserver)をHyper-Vコンテナとして実行することも可能です。

 Windows Server 2016の「コンテナ」機能は「Docker Enterprise Edition(EE)」と連携して、Windows ServerコンテナとHyper-Vコンテナをサポートします。Windows Serverコンテナは、プロセスベースのサンドボックスであり、コンテナホストのカーネル上で動作します。

 一方、Hyper-Vコンテナは、これにHyper-Vの分離環境を組み合わせてコンテナ間およびコンテナとホスト間の隔離性を高めます。Windows 10は「Docker Community Edition(CE)」と連携して、後者のHyper-Vコンテナをサポートしています。

 現行バージョンのDocker for Windowsは、Linuxコンテナ用のDocker環境とWindowsコンテナ用のDocker環境を切り替えて利用する形になり、両者を同時に実行することはできないということを覚えておいてください。

●Linuxコンテナ on Windows(Hyper-Vコンテナ)

 Windowsコンテナのための「Hyper-Vコンテナ」は、Hyper-Vの分離環境を利用して、カーネルを提供するOS環境(Hyper-Vの別パーティションのWindows Server)上にサンドボックス環境を構築します。

 現行バージョンは、Windows ServerコンテナとHyper-Vコンテナのどちらも、Windowsコンテナ(microsoft/windowsservercore、microsoft/nanoserverおよびこれらをベースとしたアプリケーションを含むイメージ)専用です。Linuxのカーネルを提供する環境が存在しないため、Linuxコンテナを実行することはできません。

 Windows 10 Fall Creators UpdateおよびWindows Server バージョン1709では、Hyper-VコンテナでLinuxコンテナを実行できるようになる予定です。この計画は2017年4月に「DockerCon 2017」で発表され、9月に初めてその具体的な実装が披露されました。そして、Windows 10 Insider PreviewおよびWindows Server Insider Previewで評価することが可能になりました。

 現在の実装では、「LinuxKit」(コンテナ実行に特化したLinux Subsystem)のコンテナ向けLinux、またはUbuntuベースのコンテナ向けLinuxをHyper-Vの仮想化環境と分離し、Linuxカーネルのサンドボックス環境をHyper-Vコンテナとして実現する形になっています。

 Hyper-VコンテナにおけるLinuxのサポートは、ようやくフィードバックの受付が始まったばかりであるため、実運用環境で利用できるようになるまでには、しばらく時間がかかりそうです。

 これらのバリエーションは、見た目があまり変わらないため、違いを区別しようとすると混乱してしまいそうです。

 MicrosoftはSQL Server 2017 on LinuxのDockerイメージ(microsoft/mssql-server-linux、2017年10月4日に正式提供開始)を提供していますが、これはLinuxベースのコンテナです。Hyper-VコンテナでLinuxコンテナがサポートされると、Windows上のHyper-VコンテナでSQL Server on Linuxを実行できるようになるはずです。ちょっと想像してみてください。混乱するでしょう?

●筆者紹介
○山市 良(やまいち りょう)
岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(Oct 2008 - Sep 2016)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows Server 2016テクノロジ入門-完全版』(日経BP社)。

最終更新:10/11(水) 8:10
@IT

Yahoo!ニュースからのお知らせ