Docker撰写,管理环境

时间:2016-06-05 10:27:05

标签: docker docker-compose environment

我有以下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文件中干净地管理环境的任何建议?

2 个答案:

答案 0 :(得分:2)

通常的方法是使用Compose覆盖文件。默认情况下,docker-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并获得生产设置。如果您只是想要开发者,那么您可以运行docker-compose -f docker-compose.yml up

更好的方法是以相关方式命名您的撰写文件。因此,docker-compose.yml变为development.ymldocker-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项目的一个例子,我在码头上运行。

  1. 首先在docker-compose.yml中,您必须定义两个容器。 首先是web它意味着生产然后第二个是devweb它 发展的手段。
  2. 如果使用dockerfile,则可以创建分隔的dockerfile (Dockerfile:用于生产,Dockerfile-dev用于开发)。
  3. 您可以使用docker-compose命令运行。 例如:

    1. docker-compose -p $(PROJECT) up -d web生产
    2. docker-compose -p $(PROJECT) up --no-deps -d devweb 发展
    3. 无论如何,我使用Makefile来管理所有docker-compose的命令,这让我变得非常轻松。我只需要运行make command name来执行命令。

      愿这个答案对你有所帮助。