こんにちは、鈴木です。
今回は、個人学習や個人開発で使用できそうなDocker環境の構築をしていきたいと思います。
メリット
個人的に考えるDockerの使用メリットを簡単に記載しておきます。
- 一度テンプレートとして作成しておけば、流用可能
- フロントエンドとバックエンドの開発を友人と分けたいときにバージョンをPCで設定する必要は基本的にない
- 理解すればほかの環境を作ることもさほど難しくない
- バージョンがずれることがない
ディレクトリ構成
構築といっても今回は、テスト的に作成したものを記載するのみなので、間違いがあるかもしれませんが、ご了承いただけると幸いです。今回のDocker環境のディレクトリ構成は下記のようになってます。
workdir
│ docker-compose.yml //手順1
│ install.bat //手順6 (Windowsの場合)
│ install.command //省略(macOSの場合)
│ ReadMe.md
│
├─backend //railsの作業用ディレクトリ
├─docker
│ ├─postgres //postgres環境構築用
│ │ database.yml //手順4
│ │
│ ├─rails //rails環境構築用
│ │ Dockerfile //手順2
│ │ Gemfile //手順3
│ │ Gemfile.lock
│ │
│ └─react //react環境構築用
│ Dockerfile //手順5
│
└─frontend //reactの作業用ディレクトリ
手順1. docker-compose.yml
version: '3.8'
services:
db:
image: postgres
volumes:
- postgres_volume:/var/lib/postgresql/data
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
ports:
- '5432:5432'
restart: always
backend:
build: ./docker/rails
command: bundle exec rails s -p 3000 -b '0.0.0.0'
tty: true
stdin_open: true
volumes:
- ./backend:/backend
ports:
- '3000:3000'
depends_on:
- db
restart: always
frontend:
build: ./docker/react
environment:
- NODE_ENV=development
- CHOKIDAR_USEPOLLING=true
volumes:
- ./:/usr/src/app
command: sh -c 'cd frontend && yarn start'
ports:
- '8000:3000'
tty: true
volumes:
postgres_volume:
external: true
手順2. Rails Dockerfile
FROM ruby:3.1.3
RUN apt-get update -qq && apt-get install -y nodejs postgresql-client
RUN mkdir backend
WORKDIR /backend
ADD Gemfile /backend/Gemfile
ADD Gemfile.lock /backend/Gemfile.lock
RUN bundle install
ADD . /backend
手順3. Rails Gemfile
source 'https://rubygems.org'
gem 'rails', '7.0.4'
gem 'pg', '1.4.5'
gem 'puma', '5.6.5'
gem 'bootsnap','1.15.0'
gem 'msgpack','1.6.0'
Gemfile.lockはファイルを作成するのみで中身は空白です。
手順4.Postgres database.yml
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password: password
pool: 5
development:
<<: *default
database: backend_development
test:
<<: *default
database: backend_test
手順5. react Dockerfile
FROM node:14.17.5
ENV LANG=C.UTF-8
ENV TZ=Asia/Tokyo
WORKDIR /usr/src/app
手順6.install.bat
※Mac環境のinstall.commandをまだ作成していないためWindows環境のみとなります。
docker volume create --name postgres_volume
docker-compose run backend rails new . --api --force --no-deps --database=postgresql --skip-bundle
COPY docker\postgres\database.yml backend\config\database.yml
docker-compose build
docker-compose run --rm frontend sh -c "npx create-react-app frontend --template typescript"
docker-compose up -d
docker-compose run backend rails db:create