はじめに
Windows 10 で Docker(というか Windows コンテナ)を使うためには Hyper-V を有効にする必要があります。ということで、Hype-V 上の VM で Hyper-V を有効にして(Nested Virtualization)、VM 上で Docker を動かしてみます。ホストも VM も、Windows 10 Pro か Enterprise の Anniversary Update 以降が必要です。(ホストは Windows Server 2016 でも OK)
Nested Virtualization 有効化
Hyper-V 上の VM に Windows 10 をインストールしたあと、VM を停止した状態で、Hyper-V ホストで以下の PowerShell コマンドを実行して Nested Virtualization を有効化します。
> Set-VMProcessor -VMName <VMName> -ExposeVirtualizationExtensions $true
> (Get-VMProcessor -VMName <VMName>).ExposeVirtualizationExtensions # 有効化の確認
True
以降の作業はすべて VM 側で実施します。
Hyper-V とコンテナの有効化
Nested Virtualization を有効化したら VM 上で PowerShell を管理者として起動して以下のコマンドを実行します。(要再起動)
> Enable-WindowsOptionalFeature -Online -FeatureName containers -All
> Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
有効化の確認。
> (Get-WindowsOptionalFeature -Online -FeatureName containers).State
Enabled
> (Get-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V).State
Enabled
Docker for Windows のインストール
Docker for Windows をダウンロードしてインストールします。
> Invoke-WebRequest -Uri https://download.docker.com/win/stable/InstallDocker.msi -OutFile ~\Downloads\InstallDocker.msi
> cd ~\Downloads\
> .\InstallDocker.msi /passive
docker コマンドを使ってバージョン確認します。環境変数 Path の再読み込みのため、PowerShell を再起動してから実行します。
> docker --version
Docker version 17.03.1-ce, build c6d412e
デスクトップの Docker for Windows をダブルクリックして Docker を起動しましょう。(スタートアップに自動登録されるため以降は OS 起動時に自動起動されます)
Hello World(Linux コンテナ)
動作確認のために Hello World を実行します。とりあえず Linux コンテナから。
> docker run hello-world
Hello World(Windows コンテナ)
Linux コンテナと Windows コンテナは同時に起動できず、切り替える必要があります。タスクバーの Docker アイコンを右クリックして Switch to Windows containers... を選択して Windows コンテナに切り替えます。
切り替えたら Hello World を実行しましょう。(400MBぐらいダウンロードします)
> docker run hello-world:nanoserver
蛇足
Microsoft 的には -er で終わる単語の日本語訳は長音になる決まりなので正しくはコンテナじゃなくて「コンテナー」なんですが、日本語としては微妙...。