カテゴリー
Uncategorized

[css/js]bundling-railsを使用したRails7プロジェクトをDockerCompose化する

[css/js]bundling-railsの使用を前提としているため、開発環境のサーバー立ち上げは ./bin/dev を使用します。今回の環境の構成は下記の通りです。

Rails 7.0.3.3 / Ruby 3.0.0 / Bundler 2.3.9 / Nodejs 12 / MySQL 8.0

FROM ruby:3.0.0-buster

# for nodejs
RUN curl -fsSL https://deb.nodesource.com/setup_12.x | bash -

# for yarn
RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add -
RUN 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 nodejs yarn vim zlib1g-dev liblzma-dev patch

RUN node -v
RUN yarn -v

RUN gem uninstall bundler
RUN gem install bundler -v 2.3.9

RUN mkdir /tmp/app-init
WORKDIR /tmp/app-init
ADD Gemfile .
ADD Gemfile.lock .
RUN bundle install

RUN mkdir /app
WORKDIR /app
services:
  mysql:
    image: mysql:8.0
    restart: always
    cap_add:
      - SYS_NICE
    environment:
      TZ: Asia/Tokyo
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - ./mysql-confd:/etc/mysql/conf.d
  rails:
    build: .
    tty: true
    command: >
      sh -c "
        rails db:create && rails db:migrate &&
        rm -f tmp/pids/server.pid &&
        yarn install
        ./bin/dev
      "
    environment:
      TZ: Asia/Tokyo
      NODE_ENV: development
      RAILS_ENV: development
    volumes:
      - .:/app
    ports:
      - "3000:3000"
    depends_on:
      - mysql
[mysqld]
default_authentication_plugin=mysql_native_password
web: bin/rails server -p 3000 -b 0.0.0.0
js: yarn build --watch
css: yarn build:css --watch
default: &default
  adapter: mysql2
  encoding: utf8mb4
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: root
  password: password
  host: mysql

Dockerfileの内容

ruby-3.0.0の公式イメージをベースとして、nodejs12、yarn、その他サーバーライブラリのインストールを行い、bundle installを実行してイメージ化しておきます。

こうするとbundle installをキャッシュしてくれるので起動が早いはずです。

docker-compose.ymlの内容

mysql8.0コンテナと、railsコンテナの2つを実行します。

mysqlコンテナは、mysql-confd/default_authentication.cnf に設置した設定ファイルの入ったディレクトリをコンテナ内にマウントします。設定ファイルは、パスワード認証を許可する設定が書かれています。

railsコンテナは、db:create db:migrate を実行したのち、./bin/dev を実行します。このとき、tty: true オプションをつけなれけばならないようです。

Procfile.devの内容

Dockerコンテナの外からHTTPアクセスできるようにする必要があります。Railsサーバーの起動オプションに -b 0.0.0.0 を追加することで、127.0.0.1/localhost以外からのアクセスを許可します。

config/database.yml

コンテナtoコンテナのホスト名はdocker-compose.ymlで定義した名前でアクセスできるようになります。hostmysqlを指定します。

コンテナの起動

docker-compose build
docker-compose up

Gemfileの追加があったら、buildとupをやり直します。(startではボリュームが作り直されない)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です