RailsアプリをDocker化する方法

はじめに

学習したことのアウトプットとして記録しました。 現在プログラミング学習中の実務未経験の者であり、技術的な内容などに誤りを含む可能性があるので不適切な記述などがありましたらコメントで教えていただけると幸いです

概要

すでに作成されたRailsアプリをDocker化する方法についてまとめてみました

Dockerfileとdocker-compose.ymlを用意

  • アプリケーション用とdb用のコンテナを使用します

ここではRuby 3.2.2を使用しています。RubyはDockerイメージとして提供されており、このベースイメージを使用することでRubyアプリケーションを実行できます。

host: db
user: postgres
port: 5432
password: <%= ENV.fetch("DATABASE_PASSWORD") %>

# Dockerコンテナのベースイメージを指定します。
# 元のWebアプリの.ruby-version、Gemfileを参考にします。
FROM ruby:3.2.2
# コンテナ内でLinuxパッケージの更新と必要なパッケージのインストールを行います。
# apt-get コマンドを使用して、ビルドツール、PostgreSQLクライアント、Node.js、libpq-devなどがインストールされます。
# -y オプションは、パッケージのインストール時に確認プロンプトを無効にしています。
RUN apt-get update && apt-get install -y \\\\
    build-essential \\\\
    libpq-dev \\\\
    nodejs \\\\
    postgresql-client \\\\
    yarn
# この行は、作業ディレクトリを /rails-docker に設定します。後続のコマンドはこのディレクトリ内で実行されます。
WORKDIR /rails-docker
#ローカルの Gemfile と Gemfile.lock ファイルをコンテナ内の /rails-docker/ ディレクトリにコピーします。
COPY Gemfile Gemfile.lock /rails-docker/
# Bundlerを使用してGemfileに記載されているGem依存関係をインストールします。
RUN bundle install
CMD rails s -p 3000 -b '0.0.0.0'

version: '3.9'

#データベースのデータを永続的に保存するためにdb-dataを使用
volumes:
  db-data:

#コンテナとサービスの定義
services:
#Railsアプリケーションのコンテナを指定
  web:
#Dockerイメージを現在のディレクトリ(.)からビルド
    build: .
#ホストのポート 3000 とコンテナのポート 3000 をマッピングし、Railsアプリケーションにアクセスできるようにします。
    ports:
      - '3000:3000'
#アプリケーションのコードや設定ファイルを同期させるためにローカルのファイルをコンテナ内にマウントします。
    volumes:
      - '.:/rails-docker'
#コンテナ内の環境変数を設定します。データベースのパスワードを設定します。
    environment:
      - 'DATABASE_PASSWORD=postgres'
#ターミナルをサポートし、コンテナに対話的にアクセスできるようにします。
    tty: true
    stdin_open: true
#このサービスが依存しているサービスを指定します。
    depends_on:
      - db
#他のコンテナとのリンクを設定します
    links:
      - db
#PostgreSQLデータベースのコンテナを指定します。
  db:
    image: postgres:15.3
#データベースのデータを永続的に保存するために db-data ボリュームをマウントします。
    volumes:
      - 'db-data:/var/lib/postgresql/data'
#PostgreSQLデータベースの設定を環境変数で指定します。ユーザー名,パスワードを設定します
    environment:
      - 'POSTGRES_USER=postgres'
      - 'POSTGRES_PASSWORD=postgres'

config/database.yml修正を修正します。

db作成,migrate

docker-compose build
docker-compose run web rails db:create db:migrate
docker-compose up

#コンテナをバックグラウンドで起動
docker-compose up -d
#コンテナ内に入るには
docker-compose exec web bash

ブラウザ上でhttp://localhost:3000 にアクセスします 起動できたらOK。