LoginSignup
1
2

More than 5 years have passed since last update.

[備忘]公式quick startそのまんまレポート mac+docker+rails+postgres

Last updated at Posted at 2017-09-05

引用:https://docs.docker.com/compose/rails/#define-the-project

dockerでrails+postgresの環境を作る。

はじめに

docker for macをインストール
https://docs.docker.com/compose/install/
https://docs.docker.com/docker-for-mac/install/

それから、以下4ファイルを用意する必要がある。

  • Dockerfile
  • Gemfile
  • Gemfile.lock
  • docker-compose.yml

*今回は、workspace/プロジェクト名/project/以下に4つのファイルをおいた。

Dockerfileを作る

FROM ruby:2.3.3
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

Gemfileを作る

このファイルはrailsをロードするためだけのGemfileです。
rails newのタイミングで上書きされます。

source 'https://rubygems.org'
gem 'rails', '5.0.0.1'

空のGemfile.lockを作る

まっさらなやつを用意しましょう。

docker-compose.ymlを作る

docker-compose.yml
version: '3'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

この4つのファイルを使ってrails new!

以下のコマンドでrails newしましょう。

$ docker-compose run web rails new . --force --database=postgresql

以下のようなエラーが出た時は・・・

ERROR: Couldn't connect to Docker daemon. You might need to start Docker for Mac.

これはdockerを起動していないだけ。
dockerを起動してrunningしていることを確認してからコマンドを打ちましょう:hugging:

すると、ずらずらーと環境構築してくれます。

新しいGemfileができているので、イメージを再構築

docker-compose build

そしたらずらずらgemをインストールしてくれる。

config/database.ymlをいじる。

db接続の対象を変えます。
この状態でアプリは起動可能だが、db接続がlocalhostに向いている。なので用意するpostgresのdbに向くようにする。

config/database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password:
  pool: 5

development:
  <<: *default
  database: myapp_development


test:
  <<: *default
  database: myapp_test

起動できることを確認して、db:createする。

起動できることを確認しましょう

docker-compose up

そしてdocker-compose upしたterminalとは別のterminalを開き、db作成

docker-compose run web rake db:create

期待に胸膨らませ「http://localhost:3000」

やったー:hugging:
彼らを見るとなぜか幸せな気分になる。

彼らを休ませてあげよう

docker-compose upしたタブでcontrol+cで、お休みします。

再起動。

docker-compose up

この時以下のようなエラーが出るときがあるので、

web_1 | A server is already
running. Check /myapp/tmp/pids/server.pid.

そのときは、tmp/pids/server.pidファイルを削除して、改めて、docker-compose upすればok。

rails cとかしたいとき、

以下のコマンドでssh接続

docker exec -it project_web_1 bash

project_web_1はコンテナ名が入ります。

binding.pryとかしたいとき

pry系のgemを入れるだけでは、pryを使えません。
pry系のgemを入れてから、以下の記事を参照。

quick startにあった以下二つは省略

・Restart the application

作業再開のときとか、dbを作り直したいときとかに参照。

・Rebuild the application

docker-compose.ymlを変更したときにrebuildが必要になる時がある。

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