网站首页 > java教程 正文
如今容器使 Java 开发者比以往任何时候都更靠近“一次编写,随处运行” 的工作流程,但容器化 Java 应用却并非易事:你必须先编写 Dockerfile ,root 后运行 Docker 守护进程,等待构建完成,最后将镜像推送至远程注册表。
Jib 将处理将应用打包到容器镜像过程中的所有步骤,它直接与 Maven 和 Gradle Java 开发环境集成,不需要你编写 Dockerfile 或安装 Docker ,只需将其作为插件添加到你的构建中,就可以立即将 Java 应用容器化。
如下是Docker构建流程和Jib构建流程的区别,我们可以看到Jib构建相当简单,省去了Docker构建复杂的过程
Docker 构建流程:
Jib 构建流程:
Jib 提供了如下四种方式构建,我们今天使用Maven插件的方式来构建一下。
- Maven:请参阅有关jib-maven-plugin的文档。
- Gradle:请参阅文档jib-gradle-plugin。
- Jib Core:Java的通用容器构建库。
- Jib CLI:使用Jib Core构建图像的命令行界面
首先在springboot项目的pom.xml中添加jib插件,如下:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.6.0</version>
<configuration>
<from>
<!--使用openjdk官方镜像,tag是8-jdk-stretch,表示镜像的操作系统是debian9,装好了jdk8-->
<image>openjdk:8-jdk-stretch</image>
</from>
<to>
<!--此处我设置的是推送到我的docker hub仓库-->
<image>aimr0215/hellojib:${project.version}</image>
</to>
</configuration>
</plugin>
在pom.xml文件所在目录执行以下命令即可自动推送到 hub.docker.com,其中aimr0215是我在hub.docker.com上的注册账号,密码此处省略。填入你自己注册的账号密码即可。执行如下命令
mvn compile jib:build -Djib.to.auth.username=填写你的账号 -Djib.to.auth.password=填写你的密码
运行结果如下:
[INFO] Scanning for projects...
[INFO]
[INFO] ------------------------< com.hzp:jib-project >-------------------------
[INFO] Building jib-project 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ jib-project ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ jib-project ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- jib-maven-plugin:2.6.0:build (default-cli) @ jib-project ---
[WARNING] 'mainClass' configured in 'maven-jar-plugin' is not a valid Java class: ${start-class}
[INFO]
[INFO] Containerizing application to aimr0215/hellojib:0.0.1-SNAPSHOT...
[WARNING] Base image 'openjdk:8-jdk-stretch' does not use a specific image digest - build may not be reproducible
[INFO] Using credentials from <to><auth> for aimr0215/hellojib:0.0.1-SNAPSHOT
[INFO] The base image requires auth. Trying again for openjdk:8-jdk-stretch...
[WARNING] The credential helper (docker-credential-desktop) has nothing for server URL: registry-1.docker.io
[WARNING]
Got output:
credentials not found in native keychain
[WARNING] The credential helper (docker-credential-desktop) has nothing for server URL: registry.hub.docker.com
[WARNING]
Got output:
credentials not found in native keychain
[INFO] Using credentials from Docker config (/Users/hzp/.docker/config.json) for openjdk:8-jdk-stretch
[INFO] Using base image with digest: sha256:d8d62fe0d8e9f3e6e62921c7d738c9a962efd6887b2b282dc2f852d7f1ee4512
[INFO]
[INFO] Container entrypoint set to [java, -cp, /app/resources:/app/classes:/app/libs/*, com.hzp.jibproject.JibProjectApplication]
[INFO]
[INFO] Built and pushed image as aimr0215/hellojib:0.0.1-SNAPSHOT
[INFO] Executing tasks:
[INFO] [==============================] 100.0% complete
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 03:02 min
[INFO] Finished at: 2020-11-24T18:00:07+08:00
[INFO] ------------------------------------------------------------------------
然后我们打开docker hub网站已经可以看到推送上去的镜像文件。
经过上述操作,一个项目的镜像文件就制作完成了。更多的操作可以参考jib官方github:
https://github.com/GoogleContainerTools/jib
猜你喜欢
- 2025-01-04 详解docker容器的资源监控方案
- 2025-01-04 为什么建议一个容器中只运行一个进程
- 2025-01-04 JAVA网络编程基本功之Servlet与Servlet容器
- 2025-01-04 云原生的基于容器的开发:Quarkus改进了Java
- 2025-01-04 Java容器化参数配置最佳实践
- 2025-01-04 为啥Java应用迁移到容器后会出现OOM?
- 2025-01-04 Java并发容器及使用场景
- 2025-01-04 知识整理——Java 并发容器
- 2025-01-04 用项目案例彻底理解Spring IOC容器
- 2025-01-04 Java面试题:Spring容器启动流程是怎样的?
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)