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

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

以一个java项目为例,因为java编译的时候需要jdk,而运行的时候只需要jre。同时由于各种构建工具的存在(比如gradle),下载的构建用的文件也很多,不光是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支持的是多阶段构建,所以如果有需要的话,可以从多个不同的构建中获得生成物。

原文出处:huangyunkun -> https://www.huangyunkun.com/2017/09/18/use-docker-multi-stage-build-small-image/

本站所发布的一切资源仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如果侵犯你的利益,请发送邮箱到 [email protected],我们会很快的为您处理。