0
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?

More than 1 year has passed since last update.

Docker composeを使用してRails + MySQLを起動しよう!!

Last updated at Posted at 2023-04-27

はじめに

今回初めてDockerを触ってみて色々と苦戦したので、備忘録として残しておきます。
解釈違う部分もあるかと思いますので、ご指摘よろしくお願いいたします。
また、同じ初学者に少しでもお力になれればと思います。
前提条件として今回使用するものは以下になります!
またDockerはインストールしているものとし、記述方法も最新版に準拠しますのでよろしくお願いします。

  • M1mac
  • Ruby 3.1.2
  • Rails 7
  • MySQL 8.0

ファイルの作成

まずは必要なファイルの準備を行います。
今回のファイル構成はこのようにします。

ディレクトリ
myapp
 |-- Dockerfile
 |-- compose.yml
 |-- Gemfile
 |-- Gemfile.lock

これらファイルを使いイメージ作成、コンテナの作成と進んでいきます。

各ファイルの中身

Dockerfile

Dockerfile
FROM ruby:3.1.2
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs vim
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp

まずDockerfileから見ていきます。
このファイルでは下記を使いそれぞれイメージを作成していきます。
イメージとはコンテナを作る上でのテンプレートのようなものでイメージを元にコンテナを作成します。

  • FROM: 使用するイメージとバージョン
  • RUN: コマンドの実行
  • WORKDIR: 操作ディレクトリの設定
  • ADD: 記述されたファイルを追加する

細かい説明としては下記です。
1.apt-get updateとapt-get installはそのままの意味で今回コンテナ内で使用する必要のあるgem等をアップデートしたのちにインストールするという意味です。
2.-qqオプションと-yオプションは-qqでエラー以外の何も表示しない設定で、-yはインストールする際にyesかnoを問われるものに対して全て自動でyesを返すというオプションです。

compose.yml

compose.yml
services:
  db:
    image: mysql:8.0
    command: --default-authentication-plugin=mysql_native_password
    volumes:
      - ./db/mysql_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
  web:
    build: .
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    volumes:
      - .:/myapp
    ports:
      - "3000:3000"
    tty: true
    stdin_open: true
    depends_on:
      - db

compose.ymlでは複数コンテナを同時に作成できるもので今回はMySQLのデータサーバーとRails7のサーバーが必要になるのでこちらで作成します!
dbと記述してインデント下がっている部分がデータサーバーに対する記述でweb移行がRails7の為のサーバーです。
主な説明としては下記になります。

  • services:コンテナのこと。
  • image:今回使用するイメージの記述
  • command:実行する処理
  • volumes:コンテナに接続する。
  • environment:環境変数
  • tty:擬似端末の配置
  • depends_on:コンテナ間の依存関係

注意
上記2つのファイルではインデントで処理がどこに属しているか判断しているのでインデントは揃えましょう!!!

Gemfile

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

ここでは今回使用するRailsのバージョンを記載しておきます!後ほど上書きされます。

コマンドの実行

それではコマンドの実行を行います!私はiTermを使用しているのでこちらに記述していきます!

1

docker compose run web rails new . --force --database=mysql

このコマンドでRailsの元が作成され、Gemfileも上書きされます。
この後、エラーでbundle installしてくださいとエラー出ます、、、もっといい記述方法あるかと思うのですが今回はインストールして進めていきます。

2

docker compose run web bash

このコマンドでDocker内でコマンド使えるのでこの後にbundle installの実施。その後、exitで抜けてください。

3

docker compose build

そしてイメージをbuildします。

4

database.ymlのpasswordのところをpasswordに変え、hostのところをdbに変更。

ここで1度ファイルに戻っていただきconfig配下のdatabase.ymlにて上記部分を変更いたします。

5

docker compose run web rails db:create

そして再度コマンドで上記打っていただき、db作成します。

6

docker compose up

最後にこのコードで完成です!localhost:3000にアクセスするとRailsの初期画面が出るかと思います!

最後に

長くなってしまいましたが私の環境構築以上になります。
bundle installしなくてはいけない部分があるので改善できしだい再編集してあげたいと思います、、、
まだまだ初学者なため至らない点多いかと思いますが、同じ境遇の方のお力になれればと思います!
最後まで読んでいただきありがとうございました!

0
0
1

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
0
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?