如何在dockerized Rails应用程序中创建Mysql测试数据库?

时间:2017-11-10 14:29:03

标签: mysql ruby-on-rails ruby-on-rails-3 docker docker-compose

我设法将我在Mysql数据库上运行的现有Rails应用程序停靠。但我想知道是否可以设置docker-compose在同一个容器中创建测试数据库?

这是我的docker-compose.yml,它与mysql的开发很好用

version: '2'

volumes:
  db-data:

services:
  db:
    image: mysql:5.5
    restart: always
  ports:
    - "3307:3306"
  environment:
    MYSQL_ROOT_PASSWORD: verysecret
    MYSQL_USER: appdb
    MYSQL_PASSWORD: secret
    MYSQL_DATABASE: appdb
  volumes:
    - db-data:/var/lib/mysql

  web:
    build: .
    command: bundle exec rails s -p 3000
    volumes:
    - .:/app
  ports:
    - "3000:3000"
  links:
    - db
  depends_on:
    - db

我可以在某种程度上在环境部分添加一个darabase吗?

2 个答案:

答案 0 :(得分:1)

每个Mysql容器只能使用docker compose创建一个数据库。在您的情况下,我认为您应该为第二个数据库创建第二个数据库容器(与"真实" DB隔离,这是一个很好的做法)。 如果你真的想在同一个容器中安装2个数据库,你必须根据Mysql映像创建一个Dockerfile,并添加命令行(RUN)来创建第二个数据库。

HTH

答案 1 :(得分:0)

是的,您可以,但它不一定是单个容器,而是耦合容器的管理器。如果这没关系,我已经添加了一些可以帮助您配置项目的步骤。 如果没有,我已经添加了如何从docker-compose文件中运行单个图像

您将首先在项目的源目录中创建一个docker-compose.yml文件。

然后你想要在你的yml文件中添加这样的东西。(这是从Docker的快速入门文档中获取的。修改为显示mysql而不是postgres)

version: '3'
services:
  db:
    image: mysql
  web:
    build: .
    command: bundle exec rails s -p 3306 -b '0.0.0.0'

volumes:
  - .:/myapp
ports:
  - "3000:3000"
depends_on:
  - db

有关如何创建一个的详细信息,请访问: https://docs.docker.com/compose/rails/#define-the-project

注意事项:

  • web是有关rails容器的详细信息。因此,如果您已经创建了rails图像,则需要添加image属性。
  • 此外,build: .期望您的Dockerfile与您的项目位于同一位置。因此,如果您在其他地方创建此docker-compose.yml,则必须提供路径。
  • depends_on允许您的应用在运行rails之前构建数据库

完成创建docker-compose.yml文件后: docker-compose build 其次是: docker-compose up

如果分离容器,不是您正在寻找的东西:那么您可能想要创建一个运行两个应用程序的单个映像。然后使用这样的东西从docker-compose运行。

version: '3'
services:
  app:
    image: {your-app-image}
    build: .
volumes:
  - .:/myapp
ports:
  - "3000:3000"
  - "3306:3306"

注意:根据Dockerfile创建图像的方式,某些方面可能会有所不同。