使用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化的步骤来看一下。
步骤
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来进行操作确认。

经常使用的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课程