ishikawa_pro's memorandum

若手webエンジニアの備忘録です.

Swift Node.js Docker AWS etc...色々やります。

Rails コンテナ x PostgreSQL コンテナ

こんにちは。
126日ぶりに更新します。笑
学校の卒業制作がピークを迎えていた関係で全然遊びでコード書いたり出来てませんでした。働きながら技術ブログとかを書かれている方々はすごいですね。いつも尊敬しながら読んでます。先月の上旬に私の卒業制作はほぼ終わりを迎え、1ヶ月ほど体を休めたのでまた色々と遊びでコードを書いて行きたいと思います。

過去の記事を遡ると、Dockerを使ってPostgreSQLコンテナを作りデータを永続化させたり、Railsのコンテナを作成したりしました。
ishikawa-pro.hatenablog.com
ishikawa-pro.hatenablog.com
今回は、RailsコンテナからPostgreSQLコンテナへ接続してデータベースとして利用する部分を書きたいと思います。
まずは前々回の記事を参考にrailsのプロジェクトを作成します。

$ docker run -it --rm -v "rails-appのパス":/usr/src/ rails-app-generater rails new my_project -d postgresql

今回は、PostgreSQLをデータベースに使うので、-dオプションでpostgresqlを指定する。これでデータベースをSQLiteからPostgreSQLへ変更できます。後は以前作ったDockerfileからDocker buildして、railsコンテナを作成し下のコマンドを実行してコンテナを立ち上げます。

$ docker run -it -v "プロジェクトのパス":/usr/src/my_project -p 3000:3000 --name my_project rails-app /bin/bash

次に、PostgreSQLコンテナを立ち上げます。コンテナの作成は過去の記事を参考にしてください。

$ docker run -it --volumes-from postgres-data -p 5432:5432 -d --name postgres9.3 postgres9.3

これで、2つのコンテナがたちあがりました。(postgres用のVolume コンテナを入れれば3つ)
f:id:ishikawa_pro:20170108001318p:plain
では、railsのプロジェクトファイルのconfig/database.ymlに接続先の情報を記述してPostgreSQL につないでみましょう。

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  #ここから下を追記
  username: "ユーザー名"
  password: "パスワード"
  host: "PostgreSQLコンテナのipアドレス(コンテナに入って調べる)"

これで設定は終わりです。次に、Railsコンテナ内に入り、rake db:createを行ってデータベースを作成します。

$ rake db:create

これでdatabase.ymlの設定を間違えていなければ、うまくデータベースができており、railsのアプリを立ち上げればうまくアクセスできるはずです。

$ rails s -b 0.0.0.0

上記のコマンドでサーバーを立ち上げ、http://localhost:3000/にアクセスしてみましょう。おなじみの画面が表示されるはずです。以前は、192.168.99.100:3000にアクセスしていたのですが、ホストOSをアップグレードしたり、Docker for Macのバージョンを変えたりした関係で変わってしまったみたい。本当はDocker Composeを使って二つのコンテナを管理するところまで書く予定でしたが長くなったので今日はここら辺で区切ります。

次回はDocker Composeのお話。