1
0

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 1 year has passed since last update.

Rails6をDocker+MySQLで環境構築

Last updated at Posted at 2021-11-22

はじめに

この記事では11/22現在、DockerでRuby on Railsの環境を構築する方向けの内容です。完成したものはGithubにてソースコードを公開しています。

またDockerをインストールする手順は、

上の動画に従うことで構築することができると思います。

以下、ソースコードの多くは他の方のものを使っております。予めご了承ください。(参考文献は載せてあります。)

各種バージョン

下記のバージョンで作業を行いました。
・OS Windows11
・Ruby 2.7
・Ruby on Rails 6.1.4
・MySQL 8.0
・docker 20.10.10
・docker-compose 2.1.1
・Visual Studio Code 1.62.3
・Ubuntu 20.04 LTS

手順

  1. Docker Engineの設定を変更
  2. ファイルの作成
  3. アプリを作成する
  4. イメージをビルドする
  5. データベースを接続する
  6. コンテナを起動、停止する

1. Docker Engineの設定を変更

今回ここの設定が一番キーになると思います。
まずDocker Desktopを開いてください。右上に歯車マークをクリックし、Docker Engineを選択すると、コードを変更できます。

{
  "debug": false,
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "insecure-registries": [
    "docker.io"
  ],
  "registry-mirrors": []
}

上のコードを入力したら、右下にあるApply & Restartをクリックして変更を適応します。

2. ファイルの作成

今回追加するファイルは5つあります。ディレクトリに追加してください。
・Dockerfile
・docker-compose.yml
・Gemfile
・Gemfie.lock
・entrypoint.sh

それぞれの中身を以下のように変更してください。

Dockerfile

dockerfile
FROM ruby:2.7
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 \
    && apt-get update -qq \
    && apt-get install -y nodejs yarn \
    && mkdir /myapp
WORKDIR /myapp
COPY Gemfile /myapp/Gemfile
COPY Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
COPY . /myapp

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"]

docker-compose.yml

docker-compose.yml
version: '3'
services:
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: password
    ports:
      - '3306:3306'
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - mysql-data:/var/lib/mysql
  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
    stdin_open: true
    tty: true
volumes:
  mysql-data:
    driver: local

※もしMacをお使いの方で、M1チップを搭載の方は
db:
platform: linux/x86_64  <-こちらを追記してください
image: mysql:8.0

M1チップに対応のために必要になります。

Gemfile

Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 6.1.4'

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 "$@"

以上でファイルの作成は終了です。
もしターミナルを起動していたら、一度ターミナルを落としておいたほうがいいかもしれません。

3. アプリを作成する

5つのファイルが作成できたら、ターミナルを起動しましょう。下記のコードを入力して、アプリを作成します。

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

4. イメージをビルドする

上記の工程が完了しましたら、Gemfile が更新されているはずです。よって、イメージをビルドする必要があります。

$ docker-compose build

5. データベースと接続する

データベースと接続するためにconfig/database.yml を編集します。

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

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

production:
  <<: *default
  database: myapp_production
  username: myapp
  password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>

続いて、データベースを作成します。ターミナルで以下のコードを実行してください。

$ docker-compose run web rake db:create

6. コンテナ起動、停止する

ターミナルにて、下記のコードを実行します。

$ docker-compose up

ブラウザを開いて
localhost:3000
にアクセスすると、下の画面と同じようになるはずです。
スクリーンショット (20).png

これで、Rails6をDocker+MySQLで環境構築が完了しました!!お疲れさまでした!!(長かったと思います..)
終了するときは,
Ctrl + C
もしくは、ターミナルにて下記のコードを実行します。

$ docker-compose down

そうすると、ダウンすることができます。

最後に

もし実行できない方がいらっしゃいましたら、完成したものはGithubにてソースコードを公開しておりますので、お手数おかけしますが、確認していただけると幸いです。

何度かDockerで環境構築しましたが、なかなかうまくいかず苦戦しました。そこで原因を洗い出し、Docker Engineの設定が足りないことに気づきました。(必ず同じ箇所でエラーが起きて、やっと気づきました。)

もし参考にしていただけると非常にうれしいです。手順のミスやタイピングミスなどありましたら、ご連絡ください。ここまでご覧いただき、誠にありがとうございました。今回Qiitaに初めて投稿をさせていだたき、記事を書く大変さを認識しました。

参考文献

https://qiita.com/nsy_13/items/9fbc929f173984c30b5d
https://zenn.dev/hiszuk/articles/cb30071df19a1b4f8365

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?