Edited at

Windows上でMoby/LinuxKitを使ってみる

More than 1 year has passed since last update.

最近、流行りつつある(?)、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

という感じで起動できた(^^)。


参考サイト