dockerを使っていきたいけどなかなか難しい。
だけど、RailsアプリだけをDocker化してデータベースはいままで通りはそんなに難しくない。
イメージの作成
railsアプリケーションのプロジェクトルートにDockerfileを作成します。
FROM rails:onbuild
CMD ["rails", "server", "-b", "0.0.0.0"]
Dockerfileを作成したらdocker build
でイメージを作成します。
名前はmy-rails-appにしておきます。
$ docker build -t my-rails-app .
FORMに記述したrails:onbuildのDockefileはここにあります。
ONBUILDすばらしい。
データベースへの接続
データベースへの接続は環境変数DATABASE_URLを利用すればよいです。
DATABSE_URLを設定しておけばconfig/database.yml
の設定は無視して接続できます。
Railsの開発をしているのであればローカルでデータベースが動いているはずなので、ここに接続できるようにDATABASE_URLをつくればよいです。
アダプタ://ユーザ名@IPアドレス/データベース名
という感じです。
boot2dockerを使用しているMacユーザでbrewでインストールしたPostgreSQLを使用していれば、ベースとなるURLを作成できます。
echo postgres://${USER}@
boot2docker config | grep HostIP | cut -d'"' -f 2
/
あとは接続するDB名を追加してください。
brewでインストールいたpostgresは外部から接続できないので、使っているバージョンにもよりますが、
/usr/local/var/postgres9.4/postgresql.conf
に
listen_addresses = '*'
を追加したり
/usr/local/var/postgres9.4/pg_hba.conf
に
host all all 192.168.xx.1/24 trust
のようなものを追加することになります。
IPアドレスはboot2docker config
で確認します。
変更したら設定ファイルの再読込をしましょう。
$ pg_ctl -D /usr/local/var/postgres9.4/ reload
Railsアプリの起動
作成したイメージを起動します。DATABASE_URLを用意できていれば
これをつかってdocker run
をします。
以下のような感じになります。
$ docker run --rm -i -t -p 3000:3000 -e DATABASE_URL="postgres://${USER}@192.xx.xx.xx/hoge_development" my-rails-app
railsアプリが起動したらboot2docker config | grep LowerIP
が返すIPアドレス
スのポート3000にアクセスしてみましょう。
すべてをDocker化するのは難しいですが、DBはそのままで、アプリケーションだけdocker化ということはそんなに難しくないと思います。