前提
備忘録
Dockerの知識
M1 Mac
手順
1 bundleを初期化 railsプロジェクトを初期化 ↓
# Railsを作成する際にMysqlのDB設定で起動すること
docker-compose run app rails new . --force --no-deps --database=mysql
2 config/databaseでDockerのmysqlに接続するように設定
3 rails db:createでDBを作成
4 接続確認
Dockerfile
FROM ruby:3.2.2
WORKDIR /myapp
COPY Gemfile* /myapp/
# build-essentialはbuildに必要な機能を一式提供 ex C Compiler, g++
# RubyはCで書かれている rbenvが使用するのに必要らしい
# dockerを使う場合rbenvは不要 (なくてもRubyは動くのでrbenvを使わないのであれば不要)
# mariadb-clientもmysqlコンテナから確認するなら不要 (rails dbconsoleを使わない)
RUN apt -qq update && apt install -y build-essential mariadb-client
RUN gem update --system && \
bundle install
COPY . /myapp
CMD ["rails", "server", "-b", "0.0.0.0"]
docker-compose.yml
services:
app:
build:
context: .
dockerfile: ./Dockerfile
depends_on:
- db
tty: true
volumes:
- ./:/myapp
ports:
- "3000:3000"
environment:
- TZ=Asia/Tokyo
db:
image: mysql:8.0.31
platform: linux/amd64
command: --default-authentication-plugin=mysql_native_password
restart: always
volumes:
- ./db/data:/var/lib/mysql
- ./db/conf.d:/etc/mysql/conf.d
ports:
- 3306:3306
environment:
TZ: Asia/Tokyo
MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=test
MYSQL_USER=test
MYSQL_PASSWORD=test
RailsをMysqlコンテナに接続する
config/database.yml
# Dockerで立ち上げたMySQLコンテナの内容に書き換える
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:root
host: db
終わりに
/tmp/pids/server.pid
を削除する処理は書いてないです。 rails7環境だとコンテナ閉じたらちゃんと消してくれます。
もし残ってたら手動で消してもいいし、CMDに追加したりENTRYPOINTを利用しても良いです。
これ系の記事は 下記の構成が多いです。
1: ENTRYPOINTで指定したshellで削除処理
2: CMDにrailsの起動コマンド
3: ymlのcommandの削除処理とrailsの起動コマンド
3で1と2でやっている内容と同じことをしているので1と2は不要です。
2に至っては、3のcommandが指定されている時点でDockerはCMDを無視します。
3のみではなく1,2も書く理由は下記かも?
CMD[] # なくても動くが、一応デフォルトの指定をしておく
ENTRYPOINT # 絶対に実行してほしい内容を記述
command # 保険で上記2つをこちらでも書いておく
シンプルにしたいので、1,2でやるか3で統一したい派です。