我设法将我在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吗?
答案 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
创建图像的方式,某些方面可能会有所不同。