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?

Docker Rails 7 x Mysql

Last updated at Posted at 2023-04-09

前提

備忘録
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で統一したい派です。

リンク

過去に投稿した記事

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?