帶有 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 的新容器。