高青县住房和城乡建设局网站/seo学校
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/shecho "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: hw1400servercontainer_name: hw1400servervolumes:- /etc/localtime:/etc/localtimeports:- 8999:8999depends_on:- kafkaenvironment:- _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 applicationnetworks:- signal-networkrestart: on-failure
- 上面里的networks配置,是因为我的docker服务都使用了此网络,使用默认网络则不需要