orenoblog

エンジニアになりたいExcel方眼紙erの物語

boot2docker + test-kitchen * kitchen-dockerでcookbooksをテストしてみよう

cookbookの動作を確認するときにVagrantでゲストOSを立てていたのですが、

普段利用しているマシンのリソースがカッツカツであり、

Docker v0.8からMac OS XもサポートされたとのことなのでDockerを利用してテストできないか考えていた所、

test-kitchenのdriverとしてDockerを利用できるプラグインがあったので組み合わせて見ることにしました。

1. boot2dockerの準備

DockerのInstallation on Mac OS Xを参考に、

OS XでDockerコンテナを透過的に動かせるようboot2dockerを導入します。

利用しているシェルのrcファイルに[DOCKER_HOST]をセットしておくと良いです。

orenomac$ export DOCKER_HOST=tcp://127.0.0.1:4243
orenomac$ boot2docker status
[2014-03-05 00:36:04] boot2docker-vm is running.
orenomac$ docker info
Containers: 56
Images: 33
Driver: aufs
 Root Dir: /mnt/sda1/var/lib/docker/aufs
 Dirs: 145
Debug mode (server): true
Debug mode (client): false
Fds: 16
Goroutines: 83
Execution Driver: lxc-0.8.0
EventsListeners: 134
Kernel Version: 3.13.3-tinycore64
Init Path: /usr/local/bin/docker

2. テスト用イメージの準備

手元に落としておきましょう。 openssh-serverやchef-clientのインストールはtest-kitchen実行時に自動的に行われるため不要です。

orenomac$ docker pull centos

3. test-kitchenとkitchen-dockerの準備

bundlerを使います。いつもありがとうbundler

  • Gemfile
source "https://rubygems.org"
gem 'capistrano', '~> 3.0.1'
gem 'serverspec'
gem 'yard-chef'
gem 'knife-solo'
gem 'berkshelf'
gem 'test-kitchen'
gem 'kitchen-docker'
  • install
$ bundle install --path vendor/bundle

4. cookbookを書く

書きます。

5. .kitchen.ymlの準備

test-kitchenのReadmeを参考に記述します。

driver:
  name: docker

provisioner:
  name: chef_solo

platforms:
  - name: centos-6.4
    driver_config:
        image: centos/6.4:base
        platform: centos
suites:
  - name: default
    run_list:
        - yum-epel
        - yum-percona
        - base-cookbooks
        - apache::default
        - apache::php
        - php
        - redis
        - mysql::default
        - mysql::server

6. テスト実行

簡単にDockerでテストすることができます。

リソースカツカツマシンではVagrantで1インスタンス起動するのも躊躇してしまうのですが、

不要になったのはグッドだと思います!!

ありがとうboot2docker

以下実行ログは長いのでGistに...

7. 注意点@3/7追記

initctl動かないの忘れてた・・mysqlのcookbookがまともに動かないorz

参考: http://cpw.hatenadiary.jp/entry/2013/08/20/220306