ようへいの日々精進XP

よかろうもん

kitchen-docker が動きました(2)

はじめに

先週から issue に質問したりしていてなんとなーく動いていた kitchen-docker がちゃんと動くようになって嬉しかったのでメモ。


経緯と敬意


参考


使ってみる

必要なもの

先週から docker がバージョンアップしたり test-kitchen がバージョンアップしたり。

そーいった意味では運が良かったのかもしれない。

Gemfile

以下のような Gemfile を用意する。

source 'https://rubygems.org'
gem 'berkshelf' , '~> 2.0.0'
gem 'minitest-chef-handler'
gem 'test-kitchen'
gem 'chef'
gem 'chef-zero'
gem 'lxc-awesome-ephemeral', :git => 'https://github.com/portertech/lxc-awesome-ephemeral.git'
gem 'kitchen-lxc'
gem 'kitchen-vagrant', :group => :integration
gem 'faraday_middleware'
gem 'kitchen-docker'
gem 'nokogiri'

とりあえず bundle install する。

設定ファイル等

bundle install を実行後にカレントディレクトリには .kitchen.yml というファイルと test.kitchen という名前のディレクトリが生成される。

.kitchen.yml

test-kitchen の各種設定ファイルを YAML 形式で記載する。

---
driver_plugin: docker
driver_config:
  require_chef_omnibus: true

platforms:
- name: ubuntu
  driver_config:
    image: ubuntu:12.04
- name: debian
  driver_config:
    image: inokappa/squeeze-basic

suites:
- name: default
  run_list: ["recipe[apache2]"]
  attributes: {}

以下、各項目について。

ハッシュキー 説明
driver_plugin: 利用するプラグイン名を記載(もちろん今回は doccker
driver_config: プラグインに対する設定を記載(例:require_chef_omnibus: true コレを設定するとコンテナに対して chef 環境をセットアップしてくれる)
name: 任意で設定可能任意ではなく debian- とか ubuntu- とか centos- とかをちょっとした書式(名前の後にハイフンが入る)がある
image: docker のコンテナイメージを指定(index.docker.io のコンテナを指定可)
run_list: recipe を指定する(例:recipe[tmux::default]
attributes: attributes を指定する(例:attributes: { foo: "bar" }

.kitchen ディレクトリ

test-kitchen の実行ログが記録される。

.kitchen
└── logs
    ├── default-debian.log
    ├── default-ubuntu.log
    └── kitchen.log

問題があった時等にはここのログを真っ先に見る。

test ディレクトリ

busser が利用するディレクトリ。

test
└── integration
    └── default

busser とはテストのフレームワークtest-kitchen にはプラグインとして組み込まれている。

demo

うんちくよりも動いている動画を見た方がその良さを実感出来ると思う。また、test-kitchen のコマンド等はこちらの記事が纏まっていて嬉しい。セットアップ等について Getting Started がとても参考になった。

kitchen create が一瞬で終わるのは docker ならではで非常に嬉しい。

何が嬉しいか

test-kichendocker を使うのが何が嬉しいか...個人的には以下の点だと思う。

  • 仮想環境が一瞬で用意出来る
  • VirtualBox よりも少ないリソースで仮想環境が用意出来る

昨今のマシンだとスペックもそこそこ良い(メモリ 16GB とかクアッドコアとか...)のでリソースを激しく意識する必要は無いかもしれないけど少ないリソースで複数の仮想環境が一瞬で用意出来るというのは悪くはない。


最後に

  • 個人的には docker と test-kitchen の組み合わせがサイコー
  • CI ツールと組み合わせてオレオレ cookbook のテスト環境を作っていく予定
  • github を介して議論を重ねながらプロダクトを作り上げていくのって面白い
  • I want to 英語力と ruby