はじめに
フルリモートのイケてるフリーランスを目指すためにRailsの勉強を始める。せっかくなんでDockerも覚える。基本的には先人達のコピペだけど微妙に詰まったので備忘として残しとく。
参考にしたページ
丁寧すぎるDocker-composeによるrails + MySQL on Dockerの環境構築(Docker for Mac)
https://qiita.com/azul915/items/5b7063cbc80192343fc0
DockerでRuby on Railsの開発をしよう
https://qiita.com/saitoeku3/items/b1aa2ae143624e551aea
参考というかほぼそのまま。こちらのページのが丁寧に書いてあります。
環境
- MacOS
- Ruby 2.6.3
- Rails 5.2.3
- mariadb 10.3
手順
プロジェクトのディレクトリを作成
$ mkdir sampleApp
$ cd sampleApp
Dockerfileを作成
FROM ruby:2.6.3
ENV LANG C.UTF-8
RUN apt-get update -qq && apt-get install -y \
build-essential \
nodejs \
&& rm -rf /var/lib/apt/lists/*
RUN gem install bundler
WORKDIR /tmp
ADD Gemfile Gemfile
ADD Gemfile.lock Gemfile.lock
RUN bundle install
ENV APP_HOME /app_name
RUN mkdir -p $APP_HOME
WORKDIR $APP_HOME
ADD . $APP_HOME
Gemfileを作成
source 'https://rubygems.org'
gem 'rails', '~> 5.2.3'
Gemfile.lockを作成
$ touch Gemfile.lock # 中身は空でOK
docker-compose.ymlを作成
version: '3'
services:
db:
image: mariadb:10.3
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: root
ports:
- '3306:3306'
volumes:
- mysql_data:/var/lib/mysql
web:
build: .
ports:
- "3000:3000"
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/app_name
- bundle:/usr/local/bundle
depends_on:
- db
volumes:
bundle:
mysql_data:
rails newを実行
$ docker-compose run web rails new . --foce --database=mysql --skip-bundle
database.ymlを修正
default: &default
adapter: mysql2
encoding: utf8
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: password # docker-compose.ymlのMYSQL_ROOT_PASSWORD
host: db # docker-compose.ymlのservice名
dockerを起動
$ docker-compose build # コンテナをビルド
$ docker-compose up -d # コンテナの一斉起動(オプションに-dを付けるとデーモンで起動)
起動の確認
http://localhost:3000 にアクセスしてこの画面が出ればOK
詰まったこと
docker-composeの設定を変えながら行なっていたが、DBのコンテナがなかなか上手く立ち上がらず。すると、初回起動時のみに行われる設定があるとのことで、DBのコンテナを削除してから再度実行したら上手く行った。
参考:DockerオフィシャルのMySQL(MariaDB)コンテナの挙動をDockerfile周辺から読み解く
https://qiita.com/kazuyoshikakihara/items/f0c5158c700bb7a5df9f
おしまい
品質の低いコピペ記事なんて書いてんじゃねーよ!とか言われたら消しますm(_ _)m