gpt4 book ai didi

docker - 用于生产的Dockerfile “right approach”是什么?

转载 作者:行者123 更新时间:2023-12-02 21:06:22 24 4
gpt4 key购买 nike

在docker之前:
我曾经构建Release版本并对它们进行一组测试。这些位已从单元测试测试到Comp,Functional,E2E等。

使用docker:
1)我有一个CI管道来测试这些位,但是...
2)使用Docker文件,我同时构建并推送图像上的位。因此,考虑到非确定性构建系统,这是有风险的。我可以通过任何方式编写Dockerfile来解决此问题,还是您采用什么方法?

我作为示例使用的.net核心的Dockerfile:

COPY . .
COPY /service /src/service

RUN dotnet build "src/service/ConsoleApp1/ConsoleApp1.csproj" -c release -o /app

FROM build AS publish
RUN dotnet publish "src/service/ConsoleApp1/ConsoleApp1.csproj" -c release -o /app

WORKDIR /app

FROM runtime AS final
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "ConsoleApp1.dll"]

最佳答案

首先,我们的构建系统应该是确定性的-如果不是,则您有问题。
至于您的Dockerfile:显示的文件实际上是三个图像-第一个构建代码,第二个发布代码,最后一个执行代码。

好的管道通常如下所示:

构建和单元测试-如果单元测试失败,则中止构建。
如果单元测试为绿色,则将生成的镜像发布到您选择的Docker注册表。

在开发环境中使用该镜像,例如pp。现在运行您需要的任何E2E,IT测试等。仅且仅当您的所有测试都恢复为绿色时,才能将图像推广到生产环境,例如将它们从开发人员转移到生产人员。根据解决方案的不同,您的开发环境可能看起来完全不同-如果您要部署单个服务,请直接运行e2e测试,但是也许您需要设置一个复杂的集群,因此请在这样的测试上运行测试簇。

由于镜像由于docker的性质而无法更改,因此您可以安全地将镜像从开发人员升级到生产环境。但是您需要确保您永远不会覆盖注册表中的图片,例如避免使用最新标签,并使用显式标签甚至​​sha256标签。

关于docker - 用于生产的Dockerfile “right approach”是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57761748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com