最近、流行りつつある(?)、Moby/LinuxKitをWindows10上で起動してみたので手順メモ。LinuxKitを起動するところまで確認しました。
Dockerは普段使ってますが、Go言語は全く使ったことがないし、Moby/LinuxKitの情報にもあまり詳しくないので、とりあえず動くところまで、という感じでまとめました。
動作環境
- Windows 10 Pro(1703) 64bit
- Hyper-Vを使うためHome不可。Pro以上が必要。
- Docker 17.06.0-ce
- Go 1.8.3 windows/amd64
インストール
Go言語のインストール
Moby/LinuxKitをGo言語を使ってインストールするので、まずはGo言語のインストールを行う。Go言語のダウンロードページからパッケージをダウンロードしてインストールすればよい(2017-07-19現在では1.8.3だった)。
Gitのインストール
Moby/LinuxKitビルド時にGitを使用するのでGit for Windowsのインストールを行う。
MobyおよびLinuxKitをビルド
Goコマンドを使えば簡単にインストールできる。
Moby
C:\> go get -u github.com/moby/tool/cmd/moby
LinuxKit
C:\> go get -u github.com/linuxkit/linuxkit/src/cmd/linuxkit
Docker for Windowsのインストール
MobyでLinuxKit用のイメージをビルドする際にはDockerが必要になるので、Docker for Windowsをインストールする。公式のインストールページからパッケージをダウンロードしてインストールすればよい。
インストールしたら起動しておく。
以上で準備は整った。
使ってみる
とりあえず最小限のイメージをビルドし、起動を試す。昔の人なので、DOS窓を使って作業した。linuxkitを起動する際に、Must be run from an elevated prompt or user must be in the Hyper-V Administrator role
と怒られるので、管理者権限でコマンドラインプロンプトを開く(PowerShellでも同じ)。
minimalイメージのビルド
GitHubのlinuxkitリポジトリからminimal.ymlを適当なディレクトリにダウンロードする。ここではC:\mobyディレクトリで作業したとする。
mobyの実体であるmoby.exeは%USERPROFILE%\go\binにあるのでパスを通す。
C:\moby> PATH=%USERPROFILE%\go\bin;%PATH%
mobyでビルドする。WindowsではHyper-Vに仮想PCを作成して起動するようだが、そのときEFI-ISOファイルを使うようなので、mobyのオプションで-output iso-efi
を指定する。以前はmoby build
で-efi.isoファイルも作成していたようだが、最近変わったのかな?
ビルドするときにDockerが必要である。
C:\moby> moby build -output iso-efi minimal.yml
Extract kernel image: linuxkit/kernel:4.9.38
Add init containers:
Process init image: linuxkit/init:d049e7b2074da5cd699a27defb47eb101142455d
Process init image: linuxkit/runc:d5cbeb95bdafedb82ad2cf11cff1a5da7fcae630
Process init image: linuxkit/containerd:b6ffbb669248e3369081a6c4427026aa968a2385
Add onboot containers:
Create OCI config for linuxkit/dhcpcd:4b7b8bb024cebb1bbb9c8026d44d7cbc8e202c41
Add service containers:
Create OCI config for linuxkit/getty:0a2955f3d7a10a0e71972791c3ba6400118f327e
Create outputs:
minimal-efi.iso
これでminimal-efi.iso
が作成された。このイメージを使い起動する。起動する際にはDockerは不要。おそらくlinuxkit.exeだけで動作する(のかな?)。
C:\moby> linuxkit run minimal-efi.iso
FATA[0001] Could not find an external switch
…外部スイッチがない、と怒られる(環境によると思う)。これを回避するために、Hyper-Vマネージャーの仮想スイッチマネージャーを使い、適当に内部用仮想スイッチを作成する。ここではLinuxKitNAT
という名前で仮想スイッチを作成した。
C:\moby> linuxkit run -switch LinuxKitNAT minimal-efi.iso
Creating VM: minimal
Configure VM: minimal
Setting up boot from ISO
Set up COM port
Start the VM
Connected
[ 0.000000] Linux version 4.9.38-linuxkit (root@e1ede117fb1e) (gcc version 6.3.0 (Alpine 6.3.0) ) #1 SMP Tue Jul 18 09:12:54 UTC 2017
[ 0.000000] Command line: console=tty0 console=ttyS0 rootdelay=300 noautodetect
[ 0.000000]
...(略)...
[ 4.584461] Freeing unused kernel memory: 152K (ffff8a842e7da000 - ffff8a842e800000)
[ 4.612413] Freeing unused kernel memory: 1400K (ffff8a842eaa2000 - ffff8a842ec00000)
Welcome to LinuxKit
## .
## ## ## ==
## ## ## ## ## ===
/"""""""""""""""""\___/ ===
{ / ===-
\______ O __/
\ \ __/
\____\_______/
eth0: waiting for carrier
という感じで起動できた(^^)。