公式ドキュメント( https://docs.docker.com/compose/rails/ ) を以下のコンポーネントでやってみた。
- ruby2.6.5
- Rails6系
- MySQL5.7
前提
MacにDocker Desktopがインストールされていること。
適宜、プロジェクト用のディレクトリを用意する。
Dockerfile
Dockerfile
FROM ruby:2.6.5
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs yarn
RUN mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp
# Add a script to be executed every time the container starts.
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
# Start the main process.
CMD ["rails", "server", "-b", "0.0.0.0"]
Gemfile
source 'https://rubygems.org'
gem 'rails', '~>6'
Gilefile.lock
touch Gemfile.lock
entrypoint.sh
entrypoint.sh
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /myapp/tmp/pids/server.pid
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
docker-compose.yml
docker-compose.yml
version: '3'
services:
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: root
ports:
- "3306:3306"
volumes:
- ./docker/db/data:/var/lib/mysql
- ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
Railsプロジェクトの作成
# 薄いRailsプロジェクト
docker-compose run web rails new . --force –-database=mysql --skip-action-mailer –-skip-action-cable –-skip-sprockets --skip-test --skip-turbolinks -–skip-bundle
build
docker-compose build
database.ymlの修正
config/database.yml
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password # docker-compose.yml の MYSQL_ROOT_PASSWORD
host: db
コンテナ再起動
docker-compose down
docker-compose up -d
Webpacker
docker-compose run web bundle exec rails webpacker:install
DB作成
docker-compose run web bundle exec rails db:create