热点
模块化思维实战:后端站长从0到1构建高效网站,reasoning_content:我们要求以后端站长的口吻,写一个与“技术、科技”相关,关于[从0到1:运用模块化思维与实战技巧,轻松构建高效网站]的标题需要简短精炼,30字以内直接输出标题,不要加说明nn可以考虑:后端站长视角,强调模块化思维和实战技巧,从0到1构建高效网站可能的从0到1:后端站长教你模块化构建高效网站 但字数可能超?数一下:从0到1:后端站长教你模块化构建高效网站 —— 共18个字符(包括标点)?汉字每个算一个字,冒号、空格?严格来说:从0到1:后端站长教你模块化构建高效网站 共16个字(从0到1:后端站长教你模块化构建高效网站,数一下:从0到1:(3个汉字+1个冒号?不,是从0到1是4个字符,但通常算4个?我们按汉字+符号更好的:去掉一些词nn模块化思维实战:后端站长从0到1建高效站 数一下:模块化思维实战:后端站长从0到1建高效站 —— 共18个?模块化思维实战(6字)冒号(1)后端站长(4)从0到1(4)建高效站(4)总19?有点多nn更简洁:模块化构建高效网站:后端站长的从0到1 共14个字?模块化构建高效网站:后端站长的从0到1 —— 13个汉字+1冒号+1数字?其实从0到1是4个字符可以nn或者:后端站长:模块化思维从0到1打造高效网站 共16字?后端站长:模块化思维从0到1打造高效网站 —— 数:后(1)端(2)站(3)长(4):(5)模(6)块(7)化(8)思(9)维(10)从(11)0(12)到(13)1(14)打(15)造(16)高(17)效(18)网(19)站(20) —— 20字,超了nn要控制在30字以内,所以20字以内都行但最好更精炼nn考虑直接用原话中的从0到1和模块化思维、实战技巧、高效网站但题目要求以后端站长口吻,所以可以加上后端站长nn思路:从0到1:后端站长的模块化实战,高效网站轻松建 数一下:从0到1:后端站长的模块化实战,高效网站轻松建 —— 从0到1(4)冒号(1)后端站长(4)的(1)模块化实战(5)逗号(1)高效网站(4)轻松建(3)总共4+1+4+1+5+1+4+3=23字可以nn更简洁:模块化思维实战:后端站长从0到1建高效站 前面数过19字nn或者:后端站长带你从0到1模块化构建高效网站 15字nn注意:要求与技术、科技相关,但标题本身已经涉及nn我会选择:后端站长:模块化思维从0到1轻松构建高效网站 数:后(1)端(2)站(3)长(4):(5)模(6)块(7)化(8)思(9)维(10)从(11)0(12)到(13)1(14)轻(15)松(16)构(17)建(18)高(19)效(20)网(21)站(22) —— 22字可以nn另一个:从0到1:后端站长模块化实战构建高效网站 22字左右nn为了更口语化:从0到1轻松建站:后端站长教你模块化实战 15字?从0到1轻松建站:后端站长教你模块化实战 —— 共18字?nn我最后决定用:从0到1:模块化+实战,后端站长教你轻松建高效站 数:从0到1:模块化+实战,后端站长教你轻松建高效站 —— 共?从(1)0(2)到(3)1(4):(5)模(6)块(7)化(8)+(9)实(10)战(11),(12)后(13)端(14)站(15)长(16)教(17)你(18)轻(19)松(20)建(21)高(22)效(23)站(24) —— 24字略长去掉教你变成从0到1:模块化+实战,后端站长轻松建高效站 22字nn或者直接:模块化思维实战:后端站长从0到1构建高效网站 18字?数一下:模(1)块(2)化(3)思(4)维(5)实(6)战(7):(8)后(9)端(10)站(11)长(12)从(13)0(14)到(15)1(16)构(17)建(18)高(19)效(20)网(21)站(22) —— 22字还是22nn我认为22字完全在30字以内可以输出这个nn注意:不要加任何说明直接输出标题
16 9 月 2026, 周三

谷歌助力,快速实现 Java 应用容器化

副标题#e#

Google 在 2018 年下旬开源了一款新的 Java 工具 Jib,可以轻松地将 Java 应用程序容器化。通过 Jib,我们不需要编写 Dockerfile 或安装 Docker,通过集成到 Maven 或 Gradle 插件,就可以立即将 Java 应用程序容器化。

谷歌助力,快速实现 Java 应用容器化

开源地址: https://github.com/GoogleContainerTools/jib

一、什么是 Jib

Jib 是一个快速而简单的容器镜像构建工具,它作为 Maven 或 Gradle 的一部分运行,不需要编写 Dockerfile 或运行 Docker 守护进程。它从 Maven 或 Gradle 中构建我们的 Docker 镜像, 并只将发生变更的层(而不是整个应用程序)推送到注册表来节省宝贵的构建时间。现在,我们对 Docker 构建流程和 Jib 构建流程进行对比。Docker 构建流程,如下所示。

Jib 构建流程,则是这样的。

二、实战出真知

1. 构建一个简单的 Java 工程

我们编写一个简单的 Java 类。

  1. public class HelloWorld { 
  2.     public static void main(String[] args) { 
  3.         System.out.println("Hello World!"); 
  4.         System.out.println("http://blog.720ui.com"); 
  5.     } 

紧接着,我们再创建一个 pom.xml 文件。

  1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  2.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
  3.     <modelVersion>4.0.0</modelVersion> 
  4.     <groupId>com.lianggzone.sample.lib</groupId> 
  5.     <artifactId>helloworld-samples</artifactId> 
  6.     <version>0.1</version> 
  7.     <packaging>jar</packaging> 
  8.     <name>helloworld-samples</name> 
  9.     <properties> 
  10.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
  11.         <jib-maven-plugin.version>1.0.2</jib-maven-plugin.version> 
  12.         <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version> 
  13.     </properties> 
  14.     <dependencies> 
  15.     </dependencies> 
  16.     <build> 
  17.         <plugins> 
  18.             <plugin> 
  19.                 <groupId>org.apache.maven.plugins</groupId> 
  20.                 <artifactId>maven-compiler-plugin</artifactId> 
  21.                 <version>${maven-compiler-plugin.version}</version> 
  22.                 <configuration> 
  23.                     <source>1.8</source> 
  24.                     <target>1.8</target> 
  25.                 </configuration> 
  26.             </plugin> 
  27.             <!-- Jib --> 
  28.             <plugin> 
  29.                 <groupId>com.google.cloud.tools</groupId> 
  30.                 <artifactId>jib-maven-plugin</artifactId> 
  31.                 <version>${jib-maven-plugin.version}</version> 
  32.                 <configuration> 
  33.                     <from> 
  34.                         <image>registry.cn-hangzhou.aliyuncs.com/lianggzone/oracle_java8</image> 
  35.                     </from> 
  36.                     <to> 
  37.                         <image>registry.cn-hangzhou.aliyuncs.com/lianggzone/jib-helloworld:v1</image> 
  38.                     </to> 
  39.                     <container> 
  40.                         <jvmFlags> 
  41.                             <jvmFlag>-Xms512m</jvmFlag> 
  42.                             <jvmFlag>-Xdebug</jvmFlag> 
  43.                         </jvmFlags> 
  44.                         <mainClass>com.lianggzone.HelloWorld</mainClass> 
  45.                     </container> 
  46.                 </configuration> 
  47.                 <executions> 
  48.                     <execution> 
  49.                         <phase>package</phase> 
  50.                         <goals> 
  51.                             <goal>build</goal> 
  52.                         </goals> 
  53.                     </execution> 
  54.                 </executions> 
  55.             </plugin> 
  56.         </plugins> 
  57.     </build> 
  58. </project> 

#p#副标题#e##p#分页标题#e#

由于默认访问谷歌的 gcr.io 仓库,而国内访问 gcr.io 不稳定会经常导致网络超时,所以笔者使用了国内的阿里云镜像服务,那么就不需要访问谷歌的仓库了。现在,我们执行 mvn compile jib:build 命令进行自动化构建,它会从 <from> 拉取镜像,并把生成的镜像上传到 <to> 设置的地址。这里,笔者还通过 ` 设置了一些 JVM 参数。

  1. mvn compile jib:build 

#p#副标题#e#

此外,如果”登录失败,未授权”,需要通过 docker login 登录鉴权一下。此外,更好的做法是,你可以考虑在Maven 中放置凭据。

  1. <settings> 
  2.   ... 
  3.   <servers> 
  4.     ... 
  5.         <server> 
  6.           <id>registry.cn-hangzhou.aliyuncs.com</id> 
  7.           <username>你的阿里云账号</username> 
  8.           <password>你的阿里云密码</password> 
  9.         </server> 
  10.   </servers> 
  11. </settings> 

最后,执行完成后,我们可以在阿里云镜像仓库获取镜像。

大功告成,现在,我们来验证一把。我们通过 docker pull 拉取镜像,并运行。

  1. docker pull registry.cn-hangzhou.aliyuncs.com/lianggzone/jib-helloworld:v1 
  2. docker run --name jib-helloworld -it registry.cn-hangzhou.aliyuncs.com/lianggzone/jib-helloworld:v1 /bin/bash 

执行结果,如下所示。

2. 构建一个 SpringBoot 的可运行 Jar

我们来一个复杂一些的项目,构建一个 SpringBoot 的项目。现在,我们首先需要搭建一个工程,并创建一个启动类。

  1. @SpringBootApplication 
  2. public class Application { 
  3.     public static void main(String[] args) { 
  4.         SpringApplication.run(Application.class, args); 
  5.     } 

同时,需要一个 Web 的接口。

  1. @RestController 
  2. public class WebController { 
  3.     @RequestMapping("/blog") 
  4.     public String index() { 
  5.         return "http://blog.720ui.com"; 
  6.     } 

紧接着,我们再创建一个 pom.xml 文件。

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  3.     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
  4.     <modelVersion>4.0.0</modelVersion> 
  5.  
  6.     <parent> 
  7.         <groupId>org.springframework.boot</groupId> 
  8.         <artifactId>spring-boot-starter-parent</artifactId> 
  9.         <version>2.1.2.RELEASE</version> 
  10.     </parent> 
  11.  
  12.     <groupId>com.lianggzone.sample.lib</groupId> 
  13.     <artifactId>springboot-samples</artifactId> 
  14.     <version>0.1</version> 
  15.     <packaging>jar</packaging> 
  16.     <name>springboot-samples</name> 
  17.  
  18.     <dependencies> 
  19.         <dependency> 
  20.             <groupId>org.springframework.boot</groupId> 
  21.             <artifactId>spring-boot-starter-web</artifactId> 
  22.         </dependency> 
  23.     </dependencies> 
  24.  
  25.     <properties> 
  26.         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
  27.         <jib-maven-plugin.version>1.0.2</jib-maven-plugin.version> 
  28.         <maven-compiler-plugin.version>3.8.0</maven-compiler-plugin.version> 
  29.     </properties> 
  30.  
  31.     <build> 
  32.         <plugins> 
  33.             <plugin> 
  34.                 <groupId>org.apache.maven.plugins</groupId> 
  35.                 <artifactId>maven-compiler-plugin</artifactId> 
  36.                 <version>${maven-compiler-plugin.version}</version> 
  37.                 <configuration> 
  38.                     <source>1.8</source> 
  39.                     <target>1.8</target> 
  40.                 </configuration> 
  41.             </plugin> 
  42.             <!-- Jib --> 
  43.             <plugin> 
  44.                 <groupId>com.google.cloud.tools</groupId> 
  45.                 <artifactId>jib-maven-plugin</artifactId> 
  46.                 <version>${jib-maven-plugin.version}</version> 
  47.                 <configuration> 
  48.                     <from> 
  49.                         <image>registry.cn-hangzhou.aliyuncs.com/lianggzone/oracle_java8</image> 
  50.                     </from> 
  51.                     <to> 
  52.                         <image>registry.cn-hangzhou.aliyuncs.com/lianggzone/jib-springboot:v1</image> 
  53.                     </to> 
  54.                     <container> 
  55.                         <jvmFlags> 
  56.                             <jvmFlag>-Xms512m</jvmFlag> 
  57.                             <jvmFlag>-Xdebug</jvmFlag> 
  58.                         </jvmFlags> 
  59.                     </container> 
  60.                 </configuration> 
  61.                 <executions> 
  62.                     <execution> 
  63.                         <phase>package</phase> 
  64.                         <goals> 
  65.                             <goal>build</goal> 
  66.                         </goals> 
  67.                     </execution> 
  68.                 </executions> 
  69.             </plugin> 
  70.         </plugins> 
  71.     </build> 
  72. </project> 

#p#副标题#e#

现在,我们执行 mvn compile jib:build 命令进行自动化构建。执行完成后,我们可以在阿里云镜像仓库获取镜像。

#p#副标题#e##p#分页标题#e#

现在,我们再来验证一把。我们通过 docker pull 拉取镜像,并运行。

  1. docker pull registry.cn-hangzhou.aliyuncs.com/lianggzone/jib-springboot:v1 
  2. docker run -p 8080:8080 --name jib-springboot -it registry.cn-hangzhou.aliyuncs.com/lianggzone/jib-springboot:v1 /bin/bash 

执行结果,如下所示。

现在,我们访问 http://localhost:8080/blog ,我们可以正常调用 API 接口了。

3. 构建一个 WAR 工程

Jib 还支持 WAR 项目。如果 Maven 项目使用 war-packaging 类型,Jib 将默认使用 distroless Jetty 作为基础镜像来部署项目。要使用不同的基础镜像,我们可以自定义 <container><appRoot> , <container> <entrypoint> 和 <container> <args> 。以下是使用 Tomcat 镜像的案例。

  1. <configuration> 
  2.   <from> 
  3.     <image>tomcat:8.5-jre8-alpine</image> 
  4.   </from> 
  5.   <container> 
  6.     <appRoot>/usr/local/tomcat/webapps/ROOT</appRoot> 
  7.   </container> 
  8. </configuration> 

【编辑推荐】

  1. 惊艳!首张黑洞照片的核心代码由妹子用MacBook Pro写就
  2. 程序员人口普查:一半码农16岁开始写代码,中国程序员最乐观
  3. 反转?MIT女博士遭质疑:代码贡献太少,黑洞照片功臣另有其人
  4. 阿里巴巴的26款超神Java开源项目!
  5. 写了十几年代码,我为什么还没有被拿去“祭天”?

【责任编辑:张燕妮 TEL:(010)68476606】
点赞 0

dawei

【声明】:北京站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

您错过了

模块化思维实战:后端站长从0到1构建高效网站,reasoning_content:我们要求以后端站长的口吻,写一个与“技术、科技”相关,关于[从0到1:运用模块化思维与实战技巧,轻松构建高效网站]的标题需要简短精炼,30字以内直接输出标题,不要加说明nn可以考虑:后端站长视角,强调模块化思维和实战技巧,从0到1构建高效网站可能的从0到1:后端站长教你模块化构建高效网站 但字数可能超?数一下:从0到1:后端站长教你模块化构建高效网站 —— 共18个字符(包括标点)?汉字每个算一个字,冒号、空格?严格来说:从0到1:后端站长教你模块化构建高效网站 共16个字(从0到1:后端站长教你模块化构建高效网站,数一下:从0到1:(3个汉字+1个冒号?不,是从0到1是4个字符,但通常算4个?我们按汉字+符号更好的:去掉一些词nn模块化思维实战:后端站长从0到1建高效站 数一下:模块化思维实战:后端站长从0到1建高效站 —— 共18个?模块化思维实战(6字)冒号(1)后端站长(4)从0到1(4)建高效站(4)总19?有点多nn更简洁:模块化构建高效网站:后端站长的从0到1 共14个字?模块化构建高效网站:后端站长的从0到1 —— 13个汉字+1冒号+1数字?其实从0到1是4个字符可以nn或者:后端站长:模块化思维从0到1打造高效网站 共16字?后端站长:模块化思维从0到1打造高效网站 —— 数:后(1)端(2)站(3)长(4):(5)模(6)块(7)化(8)思(9)维(10)从(11)0(12)到(13)1(14)打(15)造(16)高(17)效(18)网(19)站(20) —— 20字,超了nn要控制在30字以内,所以20字以内都行但最好更精炼nn考虑直接用原话中的从0到1和模块化思维、实战技巧、高效网站但题目要求以后端站长口吻,所以可以加上后端站长nn思路:从0到1:后端站长的模块化实战,高效网站轻松建 数一下:从0到1:后端站长的模块化实战,高效网站轻松建 —— 从0到1(4)冒号(1)后端站长(4)的(1)模块化实战(5)逗号(1)高效网站(4)轻松建(3)总共4+1+4+1+5+1+4+3=23字可以nn更简洁:模块化思维实战:后端站长从0到1建高效站 前面数过19字nn或者:后端站长带你从0到1模块化构建高效网站 15字nn注意:要求与技术、科技相关,但标题本身已经涉及nn我会选择:后端站长:模块化思维从0到1轻松构建高效网站 数:后(1)端(2)站(3)长(4):(5)模(6)块(7)化(8)思(9)维(10)从(11)0(12)到(13)1(14)轻(15)松(16)构(17)建(18)高(19)效(20)网(21)站(22) —— 22字可以nn另一个:从0到1:后端站长模块化实战构建高效网站 22字左右nn为了更口语化:从0到1轻松建站:后端站长教你模块化实战 15字?从0到1轻松建站:后端站长教你模块化实战 —— 共18字?nn我最后决定用:从0到1:模块化+实战,后端站长教你轻松建高效站 数:从0到1:模块化+实战,后端站长教你轻松建高效站 —— 共?从(1)0(2)到(3)1(4):(5)模(6)块(7)化(8)+(9)实(10)战(11),(12)后(13)端(14)站(15)长(16)教(17)你(18)轻(19)松(20)建(21)高(22)效(23)站(24) —— 24字略长去掉教你变成从0到1:模块化+实战,后端站长轻松建高效站 22字nn或者直接:模块化思维实战:后端站长从0到1构建高效网站 18字?数一下:模(1)块(2)化(3)思(4)维(5)实(6)战(7):(8)后(9)端(10)站(11)长(12)从(13)0(14)到(15)1(16)构(17)建(18)高(19)效(20)网(21)站(22) —— 22字还是22nn我认为22字完全在30字以内可以输出这个nn注意:不要加任何说明直接输出标题