【问题标题】:CI/CD: One dockerfile for all environments or one dockerfile per environmentCI/CD:所有环境一个 dockerfile 或每个环境一个 dockerfile
【发布时间】:2019-03-08 02:30:18
【问题描述】:
我有带有 GitLab CI/CD 的 dev / test / preprod / prod 环境。根据最佳实践,我应该:
-
每个环境有一个 dockerfile 吗?
- 有一个适用于所有环境的 dockerfile 吗?
首先,我认为为所有环境提供一个独特的配置是容器的优势。但在我的情况下,对于我的 Angular 应用程序,我有 很多开发依赖项(例如虚拟浏览器)用于测试目的,这些不应该在 prod 环境中。
我应该如何组织我的容器?
【问题讨论】:
标签:
docker
continuous-integration
containers
continuous-deployment
【解决方案1】:
我创建了一个基础映像并将其上传到我的注册表。它拥有最少的核心软件,应该投入生产。
出于开发和测试目的,我根据基础镜像创建不同的 Dockerfile。
例如,出于休息目的,我在基础镜像上安装了测试框架,出于开发目的,我在基础镜像中更改了用户的用户和组 ID。 (所以当我绑定挂载时,我本地不会有权限问题)
出于 CI 的目的,我也这样做。
当我想推送到生产环境时,我会从 CI + config 中获取基础映像 + 工件用于生产,并将它们捆绑到生产映像中。
长话短说,一个基础镜像 (Dockerfile) 和基于基础镜像的每个上下文的不同 Dockerfile。
通过此设置,我可以确定我将在所有环境中拥有相同版本的核心软件。