自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

谷歌助力,快速實(shí)現(xiàn) Java 應(yīng)用容器化

新聞 前端
Google 在 2018 年下旬開源了一款新的 Java 工具 Jib,可以輕松地將 Java 應(yīng)用程序容器化。通過 Jib,我們不需要編寫 Dockerfile 或安裝 Docker,通過集成到 Maven 或 Gradle 插件,就可以立即將 Java 應(yīng)用程序容器化。

 Google 在 2018 年下旬開源了一款新的 Java 工具 Jib,可以輕松地將 Java 應(yīng)用程序容器化。通過 Jib,我們不需要編寫 Dockerfile 或安裝 Docker,通過集成到 Maven 或 Gradle 插件,就可以立即將 Java 應(yīng)用程序容器化。

[[262574]]

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

一、什么是 Jib

Jib 是一個(gè)快速而簡(jiǎn)單的容器鏡像構(gòu)建工具,它作為 Maven 或 Gradle 的一部分運(yùn)行,不需要編寫 Dockerfile 或運(yùn)行 Docker 守護(hù)進(jìn)程。它從 Maven 或 Gradle 中構(gòu)建我們的 Docker 鏡像, 并只將發(fā)生變更的層(而不是整個(gè)應(yīng)用程序)推送到注冊(cè)表來節(jié)省寶貴的構(gòu)建時(shí)間?,F(xiàn)在,我們對(duì) Docker 構(gòu)建流程和 Jib 構(gòu)建流程進(jìn)行對(duì)比。Docker 構(gòu)建流程,如下所示。

Jib 構(gòu)建流程,則是這樣的。

二、實(shí)戰(zhàn)出真知

1. 構(gòu)建一個(gè)簡(jiǎn)單的 Java 工程

我們編寫一個(gè)簡(jiǎn)單的 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.     } 

緊接著,我們?cè)賱?chuàng)建一個(gè) 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> 

由于默認(rèn)訪問谷歌的 gcr.io 倉(cāng)庫(kù),而國(guó)內(nèi)訪問 gcr.io 不穩(wěn)定會(huì)經(jīng)常導(dǎo)致網(wǎng)絡(luò)超時(shí),所以筆者使用了國(guó)內(nèi)的阿里云鏡像服務(wù),那么就不需要訪問谷歌的倉(cāng)庫(kù)了?,F(xiàn)在,我們執(zhí)行 mvn compile jib:build 命令進(jìn)行自動(dòng)化構(gòu)建,它會(huì)從 <from> 拉取鏡像,并把生成的鏡像上傳到 <to> 設(shè)置的地址。這里,筆者還通過 ` 設(shè)置了一些 JVM 參數(shù)。

  1. mvn compile jib:build 

此外,如果”登錄失敗,未授權(quán)”,需要通過 docker login 登錄鑒權(quán)一下。此外,更好的做法是,你可以考慮在Maven 中放置憑據(jù)。

  1. <settings> 
  2.   ... 
  3.   <servers> 
  4.     ... 
  5.         <server> 
  6.           <id>registry.cn-hangzhou.aliyuncs.com</id> 
  7.           <username>你的阿里云賬號(hào)</username> 
  8.           <password>你的阿里云密碼</password> 
  9.         </server> 
  10.   </servers> 
  11. </settings> 

***,執(zhí)行完成后,我們可以在阿里云鏡像倉(cāng)庫(kù)獲取鏡像。

 

大功告成,現(xiàn)在,我們來驗(yàn)證一把。我們通過 docker pull 拉取鏡像,并運(yùn)行。

  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 

執(zhí)行結(jié)果,如下所示。

 

2. 構(gòu)建一個(gè) SpringBoot 的可運(yùn)行 Jar

我們來一個(gè)復(fù)雜一些的項(xiàng)目,構(gòu)建一個(gè) SpringBoot 的項(xiàng)目?,F(xiàn)在,我們首先需要搭建一個(gè)工程,并創(chuàng)建一個(gè)啟動(dòng)類。

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

同時(shí),需要一個(gè) Web 的接口。

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

緊接著,我們?cè)賱?chuàng)建一個(gè) 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> 

現(xiàn)在,我們執(zhí)行 mvn compile jib:build 命令進(jìn)行自動(dòng)化構(gòu)建。執(zhí)行完成后,我們可以在阿里云鏡像倉(cāng)庫(kù)獲取鏡像。

現(xiàn)在,我們?cè)賮眚?yàn)證一把。我們通過 docker pull 拉取鏡像,并運(yùn)行。

  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 

執(zhí)行結(jié)果,如下所示。

現(xiàn)在,我們?cè)L問 http://localhost:8080/blog ,我們可以正常調(diào)用 API 接口了。

3. 構(gòu)建一個(gè) WAR 工程

Jib 還支持 WAR 項(xiàng)目。如果 Maven 項(xiàng)目使用 war-packaging 類型,Jib 將默認(rèn)使用 distroless Jetty 作為基礎(chǔ)鏡像來部署項(xiàng)目。要使用不同的基礎(chǔ)鏡像,我們可以自定義 <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> 
責(zé)任編輯:張燕妮 來源: 梁桂釗的博客
相關(guān)推薦

2020-09-14 10:13:37

開發(fā)者

2023-08-25 15:41:50

容器微服務(wù)

2010-01-14 14:49:22

應(yīng)用交換技術(shù)

2024-01-15 06:34:09

Gin鏡像容器

2023-10-15 22:40:25

插件JIB

2020-10-21 09:25:41

VMware

2019-09-03 09:50:26

北森PaaS定制化

2017-10-25 09:15:46

鏡像部署容器

2016-02-15 09:37:14

Docker持續(xù)交付應(yīng)用程序

2015-06-11 13:05:05

戴爾Any Cloud云轉(zhuǎn)型

2015-03-10 09:50:30

戴爾云計(jì)算DELL

2016-10-20 09:07:51

ChromiumGoogleEloston

2017-08-02 16:09:41

華為

2022-10-14 07:25:49

2020-06-10 08:55:36

Docker容器工具

2013-10-18 17:13:50

SAP
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)