0%

基于Jib的Java镜像构建实践

Jib是Google开发的对Java应用快速构建镜像的工具。具体地,其支持Maven、Gradle插件等形式

abstract.png

实践

传统地,对Java服务构建镜像时,我们借助Spotify的dockerfile-maven-plugin插件。先将服务打为Jar包,同时编写相应的Dockerfile文件。最后利用该插件通过本地的Docker环境进行镜像构建。从上其实不难看出,对于Java开发者而言上述构建流程非常繁琐,而现在Jib改变了这一现状。其使得开发者无需编写Dockerfile即可快速构建服务镜像并推送至指定仓库。下面即是对一个普通的SpringBoot通过Jib进行镜像构建的例子。其POM配置如下所示。这里补充下我们Java服务的运行端口为8069,故我们同样在POM文件暴露该端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

...
<groupId>com.aaron</groupId>
<artifactId>springboot-demo</artifactId>
<version>5.3.0</version>
<packaging>jar</packaging>
...

<build>
<plugins>

<plugin>
<!--Jib插件-->
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>3.0.0</version>

<!-- 配置Maven执行任务 -->
<executions>
<execution>
<!-- 将插件的dockerBuild目标与Maven的package阶段进行绑定 -->
<goals>
<goal>dockerBuild</goal>
</goals>
<phase>package</phase>
</execution>
</executions>

<configuration>
<!--设置基础镜像, 作用类似于Dockerfile的FROM指令-->
<from>
<image>openjdk:8-jre-alpine</image>
</from>

<!--设置目标镜像信息-->
<to>
<!--配置仓库名、镜像名-->
<image>docker.io/aaron1995/${project.artifactId}</image>
<!--配置Tag信息-->
<tags>
<tag>${project.version}</tag>
</tags>
<!--配置仓库的账户、密码-->
<auth>
<username>aaron1995</username>
<password>foo123456</password>
</auth>
</to>

<!--设置容器信息-->
<container>
<!--暴露容器端口-->
<ports>
<port>8069</port>
</ports>
</container>
</configuration>
</plugin>

</plugins>
</build>

</project>

Jib支持以下功能,具体地

  • dockerBuild:构建镜像
  • build:构建镜像并推送到远程仓库

现在我们使用Jib插件的build目标来构建镜像并推送到远程仓库

figure 1.jpg

figure 2.jpg

现在我们利用该镜像创建容器,验证下。通过访问服务接口,证明服务运行正常

figure 3.jpg

请我喝杯咖啡捏~

欢迎关注我的微信公众号:青灯抽丝