Docker 组合、管理环境

标签 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 文件中干净地管理环境有什么建议吗?

最佳答案

通常的方法是使用 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 变为development.yml > 或者什么的。然后,您可以运行 docker-compose -fdevelopment -f production up 进行生产,仅运行 docker-compose -fdevelopment 进行开发。您可能还想查看 extends functionality docker-compose 的。

关于Docker 组合、管理环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37640852/

相关文章:

Docker WORKDIR - 在我的机器上还是容器上?

docker - 使用VS2017发布到容器注册表,如何设置标签或图像名称?

docker - Nginx反向代理不重定向?

java - AWS Lambda 环境中 javac、jar 等二进制文件位于哪个路径?

python - except block 未捕获 ipython 笔记本中的异常

docker - 容器(即 docker)和封装包(即 flatpak、snap)之间的概念和实际区别是什么?

docker - 从 Docker : curl: (56) Recv failure: Connection reset by peer 运行 Jupyter Notebook

docker - 在 "gateway"中找到的 `docker inspect` 是什么?

Docker:如何使用 docker-compose 而不使用 iptables 来防止来自 docker 网络的传出流量?

swift - 如何创建符合 ObservableObject 的数组?