使用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を停止&削除

请参考

 

广告
将在 10 秒后关闭
bannerAds