Help us understand the problem. What is going on with this article?

railsアプリをDocker化してみる

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした