如何用IDEA+Docker一键部署项目SpringBoot项目

 更新时间:2025年12月05日 09:24:28   作者:e***v356  
IDEA作为主流的Java开发环境,通过集成Docker插件,能够极大地简化从代码编写到容器镜像构建、上传及部署的整个流程,这篇文章主要介绍了如何用IDEA+Docker一键部署项目SpringBoot项目的相关资料,需要的朋友可以参考下

1. 部署项目的传统方式

我们先来看一下部署项目的传统方式:

  1. 将项目打成 jar 包
  2. 将本地打包出来的 jar 包上传到服务器上
  3. 通过 java -jar 指令启动项目

如果项目需要重新部署,需要重新执行一次以上步骤,非常麻烦,而且传统的部署项目方式也不方便查看日志

今天为大家介绍的 IDEA + Docker 一键部署项目正是为了解决这个问题,不仅操作简单,而且查看日志也非常方便

本次演示的环境为:

  • JDK 17
  • IDEA 2024.2(安装了汉化插件的 IDEA,英文版的 IDEA 操作类似)
  • Ubuntu 22.04 LTS
  • Docker 26.1.3

2. 前置工作

  1. 服务器已安装 Docker,并且能够正常拉取镜像
  2. 了解简单 Dockerfile 文件的编写
  3. 本地电脑已安装 IntelliJ IDEA 开发工具
  4. 能正常访问接口的 SpringBoot 项目

3. SSH配置

由于需要连接服务器进行远程部署,需要先配置 SSH

打开 IDEA 的设置界面

在设置界面中找到 SSH 配置

点击 +,创建一个新的 SSH 连接,填入主机、用户名和密码后点击测试连接

4. 连接Docker守护进程

成功连接 Docker 守护进程后才能执行与 Docker 相关的操作

在设置中找到 Docker,点击 +,选择以 SSH 方法连接到 Docker 守护进程,接着点击下拉列表,选择刚才创建的 SSH 配置

完成以上操作后点击应用,再点击确定

5. 创建简单的SpringBoot应用程序

我们创建一个简单的 SpringBoot 应用程序,编写一个简单的接口,在 11020 端口上启动项目

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloWorldController {

    @GetMapping("/")
    public String index() {
        return "<h1>Hello, world</h1>";
    }

}

6. 编写Dockerfile文件

接着需要编写一个用于定义和构建 Docker 镜像的文本文件,文件名为 Dockerfile,Dockerfile 中的配置可根据自身项目情况进行调整

one-click-deployment

# 基础镜像
FROM openjdk:17

# 复制jar包至镜像内
# 复制的目录需放置在与 Dockerfile 文件同级的目录下
ADD target/one-click-deployment-0.0.1-SNAPSHOT.jar /one-click-deployment-0.0.1-SNAPSHOT.jar

# 容器启动执行命令
ENTRYPOINT ["java", "-jar", "/one-click-deployment-0.0.1-SNAPSHOT.jar", "--spring.profiles.active=prod"]

# 对外暴露的端口号
EXPOSE 11020

jar 包的名称需要与 pom.xml 文件中的配置保持一致

也可以在 Maven 管理界面执行 package 操作后直接复制 jar 包的名称

复制本地的 jar 包至镜像内,jar 包所在的目录需放置在与 Dockerfile 文件同级的目录下

至此准备工作已经全部完成,接下来即可正式开始配置远程一键部署

7. 配置远程部署

首次配置可能比较繁琐,但后续部署项目是真的方便,赶紧动手试一下吧

7.1 创建配置

点击 +,选择 Dockerfile

  • 勾选存储为项目文件,这样 IDEA 重启后改配置也会继续保存

  • 自定义名称

  • 服务器选择我们刚才连接的 Docker 守护进程(如果没有自动识别,可以点击后面的三个小点自行配置)

  • 选择我们刚才编写的 Dockerfile 文件

  • 自定义镜像标记

  • 自定义容器名称

    one-click-deployment:1.0.0

7.2 绑定端口

根据实际情况填写端口

7.3 添加执行前要运行的任务

选择运行 Maven 目标

添加 clean 和 package 操作

最后点击应用和确定

至此,所有配置都已完成

8. 部署项目

点击绿色小三角即可自动完成项目部署(如果项目需要重新部署,再次点击绿色小三角即可)

成功部署之后,就能够很方便地在 IDEA 的控制台看到项目的运行日志了

9. 开放防火墙的 11020 端口

  • 如果你使用的是云服务器,在安全组中放行 11020 端口
  • 如果你安装了宝塔,除了在安全组中放行 11020 端口,还要在宝塔中放行 11020 端口

完成以上两个操作后,输入以下指令开放 11020 端口

Ubuntu

sudo ufw allow 11020

sudo ufw reload

CentOS

sudo firewall-cmd --zone=public --add-port=11020 /tcp --permanent

sudo firewall-cmd --reload

10. 访问项目

在浏览器输入以下网址,访问项目(将 ip 地址更改为你的服务器的地址)

http://127.0.0.1:11020/

访问成功后的界面

11. 可能遇到的问题

11.1 Cannot connect to the Docker daemon. Is the docker daemon running

如果你点击小三角后部署失败,并且 IDEA 给出了以下提示,可能是因为 SSH 配置中的用户并没有连接 Docker 的权限

Cannot connect to the Docker daemon. Is the docker daemon running

解决方法:将 SSH 配置中的用户添加到 docker 用户组

sudo usermod -aG docker $USER

运行以下指令,确保SSH 配置中的用户已经成功添加到 docker 用户组

getent group docker

注意:添加用户到 docker 用户组后需要重启 IDEA

成功连接 Docker 后的界面

11.2 no main manifest attribute, in /one-click-deployment-0.0.1-SNAPSHOT.jar

错误信息 “no main manifest attribute, in /one-click-deployment-0.0.1-SNAPSHOT.jar” 表明 JAR 文件中没有指定主类(即程序的入口点)

之所以产生这种情况,有可能是因为项目的 pom.xml 文件没有指定主类,也有可能是因为 SpringBoot 打包插件没生效

解决方法:修改项目的 pom.xml 文件,同时确保 SpringBoot 打包插件生效了(skip 属性默认为 false,表示启用打包插件)

总结 

到此这篇关于如何用IDEA+Docker一键部署SpringBoot项目的文章就介绍到这了,更多相关IDEA Docker一键部署SpringBoot内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 项目连接nacos配置中心报错:Client not connected, current status:STARTING的解决方案

    项目连接nacos配置中心报错:Client not connected, current

    这篇文章主要介绍了项目连接nacos配置中心报错:Client not connected, current status:STARTING的解决方案,采用了mysql作为持久化的数据库,docker作为运行的环境,感兴趣的朋友跟随小编一起看看吧
    2024-03-03
  • 理解JPA注解@GeneratedValue的使用方法

    理解JPA注解@GeneratedValue的使用方法

    这篇文章主要介绍了理解JPA注解@GeneratedValue的使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-07-07
  • SpringBoot搭建全局异常拦截

    SpringBoot搭建全局异常拦截

    这篇文章主要介绍了SpringBoot搭建全局异常拦截,本文通过详细的介绍与代码的展示,详细的说明了如何搭建该项目,包括创建,启动和测试步骤,需要的朋友可以参考下
    2021-06-06
  • 阿里的一道Java并发面试题详解

    阿里的一道Java并发面试题详解

    这篇文章主要介绍了阿里的一道Java并发面试题详解,网络、并发相关的知识,相对其他一些编程知识点更难一些,主要是不好调试并且涉及内容太多 !,需要的朋友可以参考下
    2019-06-06
  • Mybatis注解方式操作Oracle数据库详解

    Mybatis注解方式操作Oracle数据库详解

    这篇文章主要介绍了Mybatis注解方式操作Oracle数据库详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • SpringBoot整合Web开发之Json数据返回的实现

    SpringBoot整合Web开发之Json数据返回的实现

    这篇文章主要介绍了SpringBoot整合Web开发其中Json数据返回的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • Java实现将html字符串插入到PPT幻灯片

    Java实现将html字符串插入到PPT幻灯片

    Java后端代码操作PPT幻灯片时,可直接在幻灯片中绘制形状,并在形状中添加文本字符串内容。本篇文章主要介绍通过java实现将html字符串添加到PPT幻灯片的的方法,可添加文字、图片、视频、音频等。以下是具体方法和步骤。
    2021-11-11
  • Java中的final关键字和抽象类详解

    Java中的final关键字和抽象类详解

    这篇文章主要介绍了Java中的final关键字和抽象类详解,当不希望 类被继承时,可以用final修饰比如不希望子类重写父类时,当不希望某个局部变量被修改时,对参数进行修饰,需要的朋友可以参考下
    2023-07-07
  • Java Kafka实现优先级队列的示例详解

    Java Kafka实现优先级队列的示例详解

    在分布式系统中,消息队列是一种常见的异步通信机制,而优先级队列则是消息队列的一种特殊形式,下面我们来看看如何利用Kafka实现优先级队列吧
    2025-03-03
  • Java实现文件的加密解密功能示例

    Java实现文件的加密解密功能示例

    这篇文章主要介绍了Java实现文件的加密解密功能,结合具体实例形式详细分析了java针对文件的读取、判断、加密、解密等相关步骤与操作技巧,需要的朋友可以参考下
    2017-10-10

最新评论