帶有 docker-compose 的 Ruby on Rails

如果你想使用 docker for rails app 並使用資料庫,你需要知道 docker 容器中的所有資料都將被銷燬(除非你專門為了儲存資料而配置容器)有時你需要建立一個 docker 容器應用程式並將其附加到具有資料庫的舊容器。

作為 rails 應用程式的示例,我使用了一個簡單的應用程式。你可以從命令建立它:

rails new compose-app --database=postgresql

當然,你需要事先安裝導軌,紅寶石等。

然後,在專案中建立 Dockerfile,並將此資料設定為它:

FROM ruby:2.3.1
RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
RUN mkdir /compose-app
WORKDIR /compose-app
ADD Gemfile /compose-app/Gemfile
ADD Gemfile.lock /compose-app/Gemfile.lock
RUN bundle install
ADD . /compose-app

下一步 - 使用資料建立 docker-compose.yml:

version: '2'
services:
  db:
    image: postgres
  web:
    build: .
    command: bundle exec rails s -e development -p 80 -b '0.0.0.0'
    volumes:
      - .:/compose-app
    ports:
      - "80:80"
    depends_on:
      - db

你可以將 80 埠(-p 80)替換為另一埠。

必須將 database.yml config 的開發部分更改為:

development: &default
  adapter: postgresql
  encoding: unicode
  database: postgres
  pool: 5
  username: postgres
  password:
  host: db

現在你可以從命令構建影象:

docker-compose build

(在專案目錄中執行)

從以下開始:

docker-compose up

如果一切都正確完成,你將能夠在控制檯中檢視 rails 中的日誌。

關閉控制檯。它會起作用。

如果只想刪除沒有資料庫的 rails 應用程式的容器,則需要在專案目錄中執行:

docker-compose stop web
docker-compose build web
docker-compose up -d --no-deps web

將建立並啟動帶有 rails app 的新容器。