Windows 10 HomeはDocker Desktop for Windowsの夢を見るその知識、ホントに正しい? Windowsにまつわる都市伝説(157)

2020年1月21日、「Windows Subsystem for Linux(WSL)2」に対応した「Docker Desktop for Windows 2.2.0.0」がリリースされました。これまでHyper-Vの要件があるためにWindows 10 Homeでは利用できなかったDocker Desktopが、これでようやく使えるようになると、現在開発中のWSL 2の正式リリースを心待ちにしているユーザーがいるかもしれません。いつかは使えるようになる予定ですが、それは少し先のことになると思います。

» 2020年04月01日 05時00分 公開
[山市良テクニカルライター]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「Windowsにまつわる都市伝説」のインデックス

Windowsにまつわる都市伝説

現在、開発中の「WSL 2」とは?

 「Windows 10」の標準機能である「Windows Subsystem for Linux(WSL)」(開発中のWSL 2に対してWSL 1と呼ばれることもあります)は、Linux ELF(Executable and Linking Format)64バイナリをWindows上でそのまま実行できるようにするサブシステムです。Windows 10 Anniversary Update(バージョン1607)で初めてβ版が搭載され、Windows 10 Fall Creators Update(バージョン1709)で正式版になりました。

 WSLはMicrosoft Storeで提供されるLinuxディストリビューションの基盤となるもので、Linuxディストリビューションに含まれる、または追加したLinuxバイナリが要求するシステムコール(API)を、WindowsカーネルがLinuxカーネルをエミュレーションして処理します。

 内部的には「Pico(ピコ)プロバイダー」という技術が使われており、Linux上でWindowsバイナリを動かす「SQL Server for Linux」にもこれと似た技術が使われています。ただし、現在のWSLは、Linuxカーネルのシステムコールの全てに完全対応していないことが課題であり、Linuxのアプリケーションによっては利用できない場合があります。

 現在、Windows Insider Programで提供中の20H1向けビルド(18917以降)で利用可能な次世代のWSL 2は、本物のLinuxカーネルをWindowsに同梱し(正式版はWindowsのイメージから分離され、Windows Updateを通じて最新カーネルが配布、更新される予定)、システムコールの100%互換を達成しながら、パフォーマンスの大幅な改善を目指しています(画面1)。

画面1 画面1 WSL 2で実行中のUbuntuディストリビューションのシェル環境。WSL 1とWSL 2は切り替えての利用や同時利用が可能

 WSL 2は、「仮想化ベースのセキュリティ(Virtualization-Based Security、VBS)」や「Windows Defender Application Guard(WDAG)」「Windowsサンドボックス」と似た技術で実現されています。ユーザーからは隠されていますが、Hyper-Vハイパーバイザーの分離環境でLinuxカーネルそのものが動いているイメージです。

 WSL 2は、WSLと同様に、Windows 10 Homeでも利用可能になる予定です。Windows 10 HomeはHyper-Vを搭載していませんが、Windows 10 October 2018 Update(バージョン1809)以降にはWSL 2に対応するために「仮想マシンプラットフォーム(VirtualMachinePlatform)」という機能が既に用意されています(画面2)。また、WSL 2がWindows 10 Homeでも利用可能になることは、以下の「WSL 2 FAQ」でも最初に言及されています。

画面2 画面2 Hyper-Vを搭載していないWindows 10 Home(x64)でも、Hyper-Vのサブセットである「仮想マシンプラットフォーム」という機能を搭載しており、WSL 2に対応できる

WSL 2対応のDocker Desktop for Windows 2.2.0.0がリリース

 2020年1月21日、安定版(Stable)の「Docker Desktop for Windows バージョン2.2.0.0」がリリースされました(2月11日にバージョン2.2.0.3がリリースされています)。このバージョンでは大きな機能変更が追加されており、その中の1つに「Docker Engine」のバックエンドとしてのWSL 2(WSL 2 backend)サポートが含まれます(画面3)。

画面3 画面3 Docker Desktop for Windows 2.2.0.0では、安定版として初めてWSL 2のサポートがExperimental機能として追加された

 Windows 10 Homeユーザーの中には、以下のようなことを期待した人がいるかもしれません。

  • WSL 2はWindows 10 Home(x64)でも利用できる

            ↓↓↓

  • Docker Desktop for Windows 2.2.0.0以降でWSL 2がサポートされた

            ↓↓↓

  • Docker DesktopをWindows 10 Home(x64)でも利用できる

 Docker Desktop for Windowsの将来について言及している2019年6月のDocker公式ブログでも、「……because WSL 2 works on Windows 10 Home edition, so will Docker Desktop.」と、WSL 2が利用可能になれば、Windows 10 HomeでもDocker Desktop for Windowsでも利用可能になるだろうということが示されています。

 残念ながら、現時点でDocker Desktop for Windowsの安定版(Stable)の最新バージョン(2.2.0.0)を、Windows 10 Homeにインストールして利用することはできません。

 なぜなら、以下のDockerのドキュメントにあるように、Windows 10 Creators Update(バージョン15063)以降のx64版、Pro(Pro EducationとPro for Workstationsを含む)、Enterprise、Educationエディションで、「Hyper-V」と「Containers(コンテナ)」の機能が有効化されていることが、Docker Desktop for Windowsのシステム要件だからです。

 実際にはインストール時にこれらの機能の有効化状態はチェックされませんが、Docker Desktop for Windowsのインストールで両方の機能が自動的に有効化されます。そして、Hyper-VとContainersの機能は、Windows 10 Homeには搭載されていません(画面4)。ちなみに、Windows 10 バージョン1607のサポートは、Docker Desktop for Windows 2.1.0.0で削除されました。

画面4 画面4 Windows 10 HomeにDocker Desktop for Windows 2.2.0.0をインストールしようとしても、システム要件を満たしていないため当然失敗する

 Docker DesktopのWindows 10 Homeエディションへの対応は、2020年3月初めにリリースされた先行(Edge)リリース「2.2.2.0」で初めて行われました。この機能が安定版(Stable)になるのは少し先になります。もちろん、Windows 10でのWSL 2の正式版提供も待たなくてはいけません。

 WSL 2が次期Windows 10の「Windows 10 バージョン2004」で正式版になることは先日発表されたばかりですが、昨今の新型コロナウイルス感染症(COVID-19)の世界的な感染拡大はWindows 10の新バージョンの提供時期に影響する可能性があります。もし、Windows 10 バージョン2004や安定版Docker DesktopのWindows 10 HomeおよびWSL 2対応バージョンの提供が延期されることになれば、Windows 10 HomeでDocker Desktopを利用できるようになるのもさらに先のことになるでしょう。

 Windows 10 バージョン2004への影響は発表されていませんが、既に新しい「Chromium版Microsoft Edge」の次の安定版リリース「81」は、Chromiumプロジェクトの状況に合わせて延期されることになりましたし(当初は2020年3月の第4週の予定でした)、Windowsについても今後はセキュリティ問題の修正に注力し、2020年5月以降はオプションの更新プログラムが提供されなくなることがアナウンスされています。

ところで、Docker Desktopの「WSL 2バックエンド」って何?

 Docker Desktop for Windowsは、Linuxコンテナのみに対応したLinuxのDocker Engineや、LinuxのDocker Engineに依存するmacOS向けの「Docker Desktop for Mac」(仮想化環境としてmacOS標準の「Hyperkit」を使用)とは異なり、LinuxコンテナとWindowsコンテナの両方に対応しています。Linuxコンテナの環境とWindowsコンテナの環境は同時に利用することができませんが、切り替えて利用することが可能です。

 Windowsコンテナは、「Hyper-V分離モード」(「Hyper-Vコンテナ」とも呼ばれます)で実行するために、Hyper-Vの機能に完全に依存します。Containersの機能は、Linuxの「libcontainer/runc」に相当するもので、WindowsカーネルとWindows版Docker Engineとを橋渡しするものと考えてください。Windowsコンテナの環境でLinuxコンテナをサポートする「Linux Containers on Windows(LCOW)」もまた、Hyper-V分離モードを利用しています。

 一方、Linuxコンテナは、Linuxコンテナを実行するためにHyper-V上に準備される仮想マシン「DockerDesktopVM(ゲストOSはMobyLinux)」とDockerクライアント(Docker CLI)はWindowsバイナリですが、DockerDesktopVMのLinuxカーネル上で動作するLinux版のDocker Engineを使用します(画面5)。そのため、Docker Desktop for WindowsのLinuxコンテナ環境もまたHyper-Vの機能に完全に依存しています。

画面5 画面5 Docker Desktop for WindowsのLinuxコンテナ環境は、Hyper-V上に準備される「DockerDesktopVM」のLinux版Docker Engineが提供する(画面はDocker Desktop for Windows 2.2.0.0ではなく、Edgeリリースの2.1.7.0のもの)

 また、Hyper-Vの機能は、WindowsコンテナとLinuxコンテナの両方の環境にコンテナネットワークの接続性などを提供するためにも使用されています。

 Docker Desktop for Windows 2.2.0.0の新機能の一つである「WSL 2バックエンド」は、これまでHyper-Vの仮想マシンが担っていたLinux版Docker Engineを、WSL 2のLinux環境で実行することで、Hyper-Vベースよりも軽量で優れたパフォーマンスを実現するものです(画面6)。

画面6 画面6 Experimental機能のWSL 2を有効化すると、Hyper-V上の仮想マシンは使用されなくなり、代わりにWSL 2環境にLinux版Docker Engineの環境が準備され、こちらが使用される(画面はDocker Desktop for Windows 2.2.0.0ではなく、Edgeリリースの2.1.7.0のもの)

 導入済みのWSL 2のLinuxディストリビューション環境でDocker CLIを利用可能にする「WSL Integration」機能も追加されています。ただし、WSL 2バックエンドはExperimental機能(評価目的で実験的に搭載された機能)として搭載されたばかりであり、正式版ではありませんし、明示的に有効化しない限り、使用されることはありません。

 また、現時点でWSL 2を利用するには、Windows Insider Programに参加し、Windows 10を「Insiderビルド19018」以降にアップグレードする必要もあります。さらに付け加えるなら、WindowsコンテナやLCOWで実行するLinuxコンテナには全く関係のない機能です。

 つまり、近い将来にDocker DesktopがWindows 10 Homeで利用可能になったとして、それはWSL 2バックエンドのみを利用できるもので、Hyper-Vに依存するWindowsコンテナは利用できないと思われます。Windows 10 HomeでHyper-Vの機能が利用可能になることは、WSL 2のために「仮想マシンプラットフォーム」が用意されたことから考えるとなさそうです。

 Windowsコンテナ環境のLCOWは、WSL 2バックエンドと同じくExperimental機能です。2017年9月に初めてプレビュー版が提供され、2018年3月リリースのDocker for Windows(Docker Desktop for Windowsの旧称)18.03-0に、Docker Engine(18.03.0-ce)のExperimental機能として搭載されました。

 そして、2020年1月21日リリースのDocker Desktop for Windows バージョン2.2.0.0(Docker Engine 19.03.5)や、先日リリースされた最新バージョン2.2.0.4(Docker Engine 19.03.8)においても、Experimental機能であることに変わりありません。WSL 2が正式版になったとしても、WSL 2がExperimental機能でなくなるとは限りません。

 このように、WSL 2、Windows 10 Home、Docker Desktop for WindowsのWSL 2対応の話がごちゃ混ぜになり、ややこしいことになっています。

 さらにややこしい話を追加しておきましょう。

 WSL 2は本物のLinuxカーネルであり、システムコールの100%互換を実現するといわれています。WSL 2のLinux環境に、Linux版のDocker EngineとDocker CLIバイナリをインストールすれば、Windows 10 HomeでもDockerを利用することができるでしょう。Docker Engineについては実際にやってみたことはありませんが(ネットワーク周りは工夫が必要かもしれません)、Docker CLIについては現在のWSL 1のLinux環境でも可能です。

最新情報(2020年5月13日追記)

 2020年5月12日リリースのDocker Desktop Stable 2.3.0.2にて、WSL 2バックエンドによるWindows 10 Home(バージョン2004、ビルド19041)のサポートが正式に追加されました。インストーラーは共通であり、Windows 10 Homeではインストール開始時に「Enable Hyper-V Windows Features」の代わりに「Enable WSL 2 Windows Features」オプションが提示されます。


筆者紹介

山市 良(やまいち りょう)

岩手県花巻市在住。Microsoft MVP:Cloud and Datacenter Management(2019-2020)。SIer、IT出版社、中堅企業のシステム管理者を経て、フリーのテクニカルライターに。Microsoft製品、テクノロジーを中心に、IT雑誌、Webサイトへの記事の寄稿、ドキュメント作成、事例取材などを手掛ける。個人ブログは『山市良のえぬなんとかわーるど』。近著は『Windows版Docker&Windowsコンテナーテクノロジ入門』(日経BP社)、『ITプロフェッショナル向けWindowsトラブル解決 コマンド&テクニック集』(日経BP社)。


Copyright © ITmedia, Inc. All Rights Reserved.

スポンサーからのお知らせPR

注目のテーマ

4AI by @IT - AIを作り、動かし、守り、生かす
Microsoft & Windows最前線2025
AI for エンジニアリング
ローコード/ノーコード セントラル by @IT - ITエンジニアがビジネスの中心で活躍する組織へ
Cloud Native Central by @IT - スケーラブルな能力を組織に
システム開発ノウハウ 【発注ナビ】PR
あなたにおすすめの記事PR

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。