Docker组合,pipe理环境
我有以下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'
我想在每次部署后编辑文件并不是最舒服的方法。 任何关于如何干净地pipe理docker-compose.yml
文件中的环境的build议?
通常的方法是使用撰写覆盖文件。 默认情况下, docker-compose.yml
-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
并获取生产设置。 如果你只是想dev,那么你可以运行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
for production,而docker-compose -f development
for development。 您也可能想要了解docker-compose的extends
function 。
试试用我的方式。
这是我在docker上运行的django项目的一个例子。
- 首先在docker-compose.yml中,你必须定义两个容器。 首先是
web
它的生产手段然后是devweb
它意味着发展。 - 如果你使用dockerfile你可以创build分离的dockerfile( Dockerfile :用于生产, Dockerfile-dev用于开发)。
通过这个,你可以使用docker-compose命令来运行。 例如 :
-
docker-compose -p $(PROJECT) up -d web
for production -
docker-compose -p $(PROJECT) up --no-deps -d devweb
进行开发
无论如何,我使用Makefile来pipe理所有docker-compose的命令,它使我非常容易。 我只需要运行make command name
来执行命令。
愿这个答案帮助你。