我们在构建自己的
docker镜像时,总是希望自己构建的镜像尽可能的小,那么我们可以使用
docker
multi-stage(多阶段)来构建镜像。
下文,我们来演示一个例子,比较一下普通构建镜像和多阶段构建镜像的镜像大小。

注意:

  1. multi-stage需要 docker 17.05 或更高的版本上才可以使用。
  2. 参考的官方文档 multi-stage

一、需求

我们使用git来下载一个maven项目,然后构建成一个镜像,比较一下普通构建和使用multi-stage构建的镜像的体积大小。

二、普通构建

1、编写Dockerfile

Dockerfile文件的名字为 Dockerfile-old

FROM maven:3.6.2-jdk-11-slim
RUN apt-get update \
&& apt-get install -y git \
&& git clone https://gitee.com/huan1993/quartz-manager.git \
&& cd quartz-manager \
&& mvn clean package
EXPOSE 9090
ENTRYPOINT ["java","-jar","/quartz-manager/target/quartz-manager-0.0.1-SNAPSHOT.jar"]

2、构建镜像

docker build -t quartz-manager-old -f Dockerfile-old .

三、多阶段(multi-stage)构建

1、编写Dockerfile

Dockerfile文件的名字为 Dockerfile-multi-stage

FROM maven:3.6.2-jdk-11-slim AS build
RUN apt-get update \
&& apt-get install -y git \
&& git clone https://gitee.com/huan1993/quartz-manager.git \
&& cd quartz-manager \
&& mvn clean package FROM openjdk:11.0.5-jre-slim-buster
COPY --from=build /quartz-manager/target/quartz-manager-0.0.1-SNAPSHOT.jar .
EXPOSE 9090
ENTRYPOINT ["java","-jar","./quartz-manager-0.0.1-SNAPSHOT.jar"]

注意:

  1. 多阶段构建是写在一个Dockerfile文件中的,可以看出里面有2个FROM等
  2. FROM maven:3.6.2-jdk-11-slim AS build 后方的 这个 build 表示为我们的构建阶段取一个名字
  3. COPY --from=build 中的--from=build 表示从build这个阶段中拷贝内容。

2、构建镜像

docker build -t quartz-manager-multi-stage -f Dockerfile-multi-stage .

四、比较2个镜像的体积大小


多阶段镜像的构建可以帮助我们减小构建后的镜像的体积大小,但是需要注意的是 17.05 及以后的版本才可以使用。

最新文章

  1. .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
  2. winform窗体(五)——布局方式
  3. 【leetcode】Longest Valid Parentheses
  4. Node.js 使用 soap 模块请求 WebService 服务接口
  5. HDU 1253 胜利大逃亡
  6. (easy)LeetCode 198.House Robber
  7. MyEclipse10.0 安装 jbpm4.4
  8. 【行为型】Memento模式
  9. Android测试点
  10. flex 垂直居中、两列对齐、自适应宽
  11. Linux - 账户切换授权
  12. 2017-2018-2 165X 『Java程序设计』课程 助教总结
  13. 【UOJ Round #1】
  14. codeforces水题100道 第九题 Codeforces Beta Round #63 (Div. 2) Young Physicist (math)
  15. WinDbg远程调试unable to initialize target machine information win32 error 0n87
  16. Unity3d dll 热更新 基础框架
  17. onsubmit解惑
  18. hdu 1401
  19. 如何指定安装webpack
  20. 高通Android display分析【转】

热门文章

  1. 异步处理方式之信号(三):kill、raise、alarm、pause函数简介
  2. 转:C#根据条件设置datagridview行的颜色
  3. uni-app 登录Abp VNexe并获取Token
  4. 搭建http文件服务器 - Windows使用IIS搭建http文件服务器
  5. Park-2018论文
  6. linux帐户安全管理与技巧
  7. 超详细的VMware安装ubuntu教程
  8. 前端规范之JS代码规范(ESLint + Prettier)
  9. Git提交时默认编辑器Vim换成Notepad++
  10. mysql从零开始之MySQL UPDATE 更新