使用Docker多阶段构建生成更小的镜像

18 9月

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2017/09/18/use-docker-multi-stage-build-small-image/

在将源码直接打为Docker镜像的时候,经常纠结的一个问题就是如何获得更小的镜像。

以一个java项目为例,因为java编译的时候需要jdk,而运行的时候只需要jre,明显jre的大小更有优势。同时由于各种构建工具的存在(比如gradle,maven),下载的构建用的文件也很多,不光是maven的依赖,还有wrapper和一些临时文件。

之前的做法一直是使用两个Dockerfile,其中一个使用jdk构建出需要的jar文件,然后第二个使用jre直接将jar文件复制进去。虽然效果不错,但是还是觉得麻烦。

今天使用Daocloud的时候看到了安全构建这个选项(本质就是两段构建),就突然想到Docker会不会已经有了。结果一搜索还真有,亏我还用多Dockerfile构建了很长时间。

大概使用如下:

FROM openjdk:8 AS build-env
ADD . /java/src/app
WORKDIR /java/src/app
RUN gradlew build

FROM openjdk:jre
RUN apk add -U tzdata
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime
COPY --from=build-env /java/src/app/build/libs/target.jar /usr/local/bin/app-server
EXPOSE 8080
CMD ["app-server"]

Docker支持的是多阶段构建,所以如果有需要的话,可以从多个不同的构建中获得生成物。

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2017/09/18/use-docker-multi-stage-build-small-image/

2 Replies to “使用Docker多阶段构建生成更小的镜像

发表评论

您的电子邮箱地址不会被公开。