Fantetic Blog

微服务使用Google Jib构建Docker镜像

负责的某个项目之前都是通过原始方式编写Dockerfile来进行Docker镜像推送,然后在阿里云云平台的EDAS进行部署。此方法必定使用Docker工具进行打包推送,可能涉及到版权订阅等问题被Docker公司追责。故采取Google Jib来实现镜像的打包推送。

在本教程中,我将介绍如何使用 Google Jib 版本 3.4.4 构建 Java 微服务的 Docker 镜像。通过本教程,你将学会如何快速打包 Java 应用并生成轻量级的 Docker 镜像,从而加速微服务的开发和部署。

前提条件:Spring项目、Maven构建、已有Docker仓库


第一步:父pom文件添加Google Jib依赖

	<!--依赖添加-->
	<properties>
		<jib-maven-plugin.version>3.4.4</jib-maven-plugin.version>
	</properties>

	<dependencies>
   		<dependency>
     		<groupId>com.google.cloud.tools</groupId>
     		<artifactId>jib-maven-plugin</artifactId>
     		<version>${jib-maven-plugin.version}</version>
     		</dependency>
	</dependencies>
	<!--依赖添加-->
	<!--相关配置伪代码-->
    <profiles>
        <profile>
            <id>dev</id>
            <properties>
                <package.environment>本地开发环境</package.environment>
                <package.properties.basedir>src/main/resources/config</package.properties.basedir>
                <profiles.active>dev</profiles.active>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>
        <profile>
            <id>test</id>
            <properties>
                <package.environment>阿里云测试环境</package.environment>
                <package.properties.basedir>src/main/resources/config</package.properties.basedir>
                <profiles.active>test</profiles.active>
                <dockerUserName>docker仓库用户名</dockerUserName>
                <dockerPassword>docker仓库密码</dockerPassword>
                <docker.repo>docker仓库地址</docker.repo>
                <docker.path>docker仓库路径</docker.path>
			c
                <auth.image.name>auth docker仓库名字:v1.0</auth.image.name>
                <gateway.image.name>gateway docker仓库名字:v1.0</gateway.image.name>
                <analysis.image.name>analysis docker仓库名字:v1.0</analysis.image.name>
            </properties>
        </profile>
        <profile>
            <id>prod</id>
            <properties>
                <package.environment>阿里云生产环境</package.environment>
                <package.properties.basedir>src/main/resources/config</package.properties.basedir>
                <profiles.active>prod</profiles.active>
                <dockerUserName>docker仓库用户名</dockerUserName>
                <dockerPassword>docker仓库密码</dockerPassword>
                <docker.repo>docker仓库地址</docker.repo>
                <docker.path>docker仓库路径</docker.path>
			<!--以下是一些微服务的版本控制,举几个例子-->
                <auth.image.name>auth docker仓库名字:v1.0</auth.image.name>
                <gateway.image.name>gateway docker仓库名字:v1.0</gateway.image.name>
                <analysis.image.name>analysis docker仓库名字:v1.0</analysis.image.name>
            </properties>
        </profile>
    </profiles>

<build>
        <pluginManagement>
                <plugin>
                    <groupId>com.google.cloud.tools</groupId>
                    <artifactId>jib-maven-plugin</artifactId>
                    <version>${jib-maven-plugin.version}</version>
                    <configuration>
                        <from>
                            <!--此地址固定获取jre-->
                            <image>docker jre</image>
                            <auth>
                                <username>docker账号</username>
                                <password>docker密码</password>
                            </auth>
                        </from>
                        <to>
                            <image>${docker.repo}/${docker.path}/${image.name}</image>
                            <auth>
                                <username>${dockerUserName}</username>
                                <password>${dockerPassword}</password>
                            </auth>
                        </to>
                        <extraDirectories>
                            <paths>
                                <path>
                                    <from>${project.build.directory}</from>
                                    <includes>${project.build.finalName}.jar</includes>
                                </path>
                            </paths>
                        </extraDirectories>
                        <container>
                            <environment>
                                <TZ>Asia/Shanghai</TZ>
                            </environment>
                            <entrypoint>nohup,java,-jar,/${project.build.finalName}.jar</entrypoint>
                        </container>
                        <allowInsecureRegistries>true</allowInsecureRegistries>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
</build>

第二步:子pom文件添加Google Jib相关配置

	<!--以auth模块举例-->
	<properties>
        <image.name>
            ${auth.image.name}
        </image.name>
    </properties>
	<plugins>
	<!--在子pom中添加此插件以启用jib-->
        <plugin>
          <groupId>com.google.cloud.tools</groupId>
          <artifactId>jib-maven-plugin</artifactId>
		 <!-- 若要跳过 Jib 构建,skip设为ture
          <configuration>
            <skip>true</skip>
          </configuration>
		  -->
        </plugin>
    </plugins>

第三步:Maven打包后使用Jib构建镜像并推送

1. Maven打包项目

2. 运行 Jib 构建命令

3. 查看构建进度

Jib 会自动构建镜像并推送到目标仓库(例如 Docker Hub)。构建完成后,将在控制台看到输出。


第四步:验证镜像

1. 拉取镜像

登录 Docker 仓库并拉取镜像:

docker pull your-dockerhub-username/my-microservice:latest

2. 运行容器

运行容器并验证服务是否正常

3. 测试服务

打开浏览器或使用 curl 测试服务是否正常:

curl http://localhost:8080

第五步:总结

通过本教程,我们学会了如何使用 Google Jib 版本 3.4.4 快速构建 Java 微服务的 Docker 镜像。Jib 提供了简单易用的插件化方式,使得开发者无需手动编写 Dockerfile 即可完成容器化操作。此外,Jib 还支持多种高级配置,帮助你更好地优化镜像大小和性能。

如果你遇到任何问题或需要进一步的帮助,请参考 Jib 官方文档 或社区支持。

祝你构建愉快!

微服务 Docker Java