LoginSignup
1
0

More than 1 year has passed since last update.

Rails7 x Mysql8 Dockerで環境構築をする

Last updated at Posted at 2022-08-17

はじめに

備忘録です。
特に説明はしません。 全てコピペして最後に載せたコマンドを打ってもらえると

参考にPostgreSQLのパターンがある
--apiを付け加えるとapiモードで開発できる

必要ファイル

Dockerfile
docker-compose.yml
Gemfile
Gemfile.lock
entrypoint.sh

Dockerfile

FROM ruby:3.1
ARG RUBYGEMS_VERSION=3.3.20

WORKDIR /myapp
COPY Gemfile* /myapp/

RUN gem update --system ${RUBYGEMS_VERSION} && \
    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

version: '3.8'

services:

  db:
    image: mysql:8.0.29
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - ./tmp/db:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: root
    ports:
      - 3306:3306

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

Gemfile

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

Gemfile.lock

# 空

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

コマンド順序

# Imageをbuildする
$ docker compose build

# コンテナ内で railsアプリを作成する
# apiモードで作成したい場合は --apiをつける
$ docker compose run --rm web rails new . -f -B -d mysql --skip-test --skip-turbolinks
# config/database.ymlを編集してコンテナのmysqlに接続する
password: root
host: db
# Gemfileが更新されたので再度Imageをbuildする
$ docker compose build

# コンテナを起動させてDBを作成
$ docker compose run --rm web rails db:create

# 最後にwebとdbのサービスを立ち上げる
$ docker compose up -d

tips

# 開発時はコンテナ内部に入っておくと便利
$ docker compose exec web /bin/bash

注意点

注意点

# bundlerのversonの問題でエラーが発生する
# v2.3.8 v2.3.7はx

# versionを固定する
# 環境変数を使わない場合失敗する(理由は不明)
# エラーが出た際は下記を実装してみる
ENV BUNDLER_VERSION=2.3.3
RUN gem install bundler -v ${BUNDLER_VERSION} && \
    bundle install

注意点2
docker-hubにログインしていること
既に動いているコンテナとportが被っていないことを確認する

参考

この記事のベース

Rail7 x Postgresql 検証済み成功 bundlerのversion指定必要

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