本内容は、既存Railsアプリがあることを前提に、マルチステージビルドでDockerの開発環境を構築する手順です。DBはPostgresです。
マルチステージビルドについては、下記の記事を参考にしてください。
事前準備
- dockerを使用できる状態にしておく
- railsアプリを用意しておく
dockerファイル準備
まず初めにrailsアプリがあるディレクトリでDockerfile``docker-compose.yml
を作成する。
- Dockerfileの作成
Dockerfile
FROM node:12 as node
FROM ruby:3.0.2
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev
COPY --from=node /usr/local/bin/node /usr/local/bin/
COPY --from=node /opt/yarn-* /opt/yarn/
COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules
RUN ln -fs /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
&& ln -fs /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx \
&& ln -fs /opt/yarn/bin/yarn /usr/local/bin/yarn \
&& ln -fs /opt/yarn/bin/yarnpkg /usr/local/bin/yarnpkg
RUN mkdir /repogitory_name
WORKDIR /repogitory_name
ADD Gemfile /repogitory_name/Gemfile
ADD Gemfile.lock /repogitory_name/Gemfile.lock
RUN bundle install
ADD package.json yarn.lock /repogitory_name/
RUN yarn install --check-files
ADD . /repogitory_name
- docker-compose.ymlの作成
docker-compose
version: '3'
services:
db:
image: postgres:14.6-alpine
environment:
- POSTGRES_PASSWORD=password
web:
image: repogitory_name:latest
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
volumes:
- .:/repogitory_name
ports:
- "3000:3000"
environment:
- POSTGRES_PASSWORD=password
depends_on:
- db
DATEBASEの設定
- config/database.yml内の設定をpostgresに書き換える
database.yml
default: &default
adapter: postgresql
encoding: unicode
host: db
username: postgres
password: <%= ENV['POSTGRES_PASSWORD'] %>
pool: 5
development:
<<: *default
database: myproject_development
test:
<<: *default
database: myproject_test
railsアプリの設定
Gemfileファイルの設定
- rubyバージョンがDockerfileと同じか確認する(違う場合はDockerfile側を修正)
ruby '3.0.2'
- posetgresの設定を追加
# Use postgres as the database for Active Record
gem 'pg'
起動・確認
railsアプリをビルドする
$ docker-compose build
railsアプリのデータベースを作成し、テーブルを作成する
$ docker-compose run web rails db:create db:migrate
railsアプリ起動
$ docker-compose up
ブラウザで、 http://127.0.0.1:3000/ にアクセスし、railsアプリの画面が表示されていればOK