はじめに
先週から issue に質問したりしていてなんとなーく動いていた kitchen-docker がちゃんと動くようになって嬉しかったのでメモ。
経緯と敬意
- 詳細は issue に集約されている
- 自分のグダグダな英語に怒りもせず色々とアドバイスを下さった @portertech @nathwill @fnichol @damm に感謝
参考
使ってみる
必要なもの
先週から docker がバージョンアップしたり test-kitchen がバージョンアップしたり。
Happy Thanksgiving to my American friends, Test Kitchen 1.0.0.rc.1 released with the largest changelog yet! https://t.co/dNqq9qE8ut #opschef
— Fletcher Nichol (@fnichol) 2013, 11月 28
そーいった意味では運が良かったのかもしれない。
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-kichen
に docker
を使うのが何が嬉しいか...個人的には以下の点だと思う。
- 仮想環境が一瞬で用意出来る
- VirtualBox よりも少ないリソースで仮想環境が用意出来る
昨今のマシンだとスペックもそこそこ良い(メモリ 16GB とかクアッドコアとか...)のでリソースを激しく意識する必要は無いかもしれないけど少ないリソースで複数の仮想環境が一瞬で用意出来るというのは悪くはない。
最後に
- 個人的には docker と test-kitchen の組み合わせがサイコー
- CI ツールと組み合わせてオレオレ cookbook のテスト環境を作っていく予定
- github を介して議論を重ねながらプロダクトを作り上げていくのって面白い
- I want to 英語力と ruby 力