如何在 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
我设法在 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