Dockerfile多阶段构建有哪些利弊?
- 内容介绍
- 文章标签
- 相关推荐
本文共计956个文字,预计阅读时间需要4分钟。
从今往后,公司的CI/CD环境都在Jenkins的工作节点上编译,再将编译打包好的目标程序直接使用dockerfile构建镜像。例如,使用.NET程序作为例子,其dockerfile如下所示:
FROM mcr.microsoft.com/dotnet/aspnet
一直以来,公司的CI/CD环境都是在Jenkins的工作节点中编译,再将编译打包好的目标程序直接使用dockerfile构建镜像。
以.NET程序来做例子,其dockerfile是这样的
FROM mcr.microsoft.com/dotnet/aspnet:3.1-focal WORKDIR /app COPY ./publish /app CMD ["dotnet", "testapi.dll"]
Jenkins的shell脚本
dotnet publish -o ./publish docker build -t testapi .
以上做法是不符合docker的理念的,因为工作节点(docker的宿主机)还需要安装对应程序的sdk才可以进行程序的编译打包。
所以我决定对其进行一点改造,通过Dockerfile的多阶段构建,使程序的编译也依赖于docker镜像,这样工作节点就无需自己再去安装SDK了,以后扩展多个工作节点也方便很多。
本文共计956个文字,预计阅读时间需要4分钟。
从今往后,公司的CI/CD环境都在Jenkins的工作节点上编译,再将编译打包好的目标程序直接使用dockerfile构建镜像。例如,使用.NET程序作为例子,其dockerfile如下所示:
FROM mcr.microsoft.com/dotnet/aspnet
一直以来,公司的CI/CD环境都是在Jenkins的工作节点中编译,再将编译打包好的目标程序直接使用dockerfile构建镜像。
以.NET程序来做例子,其dockerfile是这样的
FROM mcr.microsoft.com/dotnet/aspnet:3.1-focal WORKDIR /app COPY ./publish /app CMD ["dotnet", "testapi.dll"]
Jenkins的shell脚本
dotnet publish -o ./publish docker build -t testapi .
以上做法是不符合docker的理念的,因为工作节点(docker的宿主机)还需要安装对应程序的sdk才可以进行程序的编译打包。
所以我决定对其进行一点改造,通过Dockerfile的多阶段构建,使程序的编译也依赖于docker镜像,这样工作节点就无需自己再去安装SDK了,以后扩展多个工作节点也方便很多。

