Dockerfileでインフラをコード化するっていう流れなのはいいんですが、結局Dockerfileってほとんどシェルスクリプトそのものなので、結構作るのが手間。
ちょうど最近Ansibleをごにょごにょしているので、Ansibleで作ったリソースをそのままDockerでいかせないかと思ってやってみた。
一番きれいなのはPackerをつかってAsibleからDockerイメージを作るのが良さげですが、Docker,Ansibleに続きPackerも覚えるのがしんどいので、Dockerコンテナ内でローカルにAnsibleを実行という手段を試してみました。
CentOS6のコンテナを起動してAnsibleを実行
centos6のコンテナを起動
※事前にcentos6をpullしておく必要があります
1 2 3 4 |
$ sudo docker run -i -t centos:centos6 /bin/bash [root@8c311e437f0b]# |
EPELリポジトリを追加して、必要なパッケージをyumでインストールする。
1 2 3 4 |
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # yum install ansible git |
Railsプロジェクトを動かすためのProvisiningをgit cloneする。
1 2 |
# git clone https://github.com/harada4atsushi/ansible-rails-base.git |
Railsを動かすのに必要なインフラを一通りセットアップしてます。rbenv,mysql,nginxなどなど。
https://github.com/harada4atsushi/ansible-rails-base
対象ホストをlocalhostに変更する。
1 2 3 4 5 6 7 |
# cd ansible-rails-base/ansible # cp vagrant local # vi local [web-servers] localhost |
ansibleを実行
1 2 |
# ansible-playbook -i local web-servers.yml --connection=local |
参考:http://cloverrose.hateblo.jp/entry/2013/09/07/112153
yum updateやruby installなどをしているのでだいぶ待ちます。おせんべいでも食べて待ってましょう。
結果が返ってきたら.bashrcをリロードしてrbenvを有効にします。
1 2 3 4 5 6 7 8 |
# source ~/.bashrc # rbenv -v rbenv 0.4.0-129-g7e0e85b # ruby -v ruby 2.1.1p76 (2014-02-24 revision 45161) [x86_64-linux] |
Railsプロジェクトをunicornで動かす
unicorn起動を確かめるだけのブランクのプロジェクトをcloneしてbundle installする。
1 2 3 4 5 6 7 8 |
# mkdir /var/www # cd /var/www # git clone https://github.com/harada4atsushi/blank-rails-unicorn.git # cd blank-rails-unicorn # bundle install |
ここまで問題なくできたら一旦コンテナから脱出します。
1 2 |
# exit |
コンテナIDを調べてここまでの手動変更をコミットします。これがフリーズしたかってくらい長い。気長に待ちます。
1 2 3 4 5 6 |
$ sudo docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0b152830277e centos:centos6 "/bin/bash" About an hour ago Exited (-1) 32 minutes ago kickass_bartik $ sudo docker commit 0b152830277e harada4atsushi/blank-rails-base |
再度コンテナを起動して、iptableで5000番を許可させておきます(本番はちゃんと設定を見直して!)。
1 2 3 4 5 |
$ sudo docker run -i -p 5000:5000 -t harada4atsushi/blank-rails-base /bin/bash # vi /etc/sysconfig/iptables # service iptables restart |
unicornを起動してコンテナをデタッチします。ctrl + p, ctrl + qでデタッチ(コンテナを停止せずに脱出できる)
1 2 3 |
# cd /var/www/blank-rails-base # unicorn_rails -c config/unicorn.rb -E development -p 5000 -D |
では外部からサーバにアクセスしてみましょう。Railsのデフォルト画面が表示されれば成功。
http://your-host:5000/
最後に
ちょっと手作業に依存する部分が大きすぎるのとDockerのポータビリティっていうところがまるでいかせてない気がする。実践投入はもうちょい先になりそう。

原田 敦

最新記事 by 原田 敦 (全て見る)
- Rails Engineでブログ機能追加するgemを作る - 2015年3月15日
- WEBエンジニア一人だけでサービスを作りきる方法-夫婦のための自動ごはん予定お知らせサービス「GoHaaan」制作でやったこと - 2015年3月7日
- CentOS6でMariaDBのDynamic Columnsを試してみた - 2015年2月28日