我有以下docker-compose.yml
文件在本地工作:
mongodb:
image: mongo
command: "--smallfiles --logpath=/dev/null"
web:
build: .
command: npm run dev
volumes:
- .:/myapp
ports:
- "3001:3000"
links:
- mongodb
environment:
PORT: 3000
NODE_ENV: 'development'
seed:
build: ./seed
links:
- mongodb
当我部署到我的服务器时,我需要在docker-compose.yml
文件中更改两件事:
web:
command: npm start
environment:
NODE_ENV: 'production'
我想在每次部署后编辑文件并不是最舒服的方法。关于如何在docker-compose.yml
文件中干净地管理环境的任何建议?
答案 0 :(得分:2)
通常的方法是使用Compose覆盖文件。默认情况下,docker-compose会在启动时读取两个文件docker-compose.yml
和docker-compose.override.yml
。您可以在后者中添加任何想要覆盖的内容。所以:
# docker-compose.yml
mongodb:
image: mongo
command: "--smallfiles --logpath=/dev/null"
web:
build: .
command: npm run dev
volumes:
- .:/myapp
ports:
- "3001:3000"
links:
- mongodb
environment:
PORT: 3000
NODE_ENV: 'development'
seed:
build: ./seed
links:
- mongodb
此外:
# docker-compose.override.yml
web:
command: npm start
environment:
NODE_ENV: 'production'
然后您可以运行docker-compose up
并获得生产设置。如果您只是想要开发者,那么您可以运行docker-compose -f docker-compose.yml up
。
更好的方法是以相关方式命名您的撰写文件。因此,docker-compose.yml
变为development.yml
,docker-compose.override.yml
变为production.yml
或其他内容。然后,您可以运行docker-compose -f development -f production up
进行生产,只需docker-compose -f development
进行开发。您可能还想查看docker-compose的extends
functionality。
答案 1 :(得分:0)
试着用我的方式。
This is我的django项目的一个例子,我在码头上运行。
web
它意味着生产然后第二个是devweb
它
发展的手段。 您可以使用docker-compose命令运行。 例如:
docker-compose -p $(PROJECT) up -d web
生产docker-compose -p $(PROJECT) up --no-deps -d devweb
发展无论如何,我使用Makefile来管理所有docker-compose的命令,这让我变得非常轻松。我只需要运行make command name
来执行命令。
愿这个答案对你有所帮助。