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

How to create Mysql test database in dockerized Rails application?

我设法在 Mysql 数据库上 docker 化我现有的 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?

是的,你可以,但它不一定是单个容器,而是耦合容器的管理器。如果没问题,我添加了一些步骤来帮助您配置项目。 如果没有,我已经添加了如何从 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: . 期望您的 Docker 文件与您的项目位于同一位置。因此,如果您在其他地方创建此 docker-compose.yml,则必须提供路径。
  • depends_on 允许您的应用在 运行ning 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 创建图像的方式可能会有所不同。

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

HTH