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.ymldocker-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.ymldocker-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项目的一个例子。

  1. 首先在docker-compose.yml中,你必须定义两个容器。 首先是web它的生产手段然后是devweb它意味着发展。
  2. 如果你使用dockerfile你可以创build分离的dockerfile( Dockerfile :用于生产, Dockerfile-dev用于开发)。

通过这个,你可以使用docker-compose命令来运行。 例如 :

  1. docker-compose -p $(PROJECT) up -d web for production
  2. docker-compose -p $(PROJECT) up --no-deps -d devweb进行开发

无论如何,我使用Makefile来pipe理所有docker-compose的命令,它使我非常容易。 我只需要运行make command name来执行命令。

愿这个答案帮助你。