ようへいの日々精進XP

よかろうもん

configspec で Dockerfile の生成を試してみた

はじめに

Dockerfile を作ってみようと思ったら configspecDockerfile を書き出せるとのことなので試してみた。現状、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 でコンテナイメージを指定した。以下は生成されたDockerfileFROM 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 のセットアップを抽象化出来るのでではと激しく感じた。