使用 Java 进行 Docker 多阶段构建的完整指南

随着Docker CE 17.05(EE 17.06)的发布,它引入了开发人员世界,通过将映像构建过程分为多个阶段或您可以称之为的多阶段构建来帮助创建瘦Docker映像。

现在,使用Docker多阶段构建,您可以重用一个阶段和另一阶段产生的工件。 此功能的最终好处是可以帮助创建较小的图像。 以前,为Java应用程序构建Docker映像很困难,因为它涉及到构建整个应用程序,然后将生成的工件打包到映像中。

Java开发人员必须强制使用Maven或Gradle来构建JAR或WAR文件。 使用Maven基本映像时,需要从已配置的存储库下载依赖项,以将其保留在映像中以构建应用程序。 本地存储库中的JAR数量主要取决于pom.xml依赖项的数量。

使用老方法构建Dockerfile会产生以下几个问题:

  • 通过使用Maven,您可以限制图像中可用的功能。为此,您需要下载WildFly并显式配置它。
  • 下载WildFly并显式配置它。下载WildFly并显式配置它。
  • 当您构建驻留在映像中并在运行时导致映像大小不必要膨胀的工件时,将下载所有maven依赖项。
  • 创建映像之后,单元测试在打包不需要的工件和集成测试之前运行

让我们看看如何使用多阶段构建来解决这些问题。

什么是Docker多阶段构建? 首先,回想一下Docker是什么?

Docker是一种容器化技术,它允许创建和使用Linux容器。它允许您使用完整的运行时环境来打包和隔离应用程序,而容器化的应用程序从一个环境迁移到另一个环境要容易得多,同时保留了它们的所有功能。这样的容器化应用程序可以转换成docker映像,以便于共享。

除此之外,由于指令遵循每个FROM语句创建中间映像,因此多阶段构建允许在Dockerfile中使用多个FROM语句。 最后的或最终的FROM语句是最终的基础映像。 您可以将第一张基本图像从0开始的中间阶段的工件复制为-COPY --from =。 留下来的文物将被丢弃。

Docker多阶段构建的优点: •仅需要一个Dockerfile即可构建整个过程,并且不需要具有单独的Dockerfile即可使用卷映射在“ build”和“ run”之间协调传输操作系统工件。 •为了满足运行时需求,需要适当选择最终映像的基础映像,这有助于减小运行时映像的整体大小。 •使用标准的WildFly基本映像,而不是手动下载和配置发行版,它使每次发布新标签时更新映像变得容易得多。

至少要知道这个

在本文中,我们总结了一个使用Java开发服务的Docker多阶段构建的快速指南。它允许通过简单地使用一个Dockerfile生成一个生产级的Docker映像,还允许您知道如何启动一个临时Postgres容器。最后,您需要使用Makefile所需的所有参数调用docker构建命令。你可以很容易地在GitHub上获得任何应用程序的Dockerfile和Makefile。编码快乐!

from: https://dev.to//charlesrich324/a-complete-guide-on-docker-multi-stage-build-with-java-1mi9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值