はじめに
今回初めてDockerを触ってみて色々と苦戦したので、備忘録として残しておきます。
解釈違う部分もあるかと思いますので、ご指摘よろしくお願いいたします。
また、同じ初学者に少しでもお力になれればと思います。
前提条件として今回使用するものは以下になります!
またDockerはインストールしているものとし、記述方法も最新版に準拠しますのでよろしくお願いします。
- M1mac
- Ruby 3.1.2
- Rails 7
- MySQL 8.0
ファイルの作成
まずは必要なファイルの準備を行います。
今回のファイル構成はこのようにします。
myapp
|-- Dockerfile
|-- compose.yml
|-- Gemfile
|-- Gemfile.lock
これらファイルを使いイメージ作成、コンテナの作成と進んでいきます。
各ファイルの中身
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
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
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しなくてはいけない部分があるので改善できしだい再編集してあげたいと思います、、、
まだまだ初学者なため至らない点多いかと思いますが、同じ境遇の方のお力になれればと思います!
最後まで読んでいただきありがとうございました!