jib插件介绍
- Jib是一个由Google开发的基于Docker镜像构建的工具,它的Maven插件可以让我们以更高效的方式构建和管理Docker镜像。
- 使用Jib,我们可以摆脱手动编写Dockerfile的繁琐过程,而是直接将我们的Java应用程序打包为镜像,并将其推送到容器仓库中,从而大大简化了Docker容器化的过程。
- 也可以直接打包成tar镜像包,load进docker里使用
Jib的Maven插件可以使用以下方式在pom.xml文件中进行配置:
<project>
<build>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>2.2.0</version> <!-- 版本号 -->
<configuration>
<!-- 镜像的名称和标签 -->
<to>
<image>myimage:mytag</image>
</to>
</configuration>
</plugin>
</plugins>
</build>
</project>
- 在配置完插件后,可以直接使用
mvn compile jib:build
命令进行打包和推送到Docker容器仓库中,这将根据项目的构建输出直接创建Docker镜像。 - Jib的Maven插件还提供了许多其他的配置选项,例如镜像的构建时引用的Dockerfile路径、构建过程中的缓存设置,以及配置环境变量等等。这些选项可以帮助我们更加精细地配置镜像构建过程,满足不同的应用场景需求。
代码改造示例
- 主要是修改
pom.xml
文件,首先增加配置,我这里使用的是eclipse-temurin:11-jre-focal
,Java11的jre,为了打包小一点,没使用jdk
<properties>
<jib-maven-plugin.version>3.2.1</jib-maven-plugin.version>
<jib-maven-plugin.image>eclipse-temurin:11-jre-focal</jib-maven-plugin.image>
<jib-maven-plugin.architecture>amd64</jib-maven-plugin.architecture>
</properties>
- 修改build,增加jib插件打包配置
<build>
<defaultGoal>spring-boot:run</defaultGoal>
<finalName>hw1400server</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
</plugin>
</plugins>
<pluginManagement>
<plugins>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>jib-maven-plugin</artifactId>
<version>${jib-maven-plugin.version}</version>
<configuration>
<from>
<image>${jib-maven-plugin.image}</image>
<platforms>
<platform>
<architecture>${jib-maven-plugin.architecture}</architecture>
<os>linux</os>
</platform>
</platforms>
</from>
<to>
<image>hw1400server:latest</image>
</to>
<container>
<entrypoint>
<shell>bash</shell>
<option>-c</option>
<arg>/entrypoint.sh</arg>
</entrypoint>
<ports>
<port>8484</port>
<port>5701/udp</port>
</ports>
<environment>
<SPRING_OUTPUT_ANSI_ENABLED>ALWAYS</SPRING_OUTPUT_ANSI_ENABLED>
<JHIPSTER_SLEEP>0</JHIPSTER_SLEEP>
</environment>
<creationTime>USE_CURRENT_TIMESTAMP</creationTime>
<user>1000</user>
</container>
<extraDirectories>
<paths>src/main/docker/jib</paths>
<permissions>
<permission>
<file>/entrypoint.sh</file>
<mode>755</mode>
</permission>
</permissions>
</extraDirectories>
</configuration>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>${maven-clean-plugin.version}</version>
</plugin>
</plugins>
</pluginManagement>
</build>
- 注意我这里配置了
entrypoint.sh
,要按照配置的位置src/main/docker/jib
增加该文件
#!/bin/sh
echo "The application will start in ${JHIPSTER_SLEEP}s..." && sleep ${JHIPSTER_SLEEP}
exec java ${JAVA_OPTS} -noverify -XX:+AlwaysPreTouch -Djava.security.egd=file:/dev/./urandom -cp /app/resources/:/app/classes/:/app/libs/* "com.cy.hw.HttpServerApp" "$@"
- 对应文件结构如下,执行了3个文件
- 配置好之后,就可以打镜像包了,可以使用命令,也可以双击插件打包,我主要使用
jib:buildTar
这个命令打tar包
- tar包可以load后使用
docker load -i /home/install/xxx.tar
docker-compose
配置如下:
# ITS800对接程序
hw1400server:
image: hw1400server
container_name: hw1400server
volumes:
- /etc/localtime:/etc/localtime
ports:
- 8999:8999
depends_on:
- kafka
environment:
- _JAVA_OPTIONS=-Xmx512m -Xms256m
- SERVER_PORT=8999
- SPRING_CLOUD_STREAM_KAFKA_BINDER_BROKERS=kafka:9092
- JHIPSTER_SLEEP=10 # gives time for other services to boot before the application
networks:
- signal-network
restart: on-failure
- 上面里的networks配置,是因为我的docker服务都使用了此网络,使用默认网络则不需要