docker multi-stage 多阶段构建
2024-10-16 04:44:52
我们在构建自己的
docker
镜像时,总是希望自己构建的镜像尽可能的小,那么我们可以使用
docker
的
multi-stage
(多阶段)来构建镜像。
下文,我们来演示一个例子,比较一下普通构建镜像和多阶段构建镜像的镜像大小。
注意:
multi-stage
需要docker 17.05
或更高的版本上才可以使用。- 参考的官方文档 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"]
注意:
- 多阶段构建是写在一个
Dockerfile
文件中的,可以看出里面有2个FROM等 - FROM maven:3.6.2-jdk-11-slim
AS build
后方的 这个build
表示为我们的构建阶段取一个名字 COPY --from=build
中的--from=build
表示从build
这个阶段中拷贝内容。
2、构建镜像
docker build -t quartz-manager-multi-stage -f Dockerfile-multi-stage .
四、比较2个镜像的体积大小
多阶段镜像的构建可以帮助我们减小构建后的镜像的体积大小,但是需要注意的是 17.05 及以后的版本才可以使用。
最新文章
- .NET Core中间件的注册和管道的构建(2)---- 用UseMiddleware扩展方法注册中间件类
- winform窗体(五)——布局方式
- 【leetcode】Longest Valid Parentheses
- Node.js 使用 soap 模块请求 WebService 服务接口
- HDU 1253 胜利大逃亡
- (easy)LeetCode 198.House Robber
- MyEclipse10.0 安装 jbpm4.4
- 【行为型】Memento模式
- Android测试点
- flex 垂直居中、两列对齐、自适应宽
- Linux - 账户切换授权
- 2017-2018-2 165X 『Java程序设计』课程 助教总结
- 【UOJ Round #1】
- codeforces水题100道 第九题 Codeforces Beta Round #63 (Div. 2) Young Physicist (math)
- WinDbg远程调试unable to initialize target machine information win32 error 0n87
- Unity3d dll 热更新 基础框架
- onsubmit解惑
- hdu 1401
- 如何指定安装webpack
- 高通Android display分析【转】