如何将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修正。

创建数据库,迁移

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,表示启动成功了就可以了。

bannerAds