LoginSignup
0
0

RailsプロジェクトをDocker化する手順(Rails, postgresql)

Posted at

はじめに

既存のRailsプロジェクトをdocker化する機会があったため、手順を記載していく。

docker化の概要

  • 既存のRailsプロジェクト
    • Ruby 3.0.2
    • Rails 6.0.3
    • postgresql 12
  • 環境
    • Windows 11 Home (wsl2/Ubuntu)

手順

事前準備

  • 既存のRailsプロジェクトをclone
  • Dockerfile, docker-compose.ymlをプロジェクト内に新規作成

Dockerfile作成

イメージのビルド手順を記載する。

Dockerfile
FROM node:14.17.6 as node
# ベースイメージ
FROM ruby:3.0.2

# Install Node.js and Yarn
COPY --from=node /opt/yarn-* /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 -fs /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
  && ln -fs /usr/local/lib/node_modules/npm/bin/npm-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 apt-get update -qq && \
  apt-get install -y build-essential \
  libpq-dev \
  postgresql-client \
  # Clean up cached package data
  && apt-get clean \
  # Remove the cache file of the package list
  && rm -rf /var/lib/apt/lists/*

RUN mkdir /rails-docker
WORKDIR /rails-docker

COPY Gemfile /rails-docker/Gemfile
COPY Gemfile.lock /rails-docker/Gemfile.lock

RUN bundle install

COPY package.json yarn.lock ./
RUN yarn install

COPY . /rails-docker

重要なポイントを一つずつ詳しく見ていきます。

マルチステージビルド

マルチステージビルドを使用すると、複数のFROM命令で、異なるベースイメージを使用することが可能です。
今回はメインで使用するRubyのイメージと併せて、nodeのイメージを使用しています。
マルチステージビルドを使用することで、イメージサイズを必要最小限にできることがメリットです!

Dockerfile
FROM node:14.17.6 as node
# ベースイメージ
FROM ruby:3.0.2

# Install Node.js and Yarn
COPY --from=node /opt/yarn-* /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 -fs /usr/local/lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
  && ln -fs /usr/local/lib/node_modules/npm/bin/npm-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

ruby:3.0.2をベースイメージとして、COPY --from=nodeを使用して、node:14.17.6のベースイメージからnode/yarnをインストールしています。

パッケージのインストール

必要なパッケージをインストールします。

  • build-essential: ビルドに必要な基本的な開発パッケージ
  • libpq-dev: PostgreSQLデータベースにアクセスするための開発ファイル
  • postgresql-client: PostgreSQLデータベースに接続するためのクライアントツール
Dockerfile
RUN apt-get update -qq && \
  apt-get install -y build-essential \
  libpq-dev \
  postgresql-client \
  # Clean up cached package data
  && apt-get clean \
  # Remove the cache file of the package list
  && rm -rf /var/lib/apt/lists/*

docker-compose.yml作成

コンテナ間の関連や設定を記載します。

docker-compose.yml
version: '3'
services:
  # DBコンテナ
  db:
    # PostgreSQLを設定
    image: postgres:12
    # 環境変数を設定
    environment:
      - 'POSTGRES_USER=postgres'
      - 'POSTGRES_PASSWORD=postgres'
    volumes:
      - db-data:/var/lib/postgresql/data

  # WEBコンテナ
  web:
    build: .
    command: bash -c "rails db:create && rails db:migrate && bundle exec rails s -p 3000 -b '0.0.0.0'"
    # 
    volumes:
      - .:/rails-docker
    environment:
      - 'DATABASE_PASSWORD=postgres'
    ports:
      - "3000:3000"
    # DBコンテナの起動後に起動するように設定
    depends_on:
      - db

volumes:
  db-data:

プロジェクトのビルド

  • Railsアプリのひな型を作成する(DBはPostgreSQLを指定)
    docker-compose run web rails new . --force --database=postgresql

  • 再度ビルドする
    新しいGemfileが作成されたので、

DB接続設定

マルチステージビルドとは?

注意点

0
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
0
0