Dockerとchefで環境を作成
Dockerのイメージを作成する際にはDockerfileってのを書いてimageをbuildするんですが、chefに慣れた身にはちょいと機能的に不満。多分ちゃんと調べればいろいろできるんでしょうが。
そこでDockerfile中でchefが書けないものが調べてみると、やはり同じようんことを考える人はいるもんで、このページを発見。いろいろゴチャゴチャやってみてとりあえず目鼻が付きそうなので自分宛てにメモ。
proxy対応のイメージを作成
いまからコンテナを作成する環境では外部へのhttp,https通信はproxy経由でやらないといけません。そこでyum,curl,wgetそれぞれに対してproxyを参照する設定がはいったイメージを作成します。
まずcentos/latestのイメージをpullして、bashで対応するimageをrun。
# docker pull centos:latest # docker run -it centos:latest /bin/bash (.wgetrcとか.curlrcとかyum.confを編集) # docker commit <container-id> hoge/centos:proxy
できたかどうかチェック。
# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE hoge/centos proxy c94e9d000edf 10 minutes ago 172.2 MB centos latest 7322fbe74aa5 8 weeks ago 172.2 MB
chef環境を用意
chefをインストール。でもって、いままで使っていたchefの環境をコピーします。
# mkdir dockerfile # rcp -pr ~hoge/mypc/chef .
node.jsを用意
作成するコンテナ用にnodeファイルを上記で作成したchef環境以下へ作成します。上記の例で言うと dockerfile/chef/node 以下へ docker.js をこんな風に作成。
} "run_list": [ "recipe[postgresql]" ] }
Dockerfileを用意
いまから環境構築する機器はプロクシ経由じゃないと外部へhttp,https接続できません。そのあたりの環境変数設定と、作成するコンテナへのchefのインストールを記述。一番最後にchefを起動する一文を書きます。
FROM hoge/centos:proxy MAINTAINER hoge <hoge@example.com> ENV HTTP_PROXY=http://proxy.example.com:8080/ ENV HTTPS_PROXY=http://proxy.example.com:8080/ ENV CHEFHOME /chef-solo ADD chef-solo /chef-solo RUN curl -L http://www.opscode.com/chef/install.sh | bash RUN cd ${CHEFHOME} && chef-solo -c ${CHEFHOME}/solo.rb -j ${CHEFHOME}/nodes/docker.json
buildする
docker buildでイメージを作成。
# docker build -t hoge/centos:postgresql . (後略)
実際にはいままで使っていたレシピからいろいろ変更すべきところがありました。そのあたりはおいおい。
とりあえずこれでchefでもってdockerイメージが作成できることがわかりました。ありがたい。