CI/CD:所有环境一个 dockerfile 或每个环境一个 dockerfile

CI/CD: One dockerfile for all environments or one dockerfile per environment

我有 dev / test / preprod / prod 环境和 GitLab CI/CD。根据最佳实践,我应该:

首先,我认为为所有环境提供一个独特的配置是容器的优势。但就我而言,对于我的 angular 应用程序,我有 很多开发依赖项 (例如虚拟浏览器)用于测试目的,这些不应该在 prod环境。

我应该如何组织我的容器?

我创建了一个基本图像并将其上传到我的注册表。它具有最少的应该投入生产的核心软件。

出于开发和测试目的,我基于基础镜像创建了不同的 Dockerfile。

例如,出于休息目的,我在基本图像上安装了测试框架,为了开发目的,我更改了基本图像中用户的用户和组 ID。 (所以当我绑定挂载时,我在本地不会有权限问题)

出于 CI 目的,我也这样做。

当我想推送到生产环境时,我从 CI 获取基础图像 + 工件 + 生产配置并将它们捆绑在生产图像中。

长话短说,一个基础镜像 (Dockerfile) 和基于基础镜像的每个上下文的不同 Dockerfile。

通过此设置,我可以确定我将在所有环境中拥有相同版本的核心软件。