Docker 编写、管理环境

Docker compose, manage environments

我有以下 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 文件中清晰地管理环境有什么建议吗?

通常的方法是使用 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

试试我的方法吧。

This is 我在 docker 上 运行 的 Django 项目示例。

  1. 首先在 docker-compose.yml 中您必须定义两个容器。 第一个是 web 它意味着生产然后第二个是 devweb 它 发展的手段。
  2. 如果您使用 docker 文件,您可以创建单独的 docker 文件 (Dockerfile : for production, and Dockerfile-dev 用于开发)。

通过使用 docker-compose 命令,您可以 运行。 例如:

  1. docker-compose -p $(PROJECT) up -d web 用于生产
  2. docker-compose -p $(PROJECT) up --no-deps -d devweb 为 发展

无论如何,我使用Makefile来管理所有docker-compose的命令,这让我很轻松。我只需要 运行 make command name 来执行命令。

希望这个回答对您有所帮助。