Rails 6系とMySQL8 で開発環境を作る
docker-compose upでrails serverを起動できるようにすること
ホストのファイルシステムとコンテナのファイルシステムを同期させること
勉強中の初学者です。誤りなどのご指摘いただければ嬉しいです!
流れ
- 各種ファイルの作成
- イメージのBuild
-
rails new
でアプリ作成 ->Gemfile
が上書きされる - 新しい
Gemfile
でイメージの再ビルド -
database.yml
の設定,DB生成 - コンテナ起動&サーバ起動
- 確認
各種ファイル作成
下記を作成します。
dockerfile
docker-compose.yml
Gemfile
Gemfile.lock
$ mkdir docker_rail_mysql
$ cd docker_rail_mysql
dockerfile作成
FROM ruby:2.6
RUN apt-get update && apt-get install -y \
build-essential \
libpq-dev \
nodejs
RUN curl -fsSL https://deb.nodesource.com/setup_lts.x | bash - && apt-get install -y nodejs
RUN npm install --global yarn
WORKDIR /docker_rail_mysql
COPY Gemfile Gemfile.lock /docker_rail_mysql/
RUN bundle install
RUN rm -f tmp/pids/server.pid
CMD ["rails","s","-b","0.0.0.0"]
docker-compose.yml作成
docker-compose.yml
version: '3'
volumes:
db-data:
services:
web:
build: .
ports:
- '3000:3000'
container_name: 'web'
volumes:
- '.:/docker_rail_mysql'
tty: true
stdin_open: true
depends_on:
- db
db:
image: mysql:8
container_name: 'db_mysql'
volumes:
- 'db-data:/var/lib/mysql'
environment:
- 'MYSQL_ROOT_PASSWORD=password'
- 'TZ=Asia/Tokyo'
ports:
- 3306:3306
Gemfile作成
source 'https://rubygems.org'
gem 'rails', '~>6'
Gemfile.lockを作成
Gemfile.lockの内容はありません。
コマンド
まずは、docker-composeで、imageとcontainerを作ります。
$ docker-compose run web bash
コンテナー上でのコマンド
rails new
コマンドで、Gemfileは上書きされます。
$ rails new . -force --database=mysql --webpacker
$ exit
config/database.yml 変更
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: <%= ENV.fetch("MYSQL_USERNAME", "root") %>
password: <%= ENV.fetch("MYSQL_PASSWORD", "password") %>
host: <%= ENV.fetch("MYSQL_HOST", "db") %>
development:
<<: *default
database: docker_development
test:
<<: *default
database: docker_test
production:
<<: *default
database: docker_homework_production
username: root
password: <%= ENV['DOCKER_DATABASE_PASSWORD'] %>
コマンド
貧弱なGemfileで作られた最初のimageは削除して、
新しいGemfileでもう1回buildしましょう。
$ docker-compose down
$ docker-compose up --build -d
$ docker-compose run web rails db:create
$ docker-compose up
- host側のWEBブラウザで確認 http://localhost:3000/
host側のdocker-homework
フォルダの内容をgithubにpushしておくと、
下記のコマンドで、どこでも同じ環境構築ができるようになります。
$ git clone -b [ブランチ名] https://github.com/〜
$ cd docker
$ docker-compose run web rails db:create
$ docker-compose up
最後に
これで構築完了です。
かなり時間がかかりましたが、無数のエラーを出しながら、dockerにもっと慣れてきたと思います。
参考になったら嬉しいです。