使用Docker Compose 对现有的Rails应用进行Docker化的方法

首先

这次我们来学习Docker和Docker Compose,并总结将现有的Rails应用程序进行Docker化的步骤。
为了尽可能简单明了地总结,希望您能一直看到最后。

关于开发环境

以下是本次确认动作可行的环境:
各种版本

rails-7.0.6
ruby 3.2.2
PostgreSQL 12

开发环境

    • CPU Apple M2

 

    OS MacOS 13.4.1

终端和文本编辑器都是使用VScode进行操作。
另外,除了上述提到的版本和操作系统,我们没有对其他版本或操作系统进行测试,敬请谅解。

将Docker化的步骤进行中文翻译

首先,我想大致从Docker化的步骤来看一下。

本次将说明如何克隆GitHub上的未Docker化的rails应用仓库,并进行Docker化的步骤。
步骤

1. 将GitHub上的仓库克隆到本地环境中。
2. 创建新的Dockerfile。
3. 创建新的Docker-compose.yml。
4. 编辑database.yml文件。
5. 使用Docker Compose创建并运行容器。
6. 在浏览器中访问localhost:3000以进行功能测试。

我們將按照上述流程進行Docker化。

那么,我们立即开始逐步详细解释每个步骤。

将GitHub上的存储库克隆到本地环境。

我会克隆你在GitHub上想使用的代码。

$ git clone <使いたいリポジトリのSSH key.>

前往您想要使用的存储库。

$ code <使用したいリポジトリ名>
创建一个新的Dockerfile。

使用touch命令创建一个新的Dockerfile文件。

$ touch Dockerfile

使用所创建的Dockerfile来创建Docker映像
Dockerfile的内容将如下所示

FROM ruby:3.2.2

RUN apt-get update -qq && apt-get install -y \
  build-essential \
  libpq-dev \
  nodejs \
  postgresql-client \
  yarn

WORKDIR /rails-docker

COPY Gemfile Gemfile.lock /rails-docker/

RUN bundle install

3. 创造一个新的docker-compose.yml文件。

使用”touch”命令,与2相同,创建docker-compose.yml文件。

$ touch docker-compose.yml

使用docker-compose可以高效地管理多个容器,从而实现生成所创建的文件。

# Docker Composeのバージョンを指定する
version: '3'

volumes:
  db-data:

services:
  # webコンテナの設定
  web:
    # カレントディレクトリのDockerfileでビルドする
    build: .
    # railsサーバーの起動時の設定を行う
    command: bundle exec rails s -p 3000 -b '0.0.0.0'
    # ポートの設定を行う(railsのデフォルトのポートは3000番)
    ports:
      - '3000:3000'
    # カレントディレクトリのファイル・フォルダを/rails-dockerにマウントする
    volumes:
      - '.:/rails-docker'
    # 環境変数の設定を行う
    environment:
      - 'DATABASE_PASSWORD=postgres'
    # 出力をプリティーにする
    tty: true
    # 標準入出力とエラー出力をコンテナと結びつける
    stdin_open: true
    # コンテナの依存関係を指定する
    depends_on:
      - db
    # リンクの指定をする
    links:
      - db

  # データベースコンテナの設定
  db:
    # postgresの12を指定する
    image: postgres:12
    # db-dataを/var/lib/postgresql/dataにマウントして永続化させる
    volumes:
      - 'db-data:/var/lib/postgresql/data'
    # 環境変数の設定をする
    environment:
      - 'POSTGRES_USER=postgres'
      - 'POSTGRES_PASSWORD=postgres'
      - 'POSTGRES_HOST_AUTH_METHOD=trust'
编辑database.yml文件

进行对config/database.yml进行编辑。

default: &default
  adapter: postgresql
  encoding: unicode
  host: db
  user: postgres
  port: 5432
  password: <%= ENV.fetch("DATABASE_PASSWORD") %>
  # For details on connection pooling, see Rails configuration guide
  # https://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
使用Docker Compose来创建和运行容器。

构建Docker镜像。

$ docker-compose build

创建并启动容器

$ docker-compose up -d

进入创建的容器内部

$ docker-compose exec web bash

创建数据库

$ rails db:create

进行数据库更新

$ rails db:migrate
在浏览器上访问localhost:3000来进行操作确认。
スクリーンショット 2023-07-28 22.49.47.png

经常使用的docker和docker-compose命令清单

我会整理常用命令的清单。
请根据需要使用。

# イメージを作成する
$ docker-compose build 

# コンテナを作成して起動する
$ docker-compose up

# コンテナを停止する
control + c

# コンテナの起動(バックグラウンド)
$ docker-compose up -d

# コンテナを停止する(バックグラウンド)
$ docker-compose stop

# コンテナを停止して削除する
$ docker-compose down

# webコンテナにログインする
$ docker exec -it appname_web_1 bash

# イメージの一覧を出力する
$ docker images

# コンテナの一覧を出力する
$ docker ps -a

最终

这次我们使用Docker Compose总结了如何将Rails应用程序进行Docker化的方法。
通过使用Docker,可以轻松地构建环境。
虽然这次只是一个简单的应用程序,但我认为随着应用程序变得更加复杂,文件的内容也会变得更加复杂,因此我想要写得更加详细。

感谢您一直以来的观看。

文献引用

快速入门:Compose和Rails
由美国AI开发者从零开始教授的Docker课程

广告
将在 10 秒后关闭
bannerAds