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