🐳
dockerでプレーンなRails+MySQL実験環境を用意してみた
なるべくプレーンなRails+MySQLをdocker-composeで用意しておいて、実験したい時にササッできる環境を用意しました。
TL;DR
以下に用意してあるので、欲しい方はコピーするなりforkするなりしてください。
手順
基本的にはdockerの公式ドキュメントに従いました。
RubyとRailsのバージョンを変更し、DBはpostgreSQL→MySQLに変更しています。
RailsはAPIモードで実装をしています。
ファイル用意
まずDockerfileを準備します
FROM ruby:2.7.2
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /myapp
WORKDIR /myapp
ADD Gemfile /myapp/Gemfile
ADD Gemfile.lock /myapp/Gemfile.lock
RUN bundle install
ADD . /myapp
Gemfileを準備し、Gemfile.lockを用意します
source 'https://rubygems.org'
gem 'rails', '6.0.3.3'
$ touch Gemfile.lock
最後に取りまとめのdocker-compose.ymlを用意します。
services:
db:
image: mysql:8.0.21
command: --default-authentication-plugin=mysql_native_password
# ↑ MySQL8より前の認証方法をデフォルトに
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/myapp
ports:
- "3000:3000"
depends_on:
- db
初期化
Railsの初期化用コマンドを走らせます(--api
でAPIモードで初期化しています、不要なら外せばOK)
docker-compose run web rails new . --force --database=mysql --api
色々インストールが走ったのちファイルが準備されます
$ ls
Dockerfile Rakefile config.ru log tmp
Gemfile app db public vendor
Gemfile.lock bin docker-compose.yml storage
README.md config lib test
Gemfileが更新されたため、imageをビルドし直します
docker-compose build
データベースの接続先を変更するためにconfig/database.yml
を編集します
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
host: db
# ↑ここを変えた
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
production:
<<: *default
database: myapp_production
username: myapp
password: <%= ENV['MYAPP_DATABASE_PASSWORD'] %>
起動
バックグラウンドで立ち上げます。
$ docker-compose up -d
確認します。
$ docker-compose ps
Name Command State Ports
---------------------------------------------------------------------------------------------
rails-mysql-plain-dev_db_1 docker-entrypoint.sh --def ... Up 3306/tcp, 33060/tcp
rails-mysql-plain-dev_web_1 bundle exec rails s -p 300 ... Up 0.0.0.0:3000->3000/tcp
このままだとMySQL内にdatabaseが作られていないので作成します。
$ docker-compose run --rm web rails db:create
これで完了です。 http://localhost:3000
にアクセスして映ればOKです。
とりあえずササッと立ち上げて触れるRails環境の完成です。
DBの永続化もしていないため、コンテナを削除するたびにデータは初期化されます。ほしい方は別途volumeで永続化を図ってください。
Discussion