IDEA+Docker一键部署项目SpringBoot项目

文章目录
  • 1. 部署项目的传统方式
  • 2. 前置工作
  • 3. SSH配置
  • 4. 连接Docker守护进程
  • 5. 创建简单的SpringBoot应用程序
  • 6. 编写Dockerfile文件
  • 7. 配置远程部署
    • 7.1 创建配置
    • 7.2 绑定端口
    • 7.3 添加执行前要运行的任务
  • 8. 部署项目
  • 9. 开放防火墙的 11020 端口
  • 10. 访问项目
  • 11. 可能遇到的问题
    • 11.1 Cannot connect to the Docker daemon. Is the docker daemon running?
    • 11.2 no main manifest attribute, in /one-click-deployment-0.0.1-SNAPSHOT.jar

更多 IDEA 的使用技巧可查看 IDEA 专栏中的文章:IDEA

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 11020sudo ufw reload

CentOS

sudo firewall-cmd --zone=public --add-port=11020 /tcp --permanentsudo 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,表示启用打包插件)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/65813.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis开发与运维-redis0401-补充-redis流水线与Jedis执行流水线

文章目录 【README】【1】redis流水线Pipeline【1.1】redis流水线概念【1.2】redis流水线性能测试【1.2.1】使用流水线与未使用流水线的性能对比【1.2.2】使用流水线与redis原生批量命令的性能对比【1.2.3】流水线缺点 【1.3】Jedis客户端执行流水线【1.3.1】Jedis客户端执行流…

Uncaught ReferenceError: __VUE_HMR_RUNTIME__ is not defined

Syntax Error: Error: vitejs/plugin-vue requires vue (>3.2.13) or vue/compiler-sfc to be present in the dependency tree. 第一步 npm install vue/compiler-sfc npm run dev 运行成功&#xff0c;本地打开页面是空白&#xff0c;控制台报错 重新下载了vue-loa…

【微服务】【Sentinel】认识Sentinel

文章目录 1. 雪崩问题2. 解决方案3. 服务保护技术对比4. 安装 Sentinel4.1 启动控制台4.2 客户端接入控制台 参考资料: 1. 雪崩问题 微服务调用链路中的某个服务故障&#xff0c;引起整个链路中的所有微服务都不可用&#xff0c;这就是雪崩。动图演示&#xff1a; 在微服务系统…

STM32完全学习——使用定时器1精确延时

一、定时器的相关配置 首先一定要是递减定时器&#xff0c;递增的不太行&#xff0c;控制的不够准确&#xff0c;其次在大于10微秒的延时是非常准确的&#xff0c;小于的话&#xff0c;就没有那没准&#xff0c;但是凑合能用。误差都在一个微秒以内。使用高级定时器也就是时钟…

connect to host github.com port 22: Connection timed out 的解决方法

原因是 Github 被 GFW 屏蔽了。 Windows 系统&#xff0c;打开 C:\Windows\System32\drivers\etc&#xff0c;复制其中的 hosts 文件至桌面&#xff0c;用文本编辑器或者其他工具打开。 复制以下内容进去&#xff1a; 140.82.114.4 github.com 151.101.1.6 github.global.ss…

常见的排序算法过程和比较分析

比较分析 排序类别排序算法时间复杂度&#xff08;最好&#xff09;时间复杂度&#xff08;最坏&#xff09;时间复杂度&#xff08;平均&#xff09;辅助空间复杂度稳定性插入排序直接插入排序O(n)O(n)O(n)O(1)稳定插入排序折半插入排序O(n)O(n)O(n)O(1)稳定插入排序希尔排序…

【QGIS入门实战精品教程】7.3:QGIS制作千层饼(DEM+等高线+影像+TIN)

文章目录 一、效果展示二、数据准备三、制作过程1. 打开软件2. 添加图层3. 制作千层饼一、效果展示 二、数据准备 订阅专栏后,从专栏配套案例数据包中的7.3.rar中获取。 1. dem 2. 影像 3. 等高线 4. tin 三、制作过程 1. 打开软件 打开QGIS软件。 QGIS软件主界面。

如何将CSDN文章 导出为 PDF文件

一、首先&#xff0c;打开我们想要导出为 PDF格式的 CSDN文章&#xff0c;以下图为例。 二、按 F12 调出浏览器调式模式后&#xff0c;选择 控制台 三、在控制台处粘贴代码 代码&#xff1a; (function(){ use strict;var articleBox $("div.article_content"…

HTML——54. form元素属性

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>form元素属性</title></head><body><!--form标签用于创建一个表单&#xff0c;会将里面的内容一起发送服务器&#xff0c;结构类似于表格--><!-…

告别 $arr[0]: PHP 和 Laravel 中更优雅的数组处理方式

你是否曾经历过这样的惊魂时刻&#xff1a;线上代码突然崩溃&#xff0c;只因访问了一个不存在的数组元素&#xff1f;或者更糟的是&#xff0c;应用开始疯狂抛出错误&#xff0c;而你却毫无头绪&#xff1f;这一切的罪魁祸首可能就是看似人畜无害的硬编码数组索引&#xff0c;…

【Linux报告】实训六 重置超级用户密码

实训六 重置超级用户密码 2018编写-今日公布 【练习一】忘记root密码 步骤一&#xff1a;开启或重启系统&#xff0c;并且要在五秒之内按任何键&#xff1b; 步骤二&#xff1a;按任意键&#xff0c;停止进入系统&#xff0c;按【e】键&#xff0c;跳转新页面&#xff0c;再…

一种pod容器动态挂卷方案

一、背景 1.1 个人调试kvm 我们这边基于云平台的k8skubevirt&#xff0c;给安卓手机领域的开发工程师们提供了独占式虚拟机资源。这些资源主要用于工程师的个人级开发与调试&#xff0c;因此有如下特点&#xff1a; 使用时间与工作时间强相关&#xff0c;即工程师工作时间使…

Docker Compose 构建 EMQX 集群 实现mqqt 和websocket

EMQX 集群化管理mqqt真香 目录 #目录 /usr/emqx 容器构建 vim docker-compose.yml version: 3services:emqx1:image: emqx:5.8.3container_name: emqx1environment:- "EMQX_NODE_NAMEemqxnode1.emqx.io"- "EMQX_CLUSTER__DISCOVERY_STRATEGYstatic"- …

如何在没有 iCloud 的情况下将数据从 iPhone 传输到 iPhone

概括 您可能会遇到将数据从 iPhone 转移到 iPhone 的情况&#xff0c;尤其是当您获得新的 iPhone 15/14 时&#xff0c;您会很兴奋并希望将数据转移到它。 使用iCloud最终可以做到这一点&#xff0c;但它的缺点也不容忽视&#xff0c;阻碍了你选择它。例如&#xff0c;您需要…

CUDA与Microsoft Visual Studio不兼容问题

简介&#xff1a;在安装一些 python库时&#xff0c;涉及到第三方库&#xff08;特别是需要引用 C 代码&#xff09;时&#xff0c;通常的安装方式会涉及到编译过程&#xff0c;通常称为"源代码安装"&#xff08;source installation&#xff09;&#xff0c;或是 “…

Unity2D无限地图的实现(简单好抄)

说明&#xff1a;本教程实现的是在2D游戏中玩家在游戏中上下左右移动的时候自动进行地图拼接的功能&#xff0c;如果你只想实现左右移动的无限地图&#xff0c;那么这篇博客也能起到一定参考作用。 思路 第一步&#xff1a; 创建一个10*10的2D游戏对象当做地图 第二步创建一个…

C13.【C++ Cont】初识string类字符串的迭代器

目录 1.迭代器的定义 2.迭代器的作用 3.string类字符串的常用迭代器 4.第3点的两个迭代器的使用 示例代码1:解引用 运行结果 示例代码2 运行结果 示例代码3:用迭代器正序遍历字符串 运行结果 示例代码4:用迭代器逆序遍历字符串 运行结果 示例代码5:用迭代器修改字…

HTML——13.超链接

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>超链接</title></head><body><!--超链接:从一个网页链接到另一个网页--><!--语法&#xff1a;<a href"淘宝网链接的地址"> 淘宝…

《代码随想录》Day22打卡!

回溯算法 《代码随想录》回溯算法&#xff1a;组合 本题完整题目如下&#xff1a; 本题的完整思路如下&#xff1a; 1.本题使用回溯算法&#xff0c;其实回溯和递归是一样的道理&#xff0c;也是分为三步曲进行&#xff1a; 2.第一步&#xff1a;确定递归函数的返回值和参数&…

鱼眼相机模型与去畸变实现

1.坐标系说明 鱼眼相机模型涉及到世界坐标系、相机坐标系、图像坐标系、像素坐标系之间的转换关系。对于分析鱼眼相机模型&#xff0c;假定世界坐标系下的坐标点,经过外参矩阵的变换转到相机坐标系&#xff0c;相机坐标再经过内参转换到像素坐标&#xff0c;具体如下 进一步进…