はじめに
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作成
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作成
source 'https://rubygems.org'
gem 'rails', '5.1.4'
4. Gemfile.lock作成
$ touch Gemfile.lock
touch: 存在しないファイルを中身のない状態で新規作成
5. 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設定
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. アクセス
【補足】開発コマンド
ローカル開発 | 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環境用の設定を記載できればいいなと思ってます。