16
19

More than 5 years have passed since last update.

Docker+Rails+PostgreSQLの環境構築

Posted at

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

基本的にはこれ
DockerでRails + MySQLアプリを立ち上げる手順メモ
と同じような手順なんですがDB違うだけで少し詰まったりするので忘れないようここに書いておきます

使用するイメージ

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

PostgreSQLコンテナ立ち上げ

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

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

ポートは5432番

Railsコンテナ立ち上げ

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コンテナを指定しています

Railsコンテナ内でアプリ作成

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
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

ブラウザで確認

現在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

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

スクリーンショット 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=#

入っていますね

所感

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

以上です

参考

PostgreSQLとMySQLで、僕がよく使うシステムコマンドのメモ
インストールからRails-PostgreSQL環境を整える

16
19
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
16
19