boot2dockerはVirtualBox上にDocker ReadyなTinyCoreOSをセットアップしてくれるツールです。
そのままVMを起動しても、test-kitchenがdockerコンテナにssh接続できないため使えませんが、いくつか追加手順を加える事で動作可能に出来ます。
ここでは、Macで試した内容を紹介します。
なお、HomebrewとVirtualBoxはインストール済みとします。
boot2dockerとネットワーク設定
$ brew install boot2docker
$ boot2docker init
boot2docker-vm
というインスタンスが生成され、起動前の状態になっています。
ホストオンリーネットワーク
VMのネットワーク設定が標準ではNATのみになっていますが、このままではダイレクトなssh接続ができないため、ホストオンリーアダプタを追加します。
[VirtualBox] > [環境設定] > [ネットワーク]タブ > [ホストオンリーネットワーク]を選び、
「ホストオンリーネットワークの追加」を選択します。
追加したネットワーク(ここではvboxnet3)をダブルクリックして編集し、IPの確認を行います。
ここでは、192.168.59.1
に設定されたので、DHCPサーバの設定を192.168.59.x
のレンジに作成します。
boot2dockerのインスタンスは、新しいインターフェースに自動的にDHCPでIPを割り当ててくれます。
VMのネットワーク設定
boot2docker-vm
インスタンスの設定を開き、[ネットワーク]の設定を追加します。
既に設定されているアダプター1はそのままで、アダプター2を作成します(VM起動中は作成出来ません)
ネットワーク名は作成したホストオンリーネットワーク名を指定します。
ここまで終わったらboot2dockerを起動します。
$ boot2docker up
kitchenの設定
起動してみるとおそらくeth1にホストオンリーアダプタが設定されます。SSHログインして確認しましょう。なお、boot2docker ver0.9.0ではログインパスワードを聞かれますが、tcuser
になっているようです。(今後無くすとのこと)
$ boot2docker ssh
docker@localhost's password:
## .
## ## ## ==
## ## ## ## ===
/""""""""""""""""\___/ ===
~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ / ===- ~~~
\______ o __/
\ \ __/
\____\______/
_ _ ____ _ _
| |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|
boot2docker: 0.8.1
master : 17bb8c2 - Thu May 8 02:55:10 UTC 2014
$ ifconfig eth1
eth1 Link encap:Ethernet HWaddr ...
inet addr:192.168.59.33 Bcast:192.168.59.255 Mask:255.255.255.0
inet6 addr: ... Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:4145 errors:0 dropped:0 overruns:0 frame:0
TX packets:3292 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:779677 (761.4 KiB) TX bytes:574119 (560.6 KiB)
Interrupt:16 Base address:0xd040
ここで設定されたIPアドレス192.168.59.33
を使用してkitchenを起動してみましょう。
.kitchen.yml
cookbookに対して、kitchenのセットアップを行います。
$ kitchen init -D kitchen-docker
ここで生成される .kitchen.yml
に接続先の情報などを記述します。
各OSのイメージについては、Docker Indexを参照してください。
driver:
name: docker
binary: /usr/local/bin/docker
socket: tcp://192.168.59.33:4243
dns: 8.8.8.8
provisioner:
name: chef_solo
platforms:
- name: debian-6.0.9
driver_config:
image: debian:6.0.9
- name: debian-7.4
driver_config:
image: debian:7.4
kitchenを含めたネットワーク構成のイメージはこんな感じでしょうか。
boot2dockerのDNS設定バグ
あとはkitchen setup
でセットアップを走らせることができるはず…なのですが、boot2dockerインスタンスのDNS設定が無く、動かないことがあります。
どうやら以下の設定がまだ適用されてない(?)ような状態になっていることがあり、DHCPリース更新の度に/etc/resolv.conf
が空っぽになる現象が発生していました。
参照:https://github.com/boot2docker/boot2docker/pull/197
ということで、修正してあげましょう。
done
fi
- echo -n > $RESOLV_CONF
+ [ -n "$dns" ] && echo -n > $RESOLV_CONF
[ -n "$domain" ] && echo search $domain >> $RESOLV_CONF
for i in $dns ; do
echo adding dns $i
そして、/etc/resolv.conf
にGoogle Public DNSでも設定しておきましょう。
nameserver 8.8.8.8
さて、これで動くと思います。やれやれです。
今後について
Dockerはまだ正式版でもなく、boot2dockerもまだまだ変わる可能性があります。
ここにある情報も一時的かもしれませんが、参考になれば幸いです。
内容にミス等があればコメントでご指摘ください。
複数インスタンスで異なるディストリビューションやバージョンのcookbookのテストを実行できるようになると、OSの移行なども視野に入れて動かすことが出来ますね。