はじめに
Dockerfile を作ってみようと思ったら configspec で Dockerfile を書き出せるとのことなので試してみた。現状、RedHat 系のコマンドのみが対応となっているとのことだが、今後、整備されて一つの spec ファイルから複数の OS に対応した Dockerfile が生成されるようになるのかな。
参考
準備
試した環境
configspec のインストール
gem install configspec --no-ri --no-rdoc -V
configspec-init
カレントディレクトリで configspec-init を実行する。
configspec-init
以下のように初期設定を行う。
Select a backend type:
1) SSH
2) Exec (local)
3) Dockerfile
Select number: 3
+ spec/
+ spec//001_httpd_spec.rb
+ spec/spec_helper.rb
+ Rakefile
今回は Dockerfile の生成を目的としているので 3 を選択。
spec ファイル
以下のような spec ファイルが生成されている。
require 'spec_helper'
describe package('httpd') do
it { should be_installed }
end
Dockerfile の生成
rake spec
カレントディレクトリで rake spec を実行すると Dockerfile が生成される。
rake spec
以下の出力と共にカレントディレクトリに Dockerfile が生成されている。
/usr/bin/ruby1.9.1 -S rspec
.
Finished in 0.00499 seconds
1 example, 0 failures
Dockerfile の中身を確認する。
RUN yum -y install httpd
おお。
docker build
作成された Dockerfile を利用して docker build してみる。ちなみに今回は Dockerfile の行頭に FROM でコンテナイメージを指定した。以下は生成されたDockerfileに FROM centos を追加したもの。
FROM centos RUN yum -y install httpd
実際に docker build してみると...
Step 1 : FROM centos ---> 539c0211cd76 Step 2 : RUN yum -y install httpd (中略) ---> Using cache ---> 6804af67a36c
おお。
最後に
configspec から Dockerfile を生成することが出来るというのは前述の通り、サーバーのあるべき姿を一つの方法で記述してその記述をもとに複数の OS のセットアップを抽象化出来るのでではと激しく感じた。