多阶段创建镜像

多阶段创建镜像的优点

  1. 减小镜像体积:这是多阶段构建最直接的好处。在传统的Dockerfile构建流程中,往往会包含大量的构建工具、依赖包等,这些都会增加最终镜像的大小。而多阶段构建允许你在第一个阶段安装所有必要的构建工具和依赖,然后在第二个阶段仅复制编译后的应用程序或必需的文件到一个新的基础镜像中,从而排除了构建过程中不需要的全部内容,显著减小了最终镜像的尺寸。

  2. 提高安全性:因为最终的运行镜像不包含任何构建工具或临时文件,这减少了潜在的攻击面。没有了编译器、包管理器等工具,容器运行环境更加精简和安全。

  3. 简化Dockerfile管理:通过在一个Dockerfile中定义多个阶段,你无需维护多个Dockerfile文件,这不仅简化了CI/CD流程,也使得构建逻辑更加集中和易于理解。

  4. 加速构建过程:Docker能够利用构建缓存机制,特别是在多阶段构建的第一阶段,即使源代码或依赖有变化,基础构建环境和工具链这部分可以重用缓存,从而加快整体构建速度。

  5. 提升开发效率:开发人员可以在同一份Dockerfile中完成从构建到打包的全过程,减少了环境配置的复杂度,使得从开发到部署的流程更加顺畅。

  6. 增强可读性和维护性:多阶段构建的Dockerfile清晰地分离了构建环境与运行环境,使得代码更加模块化,便于理解和后期维护。

不使用多阶段创建镜像

mkdir demo 
cd demo/ 
#编写一个c语言的小程序
cat >> demo.c << EOF
# include 
int main() 
{ 

printf("%s\n","This is a demo!"); 
return 0; 
}  

EOF
 
#编写dockerfile
cat >> Dockerfile << EOF
FROM centos:7.6.1810 
 
ENV VERSION 1.0 
 
WORKDIR /demo 
 
COPY demo.c . 
 
RUN yum install -y gcc && \ 
 gcc -v 
RUN gcc demo.c -o demo && \ 
 rm -f demo.c && \ 
 yum erase -y gcc && \ 
 cp demo /usr/local/bin/ 
 
CMD ["demo"] 
EOF

docker build -t demo:v1 .
docker images demo 

使用多阶段创建镜像

#更改Dockerfile文件
cat > Dockerfile << EOF
FROM centos:7.6.1810 
 
ENV VERSION 1.0 
 
WORKDIR /demo 
 
COPY demo.c . 
 RUN yum install -y gcc && \ 
 gcc -v 
RUN gcc demo.c -o demo && \ 
 rm -f demo.c && \ 
 yum erase -y gcc && \ 
 cp demo /usr/local/bin/ 
 
FROM centos:7.6.1810 
# --from 表示从第一个 FROM 的流程里面复制 
COPY --from=0 /usr/local/bin/demo /usr/local/bin/demo 
 
CMD ["demo"] 
EOF

docker build -t demo:v2 . 

docker images demo 
REPOSITORY TAG IMAGE ID CREATED SIZE 
demo v2 c05a904e23a7 3 seconds ago 202MB 
demo v1 4575ab954243 2 minutes ago 526MB 
#使用多阶段和不使用多阶段创建镜像相差的还是非常多的

  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值