Rails
docker

railsアプリをDocker化してみる

More than 3 years have passed since last update.

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化ということはそんなに難しくないと思います。