Table of Contents
7/28にDocker for Winodws(とDocker for Mac)の正式版リリースのアナウンスがあったので試してみたけど、期待していたものと違ったしなんだか上手く動かなかった話。
Docker for Windowsとは
Docker for WindowsはDocker Toolboxの後継製品。(多分。)
Docker ToolboxはWindowsやMacでDockerを使うための製品で、以下のコンポーネントからなる。
-
コンテナランタイム。
-
複数のコンテナを組み合わせたアプリケーション/サービスの構築/管理ツール。
-
Docker仮想ホストのプロビジョニング/管理ツール。
-
Dockerコンテナを管理するGUIを提供する製品。 Docker Machineと連携してローカルマシンへのDocker仮想ホストのプロビジョニングもしてくれる。
Docker Toolboxを使うと、VirtualBoxのLinux VMをWindows/Mac上にプロビジョニングして、そのVMにDockerをインストールして、Windows/Macから利用できる。
Docker for Windowsもだいたい同じで、Docker EngineとDocker ComposeとDocker MachineをWinodwsで利用するための製品。 ElectronベースでOracleのVirtualBox依存なKitematicの代わりに、ネイティブなインストーラがWindows内蔵のHyper-Vを使ってDockerをセットアップしてくれる。 Hyper-Vを使うため、VirtualBoxより速くて高信頼らしい。 KitematicはDocker for Windowsには付属しないが、別途ダウンロードすればコンテナ管理に使える。Docker for WindowsとDocker Toolboxとは共存はできない。
私は勝手にDocker for WindowsはHyper-V ContainersのデスクトップOS版のようなものかと勘違いしていて、Windowsのコンテナが使えるようになったのかと期待したが違った。 Docker for Windowsは単にDocker ToolboxのVirtualBoxがHyper-Vになっただけのもので、結局Linux VMの中でDockerを使うだけのものだということにセットアップ中に気付いた。
(2017/9/12追記: これとかこれとかを見るに、いまではDocker for Winodwsは、Hyper-V ContainersやWindows Server Containersのフロントエンドでもあるようだ。)
コレジャナイ感がすごかった。
ともあれ、やった作業を以下に記す。
Docker for Windows on VMware Player
現時点ではDocker for WindowsはホストとしてWindows 10 x64 Pro/Enterprise/Education (Version 1511 Build 10586 以降)しかサポートしていない。 自前のPCが5年前に買ったdynabookでWindows 10をサポートしていないので、VMware PlayerのVM上のWindows 10にDocker for Windowsをインストールしてみる。
VMware PlayerのVMでHyper-Vを使うための設定
VMware PlayerのVMでは通常Hyper-Vは使えないので、How to Install Hyper-V on vmware Workstation 10 ?を参考にしてVMの設定をいじる。 この記事はVMware Workstationについてのものだが、VMware Playerでも全く同じ方法でいける。
いじるのは、dynabookのWindows 7に入れたVMware Workstation 11.1.0 build-2496824に付属の VMware Player 7.1.0 build-2496824で作ったWindows 10 Pro x64 (Version 1511 Build 10586.494)のVM。 VMのバージョンは11.0。2CPUでメモリは2GB。ネットワークインターフェースはNAT。
このVMの.vmxファイルをテキストエディタで開いて以下を追記。意味は不明。
hypervisor.cpuid.v0 = "FALSE"
mce.enable = "TRUE"
vhu.enable = "TRUE"
次いで、VMware PlayerのGUIからVMのCPU設定を開き、Intel VT-x/EPTまたはAMD-V/RVIを仮想化
とCPUパフォーマンスカウンタを仮想化
にチェックを付ける。意味はなんとなくしかわからない。
これだけ。
Hyper-VはDocker for Windowsのインストーラが有効化してくれるのでここでは何もしなくていい。
Docker for Windowsインストール
VMを起動して、Getting Started with Docker for Windowsに従ってDocker for Windowsをインストールする。
まず、上記サイト内のリンクからインストーラをダウンロード。stableの方。
ダウンロードしたInstallDocker.msi
をVM上で実行してウィザードに従えばインストール完了。
ウィザードの最後でLaunch Docker
にチェックが付いた状態でFinish
するとDockerを起動してくれる。
この起動中にHyper-Vを有効化してくれる。(OS再起動有り。)
OS再起動後、「Failed to create Switch “DockerNAT”: Hyper-V was unable to find a virtual switch with name “DockerNAT”」というエラー出た。DockerNAT
が見つからない?
DockerNAT
はDocker for Windowsがインストール中に作るHyper-Vの仮想スイッチ。
以前にhosts
に変なエントリを書いてしまっていたのでそれを一応消して、VMware PlayerのVMのアダプタの設定もちょっといじってしまっていたので一応もとにもどして、再度Docker for Windowsをクリーンインストールしたら上記エラーは出なくなった。
なんだったんだろう。
Dockerの起動中に今度はメモリ系のエラー: 「Failed to create VM “MobyLinuxVM”: Failed to modify device ‘Memory’」。
MobyLinuxVM
はDockerを動かすHyper-V VMの名前。このVMに割り当てるメモリはホストOSのメモリ量から決められるようで、これが少なすぎるとダメな模様。
VMware PlayerのVMのメモリを2Gから3.3Gに増やしたらこのエラーもなくなったけど、今度はIPアドレスのエラー: 「Failed to start VM “MobyLinuxVM”: The VM couldn’t get an IP address after 60 tries」。
フォーラムを見たら このエラーが載っていた。そこには以下の様な解決方法が挙がっていた。
- Docker for Windowsをクリーンインストールしなおす。
vEthernet (DockerNAT)
のアダプタのオプションでIPv6を無効にする。タスクトレイの鯨アイコンから開けるDockerのSettingsで
Reset to factory defaults...
を実行。
どれもだめだった。
MobyLinuxVM
がちゃんと起動しなくて、Dockerデーモンに接続できない。
C:\Windows\System32>docker version
Client:
Version: 1.12.0
API version: 1.24
Go version: go1.6.3
Git commit: 8eab29e
Built: Thu Jul 28 21:15:28 2016
OS/Arch: windows/amd64
An error occurred trying to connect: Get http://%2F%2F.%2Fpipe%2Fdocker_engine/v1.24/version: open //./pipe/docker_engine: The system cannot find the file specified.
因みにちゃんと起動すると以下の感じになるらしい。
PS C:\Users\samstevens> docker version
Client:
Version: 1.12.0-rc2
API version: 1.24
Go version: go1.6.2
Git commit: 906eacd
Built: Fri Jun 17 20:35:33 2016
OS/Arch: windows/amd64
Experimental: true
Server:
Version: 1.12.0-rc2
API version: 1.24
Go version: go1.6.2
Git commit: a7119de
Built: Fri Jun 17 22:09:20 2016
OS/Arch: linux/amd64
Experimental: true
もうあきらめる。 どうせWindowsコンテナが使えないならあまり面白くないし。