蓝易云

Docker 多阶段构建 SpringBoot 项目

558次阅读
没有评论

共计 918 个字符,预计需要花费 3 分钟才能阅读完成。

一、什么是多阶段构建?

我们知道 docker 镜像是分层的,每多一层都会让构建出来的镜像变大。而且构建环境有很多运行时不必要的东西,也就意味着很有可能构建出来 1-2g 的镜像运行其实只需要 100m,那有没有办法能够解决这种尴尬的情况呢?

Docker 17.05 版本以后允许 Dockerfile 支持多个 FROM 指令了,这也就意味着我们可以将构建环境与运行环境分开。多个 FROM 命令,即多阶段构建

比如制作一个 srpingboot 项目的 docker 镜像,可以先拉取一个带有 maven 命令的镜像,下载源码后进行打包操作,打好 jar 包以后,只需要有 java 环境的镜像就可以运行。

二、多阶段构建 springboot 项目

例如现在有一个 springboot 项目,目录结构如下:

Docker 多阶段构建 SpringBoot 项目

熟悉 springboot 项目的话应该很清楚,比起一般的项目就多一个 dockerfile 文件,内容如下:

FROM maven:3-jdk-8 AS builder
WORKDIR /workspace
COPY . /workspace
RUN mvn clean install -Dmaven.test.skip=true

FROM  openjdk:8-jre-alpine
WORKDIR /workspace
COPY --from=builder /app/target/*.jar /workspace/app.jar
ENTRYPOINT ["java","-jar","-Xms64m","-Xmx128m","h5.jar"]

重要的是 COPY --from=builder /app/target/*.jar /workspace/app.jar 代表从某个阶段拷贝文件。当然你也可以用COPY --from=0 /app/target/*.jar /workspace/app.jar,COPY --from=0是指从第一个阶段的构建结果中拷贝文件,如果有更多阶段依此类推。

使用上面的 dockerfile 就可以有效减小镜像的大小,并且在服务器本地没有任何打包或者运行环境的时候只需要源码就可以构建镜像。

在开发调试过程中,也可以保留某个阶段的现场,执行构建阶段:

docker build --target builder -t test .

提醒:本文发布于825天前,文中所关联的信息可能已发生改变,请知悉!

AD:【腾讯云服务器大降价】2核4G 222元/3年 1核2G 38元/年
正文完
 0
阿蛮君
版权声明:本站原创文章,由 阿蛮君 于2022-09-03发表,共计918字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
Copyright © 2022-2024 阿蛮君博客 湘ICP备2023001393号
本网站由 亿信互联 提供云计算服务 | 蓝易云CDN 提供安全防护和加速服务
Powered by Wordpress  Theme by Puock