LoginSignup
7
9

More than 5 years have passed since last update.

Docker & Rails & Mysql 環境構築

Last updated at Posted at 2018-07-03

はじめに

Rails環境をdockerで構築するための記事はすでにたくさんありますが、自分で実際に手を動かしてメモとして残すと定着度が高いので、他の記事と内容はほとんど同じですが書きたいと思います。

前提

Dockerはインストールしておいてください。
https://docs.docker.com/docker-for-mac/install/

1. Railsプロジェクト用のディレクトリを作成

$ mkdir ~/myapp
$ cd myapp

DockerfileでRUN mkdir /myappを記述してrails newできると思ったら、Building webから進まなくエラーになるので、あらかじめディレクトリは作成する流れにします。
参考:https://github.com/moby/moby/issues/32543

$ docker-compose run web rails new . --force --database=mysql
Building web
Traceback (most recent call last):
  File "<string>", line 3, in <module>
  File "compose/cli/main.py", line 65, in main
  File "compose/cli/main.py", line 117, in perform_command
  File "compose/cli/main.py", line 712, in run

.
.
.

OSError: [Errno 2] No such file or directory: `/Users/user/Library/Caches/Google/Chrome/Default/Cache/f_0004c2`
docker-compose returned -1

2. Dockerfile作成

Dockerfile
FROM ruby:2.5
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
WORKDIR /tmp
COPY Gemfile Gemfile
COPY Gemfile.lock Gemfile.lock
RUN bundle install
ENV APP_HOME /myapp
RUN mkdir -p $APP_HOME
COPY . /myapp

3. Gemfile作成

Gemfile
source 'https://rubygems.org'
gem 'rails', '5.1.4'

4. Gemfile.lock作成

$ touch Gemfile.lock

touch: 存在しないファイルを中身のない状態で新規作成

5. docker-compose.yml作成

docker-compose.yml
version: '3'
services:
  db:
    image: mysql:5.7
    environment:
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: password
    ports:
      - '3316:3306'
    volumes:
      - ./db/mysql/volumes:/var/lib/mysql


  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

6. rails new でDockerコンテナにプロジェクト作成

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

7. 再ビルド

rails newでGemfileにgemが追加されたので再度ビルドが必要。

$ docker-compose build

8. database.yml設定

config/database.yml
default: &default
  adapter: mysql2
  encoding: utf8
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  host: db

docker-compose.ymlのMYSQL_ROOT_PASSWORDと同じパスワードにする。また、host名はdocker-composeで定義したサービス名(db)にする。

9. サービス起動

$ docker-compose up

-d を付けるとバックグランドで実行されます。

【補足】
run,build,upなどの使い分け

コマンド 内容
docker-compose run サービスを起動
docker-compose build サービスのimageをビルド
docker-compose up サービスのimageをビルド&起動

10. DB作成

$ docker-compose run web rake db:create

11. アクセス

これが表示されたら完了!
スクリーンショット 2018-07-03 14.48.15.png

【補足】開発コマンド

ローカル開発 DockerCompose
rails g model User docker-compose run web rails g model User
rake db:migrate docker-compose run web rake db:migrate

おわりに

Dockerのおかげで新規プロジェクトの環境構築が5分もかからずにできてしまうので、Docker様様ですね。次はproduction環境用の設定を記載できればいいなと思ってます。

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