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