Hyper 0.2 のリリース

ハイパーバイザー・ベースの 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.

v0.2 (2015-06-26) | About Hyper

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 ポートにアクセスしてみたところ……

f:id:holidayworking:20150628225159p:plain

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 アプリケーションを動かすことに挑戦することを考えている。