内容简介:方法。这篇文章是关于利用Jib,更具体地说是这篇文章中使用的演示项目可以在
方法。
这篇文章是关于利用Jib,更具体地说是 jib-maven-plugin 来构建容器化的spring boot应用程序。Jib可以让不写Dockerfile就能实现 Docker 打包。
这篇文章中使用的演示项目可以在 这里 找到。
什么是Jib
Jib带来的是,它允许您通过简单地将插件添加到您选择的构建工具(Maven或Gradle)来创建容器。没有额外的文件,只需几行配置,它处理将应用程序打包到容器映像的所有步骤。
使用Google云团队 自己的话 :
Jib是来自Google的开源 Java 容器,它允许Java开发人员使用他们所知道的Java工具构建容器。它不需要您编写Dockerfile或安装了docker,它直接集成到 Maven 和 Gradle中 。
在“传统”Java到Docker映像构建流程中,我们需要安装Dockerfile和docker守护进程。在Jib构建流程中,您只需要插件项目的构建文件。
构建
设置Java开发环境不属于本文的范围,但让我们试一试!
- 确保安装了 Java 8+ 。
- 我们将使用maven,所以如果不存在安装 maven 3.5+ 。
- 确保已 安装 docker ,如果您使用的是Linux,则 您的用户具有docker访问权限 。
- 安装了您最喜欢的IDE( eclipse 或 idea )
创建一个基本的spring boot应用程序
这可以通过spring initializr 或您喜欢的IDE来完成。如果您使用了spring initializr,则需要将新创建的maven项目导入IDE( eclipse / idea )。
将jib-maven-plugin添加到您的pom.xml中
对于应用程序的基本本地存储镜像,请在pom.xml以下内容中配置jib-maven-plugin :
<build> <plugins> <plugin> ... </plugin> ... <plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>0.10.1</version> <configuration> <to> <image>springbootjib</image> </to> </configuration>‘
编译应用程序并构建镜像
现在我们可以构建应用程序并检查镜像是否在我们的本地docker存储库中创建。
通过终端转到项目的根文件夹,然后执行:
mvn compile jib:dockerBuild
Maven构建日志应包含如下行:
[INFO] — — jib-maven-plugin:0.10.1:dockerBuild (default-cli) @ spring-boot-jib — - <p>[INFO] <p>[INFO] Containerizing application to Docker daemon as springbootjib… <p>[WARNING] Base image ‘gcr.io/distroless/java’ does not use a specific image digest — build may not be reproducible <p>[INFO] Getting base image gcr.io/distroless/java… <p>[INFO] Building dependencies layer… <p>[INFO] Building resources layer… <p>[INFO] Building classes layer… <p>[INFO] Finalizing… <p>[INFO] <p>[INFO] Container entrypoint set to [java, -cp, /app/resources:/app/classes:/app/libs/*, com.jibdemo.SpringBootJibApplication] <p>[INFO] Loading to Docker daemon… <p>[INFO] <p>[INFO] Built image to Docker daemon as springbootjib
只要没有错误,我们就会看到maven“ Built image to Docker daemon as springbootjib”我们都已经确定了。
运行docker镜像
我们应该在本地存储库中拥有新的docker镜像。我们可以通过执行检查docker image ls,我们应该看到类似于这样的镜像:
springbootjib latest eb4bea693650 3 hours ago 135MB
请注意非常小的(135mb)镜像大小,这是由于gcr.io/distroless/javaJib默认使用的镜像(我们将在稍后看到如何更改)。
因此,现在我们可以像往常一样通过键入docker run -it springbootjib并验证应用程序是否按预期运行来运行镜像。
配置Jib插件以微调我们的Docker镜像
我们可以深入挖掘,并进一步配置Jib插件,以适应几种常见的场景,例如登录docker存储库,暴露端口,选择特定的基本映像等。
例如,在以下配置中:
- 从openjdk:alpine(从Docker Hub拉出)的基础构建的
- push推送到localhost:5000/springbootjib:0.0.1-SNAPSHOT,localhost:5000/springbootjib:alpine和localhost:5000/springbootjib:latest
- 运行调用: java -Xms256m -Xdebug -cp app/libs/*:app/resources:app/classes com.jibdemo.SpringBootJibApplication some args
- 公开端口8001用于tcp(默认),端口8002和8003用于udp
- 设置一个标签(名称:springbootjib)
- 构建为 OCI 格式
<configuration> <from> <image>openjdk:alpine</image> </from> <to> <image>localhost:5000/springbootjib:0.0.1-SNAPSHOT</image> <credHelper>osxkeychain</credHelper> <tags> <tag>alpine</tag> <tag>latest</tag> </tags> </to> <container> <jvmFlags> <jvmFlag>-Xms256m</jvmFlag> <jvmFlag>-Xdebug</jvmFlag> </jvmFlags> <ports> <port>8081</port> <port>8082-8083/udp</port> </ports> <labels> <name>springbootjib</name> </labels> <format>OCI</format> </container> </configuration>
在,您可以再次构建镜像,并查看maven日志中的差异:
[INFO] --- jib-maven-plugin:0.10.1:dockerBuild (default-cli) @ spring-boot-jib --- <p>[INFO] <p>[INFO] Containerizing application to Docker daemon as localhost:5000/springbootjib:0.0.1-SNAPSHOT, localhost:5000/springbootjib:alpine, localhost:5000/springbootjib... <p>[INFO] Getting base image openjdk:alpine... <p>[INFO] Building dependencies layer... <p>[INFO] Building resources layer... <p>[INFO] Building classes layer... <p>[INFO] The base image requires auth. Trying again for openjdk:alpine... <p>[INFO] Retrieving registry credentials for registry.hub.docker.com... <p>[INFO] Finalizing... <p>[INFO] <p>[INFO] Container entrypoint set to [java, -Xms256m, -Xdebug, -cp, /app/resources:/app/classes:/app/libs/*, com.jibdemo.SpringBootJibApplication] <p>[INFO] Loading to Docker daemon... <p>[INFO] <p>[INFO] Built image to Docker daemon as localhost:5000/springbootjib:0.0.1-SNAPSHOT, localhost:5000/springbootjib:alpine, localhost:5000/springbootjib
请注意,在上面的日志段中,插件openjdk:alpine从 Docker Hub中 提取镜像,将镜像构建为三个不同标记的版本,并将它们存储在我们的本地存储库中。
为什么用Jib?
- 不需要维护Dockerfile,运行Docker守护程序,甚至无需创建具有所有依赖项的胖JAR。
- 利用图像分层和注册表缓存来实现快速,增量的构建。
- 只要输入保持不变,就可以将其配置为创建可重现的构建映像。
结论
如果使用过像 spotify 和 fabric8 那样的其他maven插件来为java应用程序创建 docker 图像,建议你使用Google的jib,它需要的文件少于fabric8的插件,并且(我认为)比spotify的插件更容易配置。我当然建议你试一试!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Node.js实战
[美] Mike Cantelon、[美] TJ Holowaychuk、[美] Nathan Rajlich / 吴海星 / 人民邮电出版社 / 2014-5 / 69.00元
服务器端JavaScript?没错。Node.js是一个JavaScript服务器,支持可伸缩的高性能Web应用。借助异步I/O,这个服务器可以同时做很多事情,能满足聊天、游戏和实时统计等应用的需求。并且既然是JavaScript,那你就可以全栈使用一种语言。 本书向读者展示了如何构建产品级应用,对关键概念的介绍清晰明了,贴近实际的例子,涵盖从安装到部署的各个环节,是一部讲解与实践并重的优秀......一起来看看 《Node.js实战》 这本书的介绍吧!
UNIX 时间戳转换
UNIX 时间戳转换
RGB CMYK 转换工具
RGB CMYK 互转工具