もふもふ技術部

Dockerコンテナ内でAnsibleで自身(localhost)をプロビジョニングする


Dockerfileでインフラをコード化するっていう流れなのはいいんですが、結局Dockerfileってほとんどシェルスクリプトそのものなので、結構作るのが手間。

ちょうど最近Ansibleをごにょごにょしているので、Ansibleで作ったリソースをそのままDockerでいかせないかと思ってやってみた。

一番きれいなのはPackerをつかってAsibleからDockerイメージを作るのが良さげですが、Docker,Ansibleに続きPackerも覚えるのがしんどいので、Dockerコンテナ内でローカルにAnsibleを実行という手段を試してみました。

CentOS6のコンテナを起動してAnsibleを実行

centos6のコンテナを起動
※事前にcentos6をpullしておく必要があります

EPELリポジトリを追加して、必要なパッケージをyumでインストールする。

Railsプロジェクトを動かすためのProvisiningをgit cloneする。

Railsを動かすのに必要なインフラを一通りセットアップしてます。rbenv,mysql,nginxなどなど。

https://github.com/harada4atsushi/ansible-rails-base

対象ホストをlocalhostに変更する。

ansibleを実行

参考:http://cloverrose.hateblo.jp/entry/2013/09/07/112153

yum updateやruby installなどをしているのでだいぶ待ちます。おせんべいでも食べて待ってましょう。

結果が返ってきたら.bashrcをリロードしてrbenvを有効にします。

Railsプロジェクトをunicornで動かす

unicorn起動を確かめるだけのブランクのプロジェクトをcloneしてbundle installする。

blank-rails-unicorn

ここまで問題なくできたら一旦コンテナから脱出します。

コンテナIDを調べてここまでの手動変更をコミットします。これがフリーズしたかってくらい長い。気長に待ちます。

再度コンテナを起動して、iptableで5000番を許可させておきます(本番はちゃんと設定を見直して!)。

unicornを起動してコンテナをデタッチします。ctrl + p, ctrl + qでデタッチ(コンテナを停止せずに脱出できる)

では外部からサーバにアクセスしてみましょう。Railsのデフォルト画面が表示されれば成功。

http://your-host:5000/

できたあああああ!
スクリーンショット 2014-12-07 14.47.26

最後に

ちょっと手作業に依存する部分が大きすぎるのとDockerのポータビリティっていうところがまるでいかせてない気がする。実践投入はもうちょい先になりそう。

The following two tabs change content below.
原田 敦

原田 敦

日本CAWのエンジニア。もふもふ部の部長。得意分野はRuby on Railsを使った小規模WEBアプリケーションを高速で開発すること。週末の楽しみは一人お菓子パーティー。三度の飯より小動物をもふもふするのが好きです。
Tagged on: ,