44
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

railsアプリをDocker化してみる

Posted at

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

44
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
43

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?