👻
Rails6+MySQLのDocker環境構築 (CI/CDまでの道①)
はじめに
CI/CDの道ということで記事の企画が始まりました。
このシリーズではAWS初心者の私がRailsアプリケーションをDockerを用いてCI/CDするところまでを記事にしていこうと思います。
第1回はRails+MySQLのDocker環境を構築していきます。
CI/CDの道シリーズ
- ① Rails6+MySQLのDocker環境構築
環境
- WSL2 (Ubuntu20.04)
- Docker 20.10.9
- docker-compose 1.29.1
- Git 2.25.1
- VSCode
1. 必要なファイルの用意
この記事ではzenn_env
というディレクトリを作成してその中で作業を行います。
基本的には以下の記事を参考に行っていきます。
Rails6, MySQL, alpineでローカル環境のDocker構築
まず、新規ファイル作成で以下のファイルを作成します。
Dockerfile
FROM ruby:alpine3.13
RUN apk update \
&& apk add --no-cache gcc make libc-dev g++ mariadb-dev tzdata nodejs~=14 yarn
WORKDIR /myapp
COPY Gemfile .
COPY Gemfile.lock .
RUN bundle install --jobs=2
COPY . /myapp
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
CMD ["bundle", "exec", "rails", "server", "-b", "0.0.0.0"]
docker-compose.yml
version: "3.9"
services:
rails:
build: .
container_name: rails
command: ash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
volumes:
- .:/myapp
ports:
- "3000:3000"
env_file:
- .env
depends_on:
- db
db:
image: mysql:8.0.27
container_name: db
environment:
TZ: Asia/Tokyo
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
ports:
- "3306:3306"
volumes:
- db:/var/lib/mysql
volumes:
db:
.env
DB_PASSWORD="password"
entrypoint.sh
#!/bin/sh
set -e
rm -f /myapp/tmp/pids/server.pid
exec "$@"
Gemfile
source 'https://rubygems.org'
gem 'rails', '~> 6'
Gemfile.lock
Gemfile.lockは中身は空で作成のみです
ここまで行うと以下のようなディレクトリ構成になります
zenn_env
┣ Dockerfile
┣ docker-compose.yml
┣ .env
┣ entrypoint.sh
┣ Gemfile
┣ Gemfile.lock
以下のコマンドでRailsプロジェクトを作成します。
$ docker-compose run --no-deps rails bundle exec rails new . --force --database=mysql
ファイルが色々作成されました
以下のコマンドで編集権限を与えます。
$ sudo chmod -R o+w .
/config/database.yml
を編集します。
default: &default
adapter: mysql2
encoding: utf8mb4
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password: <%= ENV["DB_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 build
# エラーが出たら下を参照
$ docker-compose up
私の環境では以下のエラーが発生します。
db uses an image, skipping
Building rails
error checking context: 'no permission to read from '/home/jinwatanabe/workspace/zenn_env/config/master.key''.
ERROR: Service 'rails' failed to build : Build failed
こちらを参考に以下のコマンドで権限を与えます。
$ sudo chmod 764 /home/ユーザー名/workspace/ディレクトリ名/config/master.key
ユーザー名にご自身の名前をいれます。エラーと同じパスです。
私の場合は以下のコマンドになります。
$ sudo chmod 764 /home/watanabejin/workspace/zenn_web/config/master.key
成功すると以下のログが出ます。
次にDBを作成します。別のターミナルを開いて以下のコマンドでコンテナの中に入ります。
# 別のターミナルを開く
$ docker exec -it rails sh
$ rails db:create
ブラウザを開いてlocalhost:3000
にアクセスします.
成功万歳!
おわりに
ここまでの作業を行ったリポジトリを以下に用意しています。
READMEに従って起動することができますのでご利用ください。
次回はWebpackerの導入にチャレンジ予定です。
Discussion
sudo chmod -R o+w .
でダメだった場合は
sudo chown -R ユーザー名:ユーザー名 ./*で試してみてください