让Rails在Docker中运行
首先
你好,我是一个文科大学生。我写这篇文章是为了输出我日常学习编程的成果。
这次我想要将我在本地创建的Rails应用程序进行Docker化并部署,所以我写了这篇文章。
在这篇文章中,我使用了PostgreSQL作为数据库。
目标读者
-
- dockerを学びたての方
- 自作したRailsアプリをDocker化したい人
环境
-
- M2 Macbook Air
- Railsアプリを作成済み
不做的事情
- 今回は、Dockerの細かな解説はしませんの予めご了承ください。
使用Docker进行环境配置
首先,在目录的根目录下创建一个Dockerfile和docker-compose.yml文件。
touch Dockerfile docker-compose.yml
接下来,我们将编写Dockerfile。
FROM ruby:3.2.2
RUN apt-get update && apt-get install -y build-essential \
libpq-dev \
nodejs \
postgresql-client
RUN mkdir myapp
WORKDIR /myapp
COPY Gemfile Gemfile.lock /myapp/
RUN bundle install
需要与现有的Gemfile中所列的版本相配合,此处为ruby:3.2.2。
接下来,我们会写docker-compose.yml文件。
version: '3.0'
volumes:
db-data:
services:
web:
build: .
ports:
- '3000:3000'
environment:
- 'DATABASE_PASSWORD=postgres'
volumes:
- .:/myapp
tty: true
stdin_open: true
depends_on:
- db
links:
- db
db:
image: postgres:12
volumes:
- 'db-data:/var/lib/postgresql/data'
environment:
- 'POSTGRES_PASSWORD=postgres'
- 'POSTGRES_USER=postgres'
由于在docker-compose.yml中进行了postgresql的配置,因此需要编辑rails的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 build //buildする
$ docker-compose run web rake db:create db:migrate
$ docker-compose up
如果 localhost:3000 服务器已启动,则完成。
结束时
这篇文章是关于将现有的Rails应用程序容器化的方法。我觉得它意外地简单。
Docker真的很方便呢。
参考来源的网站或文章