ハイパーバイザー・ベースの Docker エンジンである Hyper の最新バージョンとなる 0.2 がリリースされていた。
- Support Xen Hypervisor (Xen 4.5/hvm)
- fully support run, stop, replace and persistent mode as the kvm version
- overlayfs storage engine support.
hyper がサポートしているハイパーバイザーは KVM (QEMU) のみであったが、このリリースからは Xen のサポートも追加されることになった。
リリースノートに書かれていないが、試したところポートフォワーディングがサポートされるようになっていた。
Xen のサポート
ハイパーバイザーとして Xen を使う場合は、Xen 4.5 が必要となる。また、Hyper のセットアップスクリプトが KVM (QEMU) とは違うものを実行する必要があるため、注意する必要がある。
$ curl -sSL https://hyper.sh/install-xen | bash
因みにこのスクリプトを実行しても KVM (QEMU) を使うことができるが、Xen 4.5 がインストールされている必要がある。
ポートフォワーディングのサポート
Nginx の Docker イメージでポートフォワーディングを試してみることにした。
ポートフォワーディングを行う場合は Podfile で VM インスタンスを用意する必要があるので、下記のような Podile を準備した。
{ "name": "nginx", "containers" : [{ "image": "nginx:latest", "ports": [{ "containerPort": 80, "hostPort": 8080 }] }], "resource": { "vcpu": 1, "memory": 128 } }
これを nginx.pod
というファイル名で保存して、VM インスタンスの作成・起動をしてみた。
$ sudo hyper create nginx.pod Pod ID is pod-fuUdqxViKw $ sudo hyper start pod-fuUdqxViKw Successfully started the Pod(pod-fuUdqxViKw)
VM インスタンスの起動が完了したら、Hyper を実行している環境の 8080 ポートにアクセスしてみたところ……
Nginx にアクセスできるようになっていた!
iptables のルールを確認してみると 8080 ポートが VM インスタンスの 80 ポートにフォワーディングされるように設定されていることも確認できた。
$ sudo hyper exec pod-fuUdqxViKw ip addr show eth0 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 52:54:f4:a5:b6:d4 brd ff:ff:ff:ff:ff:ff inet 192.168.123.3/24 scope global eth0 valid_lft forever preferred_lft forever $ sudo iptables -L -t nat Chain PREROUTING (policy ACCEPT) target prot opt source destination HYPER all -- anywhere anywhere ADDRTYPE match dst-type LOCAL DOCKER all -- anywhere anywhere ADDRTYPE match dst-type LOCAL Chain INPUT (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination HYPER all -- anywhere !127.0.0.0/8 ADDRTYPE match dst-type LOCAL DOCKER all -- anywhere !127.0.0.0/8 ADDRTYPE match dst-type LOCAL Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE all -- 192.168.123.0/24 anywhere MASQUERADE all -- 172.17.0.0/16 anywhere Chain DOCKER (2 references) target prot opt source destination Chain HYPER (2 references) target prot opt source destination DNAT tcp -- anywhere anywhere tcp dpt:http-alt to:192.168.123.3:80
ポートフォワーディングがサポートされたので、今度は Rails などの Web アプリケーションを動かすことに挑戦することを考えている。