21
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

boot2docker で test-kitchen + kitchen-docker

Last updated at Posted at 2014-05-13

boot2dockerはVirtualBox上にDocker ReadyなTinyCoreOSをセットアップしてくれるツールです。

そのままVMを起動しても、test-kitchenがdockerコンテナにssh接続できないため使えませんが、いくつか追加手順を加える事で動作可能に出来ます。

ここでは、Macで試した内容を紹介します。

なお、HomebrewVirtualBoxはインストール済みとします。

boot2dockerとネットワーク設定

$ brew install boot2docker
$ boot2docker init

boot2docker-vmというインスタンスが生成され、起動前の状態になっています。

ホストオンリーネットワーク

VMのネットワーク設定が標準ではNATのみになっていますが、このままではダイレクトなssh接続ができないため、ホストオンリーアダプタを追加します。

[VirtualBox] > [環境設定] > [ネットワーク]タブ > [ホストオンリーネットワーク]を選び、
「ホストオンリーネットワークの追加」を選択します。

ネットワーク設定

追加したネットワーク(ここではvboxnet3)をダブルクリックして編集し、IPの確認を行います。

vboxnet3のIP指定

ここでは、192.168.59.1に設定されたので、DHCPサーバの設定を192.168.59.xのレンジに作成します。

vboxnet3のDHCP設定

boot2dockerのインスタンスは、新しいインターフェースに自動的にDHCPでIPを割り当ててくれます。

VMのネットワーク設定

boot2docker-vm インスタンスの設定を開き、[ネットワーク]の設定を追加します。

既に設定されているアダプター1はそのままで、アダプター2を作成します(VM起動中は作成出来ません)
ネットワーク名は作成したホストオンリーネットワーク名を指定します。

スクリーンショット 2014-05-13 10.59.49.png

ここまで終わったら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 with kitchen.png

boot2dockerのDNS設定バグ

あとはkitchen setupでセットアップを走らせることができるはず…なのですが、boot2dockerインスタンスのDNS設定が無く、動かないことがあります。
どうやら以下の設定がまだ適用されてない(?)ような状態になっていることがあり、DHCPリース更新の度に/etc/resolv.confが空っぽになる現象が発生していました。
参照:https://github.com/boot2docker/boot2docker/pull/197

ということで、修正してあげましょう。

/usr/share/udhcpc/default.script
                         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でも設定しておきましょう。

/etc/resolv.conf
nameserver 8.8.8.8

さて、これで動くと思います。やれやれです。

今後について

Dockerはまだ正式版でもなく、boot2dockerもまだまだ変わる可能性があります。
ここにある情報も一時的かもしれませんが、参考になれば幸いです。
内容にミス等があればコメントでご指摘ください。

複数インスタンスで異なるディストリビューションやバージョンのcookbookのテストを実行できるようになると、OSの移行なども視野に入れて動かすことが出来ますね。

21
21
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?