基于jib插件,实现Docker部署springboot项目

作为一名后端开发人员,工作中不仅限于编码研发的任务,项目的部署运维可能也要一起干,今天想跟大家聊聊关于springboot项目使用docker部署相关操作。后期还会跟大家分享docker-compose部署微服务相关的知识。

我在工作中,是通过jib插件将springboot项目打成镜像tar包,然后load进docker里进行使用的。

springboot项目创建

简单编写一个HelloController,如下图:

我设置的端口是8088,启动项目成功后浏览器访问:
http://localhost:8088/hello, 页面返回:hello,world,说明 Spring Boot 项目正常。

jib插件

介绍

jib Github地址 github.com/GoogleConta… 谷歌开源的,实力毋庸置疑,star有11.9k。

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

使用

jib插件无需写dokcerfile文件,所以参数都用pom中的参数来完成,可以像写dockerfile一样写pom文件。

xml复制代码

    4.0.0
    
        org.springframework.boot
        spring-boot-starter-parent
        2.7.11
         
    
    com.cy
    led_service
    0.0.1-SNAPSHOT
    led_service
    ledf服务
    
        11
        3.2.1
        eclipse-temurin:11-jre-focal
        amd64
    

    
        
            org.springframework.boot
            spring-boot-starter-web
        

        
            org.springframework.boot
            spring-boot-starter-test
            test
        
    

    
        spring-boot:run
        led
        
            
                org.springframework.boot
                spring-boot-maven-plugin
            
            
                com.google.cloud.tools
                jib-maven-plugin
            
        
        
            
                
                    com.google.cloud.tools
                    jib-maven-plugin
                    ${jib-maven-plugin.version}
                    
                        
                            ${jib-maven-plugin.image}
                            
                                
                                    ${jib-maven-plugin.architecture}
                                    linux
                                
                            
                        
                        
                            led:latest
                        
                        
                            /signal
                            /signal/log
                            
                                bash

/entrypoint.sh 8088 ALWAYS 0 USE_CURRENT_TIMESTAMP 1000 src/main/docker/jib /entrypoint.sh 755 maven-clean-plugin ${maven-clean-plugin.version}

  • from 定义了依赖镜像 相当于dockerfile 中的 FROM;
  • to 打包好后的镜像信息,jib在打包时可以使用maven内置变量;
  • workingDirectory 指定工作目录 相当于dockerfile 中的 WORKDIR;
  • volumes 相当于 dockerdile 中的 VOLUME 指定容器的目录挂载点;
  • environment 容器的环境变量,可以指定多个;
  • ports 容器要暴露的端口号;
  • entrypoint 相当于dockerfile中的 entrypoint,entrypoint没指定时jib将会输出默认的执行命令,格式是java -cp;

注意:配置了entrypoint.sh,要按照配置的位置src/main/docker/jib增加该文件

bash复制代码#!/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.LedServiceApplication"  "$@"

生成tar包

可以使用命令,也可以双击插件打包,我主要使用jib:buildTar这个命令打tar包。

在target目录下会生成一个tar包,如下图:

Docker部署springboot项目

1、将生成的tar包上传到linux系统指定目录下,根据需要可以修改tar包名字,我这里修改成 led.tar。

2、执行docker load -i xxx.tar,该操作命令是导入镜像文件。

3、执行docker images 查看镜像文件,发现已生成led镜像文件。

4、运行镜像文件,启动容器。执行命令docker run -d -p 9008:8088 --name led01 led

5、浏览器输入外网网址访问一下,如下图所示,说明使用 Docker 部署 Spring Boot 项目成功

                         这里你的外网9008端口首先要开放了,可以去安全组设置

### 部署 Spring Boot 项目到 Debian 12 #### 准备工作 为了确保在Debian 12上顺利部署Spring Boot应用程序,需先安装必要的依赖项。这包括Java环境以及Docker服务。 对于Java环境的准备,可以利用如下命令来安装OpenJDK: ```bash sudo apt update && sudo apt install openjdk-17-jdk -y ``` 确认已正确安装Java版本: ```bash java -version ``` 接着,按照官方指南完成Docker及其CLI工具链的安装[^2]。 #### 使用 Jib 构建 Docker 映像 考虑到便捷性和效率,推荐使用`jib-maven-plugin`插件来进行映像构建操作。此方法允许开发者绕过手动编写Dockerfile的过程,并自动处理许多常见的配置细节,比如安全策略调整、内存分配优化等[^1]。 在pom.xml文件内加入以下片段以引入该Maven插件支持: ```xml <build> <plugins> <!-- Other plugins --> <plugin> <groupId>com.google.cloud.tools</groupId> <artifactId>jib-maven-plugin</artifactId> <version>3.3.0</version> <configuration> <from> <image>eclipse-temurin:17-alpine-jre</image> </from> <to> <image>${docker.image.prefix}/${project.artifactId}</image> </to> <container> <ports> <port>8080</port> </ports> </container> </configuration> </plugin> </plugins> </build> ``` 执行下面这条指令即可触发映像创建流程并推送到指定仓库中去(假设已经登录到了对应的Registry): ```bash mvn compile jib:dockerBuild ``` #### 启动容器化应用实例 当上述准备工作完成后,便可以通过简单的Docker run命令启动新建立的应用程序容器了。这里给出一个基础的例子供参考: ```bash docker run -d \ --name my-springboot-app \ -p 9090:8080 \ ${your-docker-image-name} ``` 此处参数解释: - `-d`: 表示以后台模式运行容器; - `--name`: 给定容器名称方便管理; - `-p`: 将主机端口映射至容器内部监听地址; #### 进一步优化与维护 随着业务发展和技术演进,可能还需要针对具体场景做更多定制化的改进措施,例如但不限于设置CPU/内存限额、持久化存储方案设计等方面的工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值