【问题标题】:How to create Mysql test database in dockerized Rails application?如何在 dockerized Rails 应用程序中创建 Mysql 测试数据库?
【发布时间】:2017-11-10 14:29:03
【问题描述】:

我设法将在 Mysql 数据库上运行的现有 Rails 应用程序 dockerize。但是我想知道是否可以设置 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 吗?

【问题讨论】:

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


    【解决方案1】:

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

    HTH

    【讨论】:

      【解决方案2】:

      是的,你可以,但它不一定是单个容器,而是耦合容器的管理器。如果没问题,我添加了一些步骤来帮助您配置项目。 如果没有,我添加了如何从 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 创建图像的方式可能会有所不同。

      【讨论】:

      • 谢谢,但如前所述,它已经适用于我的 docker 和 docker-compose。问题是我是否可以在同一个容器中创建数据库
      • Np。我有点参考了你如何解决这个问题。我认为如果您尝试在一个容器中创建整个应用程序,您可能想尝试在 Dockerfile 中添加更多层以包含 MySQL 应用程序和依赖项 - 然后公开额外的端口。我不知道你是否可以直接从 docker-compose 合并容器。也许有人可以回答并教我们两个。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2017-11-01
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 2016-11-16
      • 1970-01-01
      相关资源
      最近更新 更多