1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

開発環境をDocker化 Rails 6 x PostgreSQL

Posted at

Railsの開発環境をDocker化

Docker、docker-composeで既存のRailsアプリをDocker化する方法についてまとめてみます。

バージョン

  • ruby 3.0.2
  • rails 6
  • node 14.19.1
  • postgres 15

1. Dockerfileの作成

今回はnodejsやyarnのインストールにapt-getではなくマルチステージビルドを利用します。
少しですがビルドの時間を短くし、イメージサイズも小さくするためです。

Dockerfile
FROM node:14.19.1 as node
FROM ruby:3.0.2

ENV YARN_VERSION 1.22.17
COPY --from=node /opt/yarn-v${YARN_VERSION} /opt/yarn/
COPY --from=node /usr/local/bin/node /usr/local/bin
COPY --from=node /usr/local/lib/node_modules /usr/local/lib/node_modules/
RUN ln -s /opt/yarn/bin/yarn /usr/local/bin/yarn \
	&& ln -s /opt/yarn/bin/yarnpkg /usr/local/bin/yarnpkg \
	&& ln -s /usr/local/bin/node /usr/local/bin/nodejs \
	&& ln -s /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
	&& ln -s /usr/local/lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx

RUN apt-get update -qq && apt-get install -y \
	build-essential \
	libpq-dev

WORKDIR /myapp
COPY Gemfile Gemfile.lock /myapp/
RUN bundle install
COPY . /myapp/

2. docker-compose.ymlの作成

docker composeとは複数のコンテナを一括で効率的に操作できるツールのことです。
docker-compose.ymlにはコンテナの利用方法、起動方法を定義しておきます。
ここに書いておくことでコンテナの起動時に毎回毎回オプションの指定などしなくて済むようになります。

docker-compose.yml
version: '3'

services:
  db:
    image: postgres
    volumes:
      - 'db-data:/var/lib/postgresql/data'
    environment:
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_USER=postgres
      - POSTGRES_DB=mydb

  web:
    build: .
    command: bash -c "rm -f /myapp/tmp/pids/server.pid && bundle exec rails s -b '0.0.0.0'"
    ports:
      - '3000:3000'
    volumes:
      - .:/myapp
    environment:
      - POSTGRES_PASSWORD=postgres
    tty: true
    stdin_open: true
    depends_on:
      - db

volumes:
  db-data:

3. database.ymlの編集

今回はデータベースにpostgresを利用しています。

database.yml
default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  username: postgres
  password: postgres
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: myapp_development

test:
  <<: *default
  database: myapp_test

4. 起動

以下のコマンドを実行します。

$ docker-compose build
$ docker-compose run web rake db:create db:migrate
$ docker-compose up

5. 動作確認

上記コマンドを実行後、http://localhost:3000 でアクセスできることを確認しましょう!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?