LoginSignup
2
1

More than 1 year has passed since last update.

Rails×MySQL dockerで開発環境を構築する

Last updated at Posted at 2023-01-29

今回指定したバージョン

  • Rails version 6.1.7.1
  • Ruby version 2.7.7
  • MySQLは最新version
  • nodejsは互換性のある version16

条件

  • docker-compose upでrails serverを起動できるようにすること
  • ホストのファイルシステムとコンテナのファイルシステムを同期させること

Dockerfile

  • まずは、apt-getでyarnを入れたもの
# Node.js & Yarn
FROM node:16-buster-slim
RUN yarn install

FROM ruby:2.7.7
RUN apt-get update
RUN apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs \
    default-mysql-client \
    yarn
    default-mysql-client 

WORKDIR /rails-docker-mysql
COPY Gemfile Gemfile.lock /rails-docker-mysql/
  •  そしてこちらがyarnをマルチステージビルドで別途入れたもの
# Node.js&yarn
FROM node:16 as node
FROM ruby:2.7.7

COPY --from=node /opt/yarn-* /opt/yarn
COPY --from=node /usr/local/bin/node /usr/local/bin/
RUN ln -fs /opt/yarn/bin/yarn /usr/local/bin/yarn \
  && ln -fs /opt/yarn/bin/yarnpkg /usr/local/bin/yarnpkg

# Rails
RUN apt-get update
RUN apt-get install -y \
    build-essential \
    default-mysql-client

WORKDIR /rails-docker-mysql
COPY Gemfile Gemfile.lock /rails-docker-mysql/
RUN bundle install
  • yarnをapt-getで入れるとapt-getのバージョンに引っ張られるといった指摘を受けましたのでシンボリックリンクを作成し修正しました。
     ※シンボリックリンクとは、オペレーティングシステム(OS)のファイルシステムの機能の一つで、特定のファイルやディレクトリを指し示す別のファイルを作成し、それを通じて本体を参照できるようにする仕組みのことです。
  • docker compose run --rm web bin/setupを実行することでyarn installされるようにしました

docker-compose.yml

version: "3"

volumes:
  data:

services:
  web:
    build: .
    command: /bin/sh -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"

    ports:
      - "3000:3000"
    volumes:
      - ".:/rails-docker-mysql"
    environment:
      - "DATABASE_PASSWORD=password"
    tty: true
    stdin_open: true
    depends_on:
      - db

  db:
    image: mysql
    volumes:
      - "data:/var/lib/mysql"
    environment:
      MYSQL_ROOT_PASSWORD: password
    ports:
      - "3306:3306"
  • docker-compose upでrailsプロセスとdbが起動し、http://localhost:3000 でアクセスできるようにしました
  • 起動2回目で
A server is already running. Check /rails-docker-mysql/tmp/pids/server.pid.

とエラーになってしまう事があるのでcommandに

/bin/sh -c "rm -f tmp/pids/server.pid 

と記述しwebサーバー起動時にpidファイルのキャッシュを削除されるようにしました

参考

udemyの教材はおすすめです!

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