Docker+Rails+PostgreSQLの環境構築


どうもこんにちは
何度目でしょうか、Docker+Railsの環境構築エントリは…笑
前回はMySQLとの組み合わせでしたが今回はPostgreSQLとの組み合わせでいきます、herokuの無料MySQLがクレジットカード登録しないと使えないからPostgreSQLという選択です

基本的にはこれ
[DockerでRails + MySQLアプリを立ち上げる手順メモ](http://qiita.com/TakashiOshikawa/items/8c4a177c0f838fa8cd3b "DockerでRails + MySQLアプリを立ち上げる手順メモ")
と同じような手順なんですがDB違うだけで少し詰まったりするので忘れないようここに書いておきます



<h1>使用するイメージ</h1>

pullってください
`takashioshikawa/ruby-native-2.2.4`
`mysql:latest`



<h1>PostgreSQLコンテナ立ち上げ</h1>

pos-conという名前のコンテナを立ち上げます

```
docker run --name pos-con -p 5432:5432 -d postgres
```

ポートは5432番



<h1>Railsコンテナ立ち上げ</h1>

```
docker run --rm -it -p 9000:80 --name rails-container --link pos-con:pos-con takashioshikawa/ruby-native-2.2.4
```

ローカルからRailsアプリを見る時のポートは9000を指定
--linkでPostgreSQLコンテナを指定しています



<h1>Railsコンテナ内でアプリ作成</h1>

Railsアプリを作成するディレクトリを作成

`mkdir /usr/src/rails-app`
`cd /usr/src/rails-app`

このコンテナ内にPostgreSQLが入っていないとRailsが立ち上がってくれないので入れておきます

```
wget http://yum.postgresql.org/9.6/redhat/rhel-6-x86_64/pgdg-redhat96-9.6-1.noarch.rpm

rpm -ivh pgdg-redhat96-9.6-1.noarch.rpm

yum install -y postgresql96-devel
```

PostgreSQL用のgemインストール
`gem install pg -- --with-pg-config=/usr/pgsql-9.6/bin/pg_config`


Gemfile作成
`bundle init`



Gemfile編集

```Gemfile:Gemfile
source "https://rubygems.org"
gem "rails", "4.2.5"
```


bundleインストール
`bundle install`


Railsアプリ作成
`bundle exec rails new rails-test -d postgresql`

`cd rails-test`



Gemfile編集
`vim Gemfile`

```
#ここがコメントアウトされてるので外す その他は最初と同じ
#gem 'therubyracer', platforms: :ruby

gem 'therubyracer', platforms: :ruby
```



database.yml編集
`vim config/database.yml`

```database.yml
development:
  <<: *default
  database: test-rails_development
  host: pos-con
  username: postgres
  password:

test:
  <<: *default
  database: test-rails_test
  host: pos-con
  username: postgres
  password:
```

※usernameやpasswordはデフォルトのままなので本番用は変更しておきましょう


bundleインストール
`bundle install`


DB作成
`bundle exec rake db:create`


必要なファイル生成
`bundle exec rails g scaffold User name:string`

DBマイグレート
`bundle exec rake db:migrate`

database.ymlでPostgreSQLを指定したのでpos-conの中にデータベースが作成されているはずです

確認してみましょう

Railsコンテナのコンソールはそのままにしていおて、別タブなどで

`docker exec -it pos-con psql -U postgres rails-test_development`
を実行してみましょう

```
docker exec -it pos-con psql -U postgres rails-test_development
psql (9.5.0)
Type "help" for help.

rails-test_development=#
```
PostgreSQLコンテナの中に入れました

`\d`でテーブル一覧を確認すると

```
rails-test_development=# \d
                List of relations
 Schema |       Name        |   Type   |  Owner
--------+-------------------+----------+----------
 public | schema_migrations | table    | postgres
 public | users             | table    | postgres
 public | users_id_seq      | sequence | postgres
```

scaffoldで生成したusersテーブルが確認出来ます


Rails実行
`bundle exec rails s -b 0.0.0.0 -p 80`



<h1>ブラウザで確認</h1>

現在dockerのrailsアプリが立ち上がっていると思うのでMacのChromeから見てみましょう
アクセスするURLは
`http://docker-machineのIP:rails-containerのポート`
docker-machineのIPを確認したい場合は
`docker-machine ip VM名`
で確認できる


僕の場合
http://192.168.99.100:9000
だった


![スクリーンショット 2016-01-24 18.17.43.png](https://qiita-image-store.s3.amazonaws.com/0/36871/a7c902d5-9a61-4db7-4844-cbe6045f3a40.png "スクリーンショット 2016-01-24 18.17.43.png")

Scaffoldで作成したUserにアクセスしてみる
`http://192.168.99.100:9000/users`

![スクリーンショット 2016-01-24 18.19.18.png](https://qiita-image-store.s3.amazonaws.com/0/36871/95bfa45e-5cb0-861d-8ac0-7e67fd427c05.png "スクリーンショット 2016-01-24 18.19.18.png")

※ユーザは追加しました


本当にpos-conにデータが入っているのか確認しましょう

```
rails-test_development=# SELECT * FROM users;
 id |  name   |         created_at         |         updated_at
----+---------+----------------------------+----------------------------
  1 | takashi | 2016-01-24 09:14:03.133892 | 2016-01-24 09:14:03.133892
(1 row)

rails-test_development=#
```

入っていますね



<h1>所感</h1>
データベースが違うのでdatabase.ymlをどう書き直すかだけがポイントです
hostをコンテナ名で指定しているのが面白いですね

以上です



<h1>参考</h1>
[PostgreSQLとMySQLで、僕がよく使うシステムコマンドのメモ](http://qiita.com/tamano/items/be43de7bb733ad38362c
 "PostgreSQLとMySQLで、僕がよく使うシステムコマンドのメモ")
[インストールからRails-PostgreSQL環境を整える](http://qiita.com/torinitorotorue/items/9952d91c4a7087b23481 "インストールからRails-PostgreSQL環境を整える")