Spring Boot:使用maven的jib插件打docker使用所需的镜像包

文章目录

    • 使用场景
    • jib插件介绍
    • 代码改造示例

使用场景

  • 我们的项目使用Spring Cloud微服务架构,所有的中间件(PostgreSQLRediskafka等)、微服务组件(consulgateway等)和应用服务,都使用docker部署,使用docker-compose统一管理
  • 使用docker部署服务,可以保证开发环境、测试环境和生产环境都保持一致,方便排查问题
  • 都使用docker部署,也是为了后面的自动化运维CI/CD提前做准备
  • 这就需要在程序代码和配置里,提前集成好打包方法,或者提前写好打包脚本
  • 我在这里介绍下我们正在使用的Mavenjib打包插件,和如何为一个普通的Spring Boot服务增加打包配置

jib插件介绍

  • Jib是一个由Google开发的基于Docker镜像构建的工具,它的Maven插件可以让我们以更高效的方式构建和管理Docker镜像。
  • 使用Jib,我们可以摆脱手动编写Dockerfile的繁琐过程,而是直接将我们的Java应用程序打包为镜像,并将其推送到容器仓库中,从而大大简化了Docker容器化的过程。
  • 也可以直接打包成tar镜像包,loaddocker里使用

JibMaven插件可以使用以下方式在pom.xml文件中进行配置:

<project>
    <build>
        <plugins>
            <plugin>
                <groupId>com.google.cloud.toolsgroupId>
                <artifactId>jib-maven-pluginartifactId>
                <version>2.2.0version>   
                <configuration>
                    
                    <to>
                        <image>myimage:mytagimage>
                    to>
                configuration>
            plugin>
        plugins>
    build>
project>
  • 在配置完插件后,可以直接使用 mvn compile jib:build 命令进行打包和推送到Docker容器仓库中,这将根据项目的构建输出直接创建Docker镜像。
  • Jib的Maven插件还提供了许多其他的配置选项,例如镜像的构建时引用的Dockerfile路径、构建过程中的缓存设置,以及配置环境变量等等。这些选项可以帮助我们更加精细地配置镜像构建过程,满足不同的应用场景需求。

代码改造示例

  • 主要是修改pom.xml文件,首先增加配置,我这里使用的是eclipse-temurin:11-jre-focalJava11jre,为了打包小一点,没使用jdk
 	<properties>
        <jib-maven-plugin.version>3.2.1jib-maven-plugin.version>
        <jib-maven-plugin.image>eclipse-temurin:11-jre-focaljib-maven-plugin.image>
        <jib-maven-plugin.architecture>amd64jib-maven-plugin.architecture>
    properties>
  • 修改build,增加jib插件打包配置
	<build>
        <defaultGoal>spring-boot:rundefaultGoal>
        <finalName>hw1400serverfinalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.bootgroupId>
                <artifactId>spring-boot-maven-pluginartifactId>
            plugin>
            <plugin>
                <groupId>com.google.cloud.toolsgroupId>
                <artifactId>jib-maven-pluginartifactId>
            plugin>
        plugins>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>com.google.cloud.toolsgroupId>
                    <artifactId>jib-maven-pluginartifactId>
                    <version>${jib-maven-plugin.version}version>
                    <configuration>
                        <from>
                            <image>${jib-maven-plugin.image}image>
                            <platforms>
                                <platform>
                                    <architecture>${jib-maven-plugin.architecture}architecture>
                                    <os>linuxos>
                                platform>
                            platforms>
                        from>
                        <to>
                            <image>hw1400server:latestimage>
                        to>
                        <container>
                            <entrypoint>
                                <shell>bashshell>
                                <option>-coption>
                                <arg>/entrypoint.sharg>
                            entrypoint>
                            <ports>
                                <port>8484port>
                                <port>5701/udpport>
                            ports>
                            <environment>
                                <SPRING_OUTPUT_ANSI_ENABLED>ALWAYSSPRING_OUTPUT_ANSI_ENABLED>
                                <JHIPSTER_SLEEP>0JHIPSTER_SLEEP>
                            environment>
                            <creationTime>USE_CURRENT_TIMESTAMPcreationTime>
                            <user>1000user>
                        container>
                        <extraDirectories>
                            <paths>src/main/docker/jibpaths>
                            <permissions>
                                <permission>
                                    <file>/entrypoint.shfile>
                                    <mode>755mode>
                                permission>
                            permissions>
                        extraDirectories>
                    configuration>
                plugin>
                <plugin>
                    <artifactId>maven-clean-pluginartifactId>
                    <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个文件
    Spring Boot:使用maven的jib插件打docker使用所需的镜像包_第1张图片
  • 配置好之后,就可以打镜像包了,可以使用命令,也可以双击插件打包,我主要使用jib:buildTar这个命令打tar包
    Spring Boot:使用maven的jib插件打docker使用所需的镜像包_第2张图片
  • 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服务都使用了此网络,使用默认网络则不需要

你可能感兴趣的:(工具使用,java,docker,spring,boot,maven,jib)