1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DockerでRails6+MySQL環境を構築する

Posted at

Docker公式のRailsサンプルはRuby/Railsのバージョンが古いのとデータベースがPostgreSQLのため、最新のRails環境をMySQLで構築してみました。

環境

ローカル環境

  • WSL2(Ubuntu 16.04)
  • Docker 20.10.6

Docker内に構築したRails

  • Ruby 3.0.1
  • Rails 6.1.3.2

構築手順

基本的にはDocker公式のRailsサンプルにそって構築を行っています。

Dockerの定義ファイルの作成

ベースのイメージはruby:3.0.1-slim-busterを使いました。
alpineを使えばもっと容量は小さくなると思いますが、ライブラリなどを組み込んだ場合などに問題が起きるとイヤなので今回はbusterにしてみました。

Dockerfile
FROM ruby:3.0.1-slim-buster

ENV APP_PATH /myapp

RUN apt-get update -qq && apt-get install -y build-essential libxslt-dev libxml2-dev curl && \
    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 && \
    apt-get update -qq && apt-get install -y default-libmysqlclient-dev nodejs yarn

WORKDIR $APP_PATH
ADD Gemfile $APP_PATH
ADD Gemfile.lock $APP_PATH
RUN bundle install

COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000

CMD ["rails", "server", "-b", "0.0.0.0"]

Railsは構築時の最新版である6.1.3.2を使用しています。

Gemfile
source 'https://rubygems.org'

gem 'rails', '~> 6.1.3', '>= 6.1.3.2'

Gemfile.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はデータベースの部分をmysqlのものに置き換えています。
Railsの部分は公式と同じです。

docker-compose.yml
version: "3"

services:
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    depends_on:
      - db

  db:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: password
    ports:
      - '3306:3306'
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - db:/var/lib/mysql

volumes:
  db:

Railsアプリケーションの作成

各ファイルを作成したらrails newを行います。
--database以外のオプションは好みで変更しても大丈夫だと思います。

$ docker-compose run web rails new . --force --no-deps --database=mysql --skip-test --skip-turbolinks

作成されるとローカル側にRailsアプリケーションのファイルが作成されます。
ローカル側にRubyが入っていない場合は下記のメッセージが出る場合があるかもしれませんが、気にしなくて大丈夫です。

rbenv: version `ruby-3.0.1' is not installed

その後は公式サンプルに従ってパーミッションの変更、イメージの構築を行います。

$ sudo chown -R $USER:$USER .
$ docker-compose build

データベース作成

MySQLのイメージに接続できるようにconfig/database.ymlのpasswordとhostの値を変更します。

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

データベースの作成もここで行っておきます。

$ docker-compose run web rake db:create

コンテナ起動

これでコンテナを起動すればhttp://localhost:3000でRailsアプリケーションの初期画面が表示できると思います。:tada:

$ docker-compose up

rails.png

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?