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