使用Docker Compose搭建开发环境
首先
本次将以Docker Compose组合Ruby on Rails和PostgreSQL来建立开发环境的方法进行总结。
关于开发环境
构建开发环境将如下所示。
App名バージョンRuby3.2.2Ruby on Rails7.0.6postgres12docker-compose3.9
构建过程
1. 创作所需的文件
我們將創建環境構築所需的文件。
文件結構將如下所示。
/raiis-docker
├─ Dockerfile
├─ Gemfile
├─ Gemfile.lock
└─ Docker-compose.yml
创建一个Dockerfile
我們會在root目錄下創建Dockerfile。
下面是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
1.2 创建Gemfile
创建Gemfile和Gemfile.lock。
Gemfile的内容如下。Gemfile.lock可以为空。
source 'https://rubygems.org'
gem "rails", "~> 7.0.6"
创建一个1.3 Docker-compose.yml文件。
将创建一个Docker-compose.yml文件。
Docker-compose.yml文件的内容将如下所示。
version: "3.9"
services:
web:
build: .
ports:
- '3000:3000'
volumes:
- '.:/rails-docker'
tty: true
stdin_open: true
2. Rails的安装配置
请运行以下命令来进行Rails的设置。
$ docker-compose exec web bash
$ # rails new . --force --database=postgresql --skip-bundle
$ # exit
由于 Gemfile 已经更新,所以我们需要重新构建。
$ docker-compose down
$ docker-compose up --build -d
3. 数据库的设置
3.1 在Docker-compose.yml文件中进行添加
我在docker-compose.yml文件中添加了关于数据库的说明。
version: "3.9"
volumes:
db-data:
services:
web:
build: .
ports:
- '3000:3000'
volumes:
- '.:/rails-docker'
environment:
- 'DATABASE_PASSWORD=postgres'
tty: true
stdin_open: true
depends_on:
- db
links:
- db
db:
image: postgres:12
volumes:
- 'db-data:/var/lib/postgresql/data'
environment:
- 'POSTGRES_USER=postgres'
- 'POSTGRES_PASSWORD=postgres'
更新3.2版本的config/database.yml文件。
在执行rails new命令后生成的config/database.yml文件中进行追加。
请进行如下修改。
我会修正这部分。
default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see Rails configuration guide
# https://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
这是修正后的版本。
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 } %>
4. 配置Rails和数据库
请使用docker-compose构建一个包含Rails和数据库设置的容器。
请执行以下命令。
$ docker-compose up -d
$ docker-compose exec web bash
$ # rails db:create
$ # rails g scaffold product name:string price:integer vendor:string
$ # rails db:migrate
$ # rails s -b 0.0.0.0
在设置中指定启动时打开的页面。
将config/routes.rb文件进行如下修改。
Rails.application.routes.draw do
root 'products#index'
resources :products
end
通过使用docker-compose up来启动rails服务器
在docker-compose.yml文件中添加对command的描述。
web:
build: .
command: bundle exec rails s -p 3000 -b '0.0.0.0'
ports:
- '3000:3000'
volumes:
- '.:/rails-docker'
environment:
- 'DATABASE_PASSWORD=postgres'
tty: true
stdin_open: true
depends_on:
- db
links:
- db
感谢阅读完以上内容,通过使用docker-compose,已完成了Rails和PostgreSQL的环境配置。
命令列表
我将整理一个列表,列出今后可能经常使用的命令。请帮我找出有用的方面。
コマンド用途docker-compose builddocker imageの作成docker-compose updocker containerを作成して起動
-d
オプション : デタッチモード--build
オプション : docker imageのビルドから作成docker-compose stopdocker containerを停止docker-compose downdocker containerを停止&削除请参考