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 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,表示启用打包插件)

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Arcgis 地图制作

地图如下,不同历史时期&#xff1a;

【K8S系列】Kubernetes 中如何调试imagePullSecrets配置详细步骤介绍

调试 imagePullSecrets 配置是确保 Kubernetes 能够成功拉取私有镜像所需的关键步骤。以下是详细的调试步骤和建议。 1. 确认 imagePullSecrets 配置 首先&#xff0c;确保在 Pod 的 YAML 配置中正确引用了 imagePullSecrets。其基本结构如下&#xff1a; apiVersion: v1 kin…

山东春季高考-C语言-综合应用题

&#xff08;2018年&#xff09;3.按要求编写以下C语言程序&#xff1a; &#xff08;1&#xff09;从键盘上输入三个整数a、b、c&#xff0c;判断能否以这三个数为边构成三角形&#xff0c;若可以则计算机三角形的面积且保留两位小数&#xff1b;若不可以则输出“不能构成三角…

UE5 第一人称射击项目学习(二)

在上一章节中。 得到了一个根据视角的位置创建actor的项目。 现在要更近一步&#xff0c;对发射的子弹进行旋转。 不过&#xff0c;现在的子弹是圆球形态的&#xff0c;所以无法分清到底怎么旋转&#xff0c;所以需要把子弹变成不规则图形。 现在点开蓝图。 这里修改一下&…

如何实现点击目录跳转到指定位置?【vue】

需求&#xff1a;实现目录点击跳转到指定位置&#xff0c;点击后直接定位到指定模块 效果&#xff1a; 实现方法&#xff1a; &#xff08;1&#xff09;a标签跳转 普通使用&#xff1a; <!DOCTYPE html> <html><head><title>a-Demo</title>&l…

使用chrome 访问虚拟机Apache2 的默认页面,出现了ERR_ADDRESS_UNREACHABLE这个鸟问题

本地环境 主机MacOs Sequoia 15.1虚拟机Parallels Desktop 20 for Mac Pro Edition 版本 20.0.1 (55659)虚拟机-操作系统Ubuntu 22.04 服务器版本 最小安装 开发环境 编辑器编译器调试工具数据库http服务web开发防火墙Vim9Gcc13Gdb14Mysql8Apache2Php8.3Iptables 第一坑 数…

deepin系统下载pnpm cnpm等报错

deepin系统下载pnpm cnpm等报错 npm ERR! request to https://registry.npm.taobao.org/pnpm failed, reason: certificate has expired 报错提示证书过期&#xff0c;执行以下命令 npm config set registry https://registry.npmmirror.com下载pnpm npm install pnpm -g查…

零基础上手WebGIS+智慧校园实例(1)【html by js】

请点个赞收藏关注支持一下博主喵&#xff01;&#xff01;&#xff01; 等下再更新一下1. WebGIS矢量图形的绘制&#xff08;超级详细&#xff01;&#xff01;&#xff09;&#xff0c;2. WebGIS计算距离&#xff0c; 以及智慧校园实例 with 3个例子&#xff01;&#xff01;…

Matlab 答题卡方案

在现代教育事业的飞速发展中&#xff0c;考试已经成为现代教育事业中最公平的方式方法&#xff0c;而且也是衡量教与学的唯一方法。通过考试成绩的好与坏&#xff0c;老师和家长可以分析出学生掌握的知识多少和学习情况。从而老师可以了解到自己教学中的不足来改进教学的方式方…

【实操之 图像处理与百度api-python版本】

1 cgg带你建个工程 如图 不然你的pip baidu-aip 用不了 先对图片进行一点处理 $ 灰度处理 $ 滤波处理 参考 import cv2 import os def preprocess_images(input_folder, output_folder):# 确保输出文件夹存在if not os.path.exists(output_folder):os.makedirs(output_fol…

Python小游戏28——水果忍者

首先&#xff0c;你需要安装Pygame库。如果你还没有安装&#xff0c;可以使用以下命令进行安装&#xff1a; 【bash】 pip install pygame 《水果忍者》游戏代码&#xff1a; 【python】 import pygame import random import sys # 初始化Pygame pygame.init() # 设置屏幕尺寸 …

基于SpringBoot的校园二手商品在线交易系统+含项目运行说明文档

一、项目技术栈 二、项目功能概述 管理员可以完成的功能包括管理员登录、管理员首页展示、系统设置、物品管理、学生管理、评论管理、举报管理、新闻公告、网站设置等&#xff0c;前台的客户可以进行查看所有商品分类、搜索商品、登录或注册、发布商品、求购商品等。 三、部分…

最新Kali安装详细版教程(附安装包,傻瓜式安装教程)

本文主要详细介绍 kali 的安装过程&#xff0c;以及安装完成后的基本设置&#xff0c;比如安装增强工具&#xff0c;安装中文输入法以及更新升级等操作。 文章目录 实验环境准备工作步骤说明安装虚拟机安装 Kali安装增强工具安装中文输入法更新升级 实验环境 VMware &#x…

将网站地址改成https地址需要哪些材料

HTTPS&#xff08;安全超文本传输协议&#xff09;是HTTP协议的扩展。它大大降低了个人数据&#xff08;用户名、密码、银行卡号等&#xff09;被拦截的风险&#xff0c;还有助于防止加载网站时的内容替换&#xff0c;包括广告替换。 在发送数据之前&#xff0c;信息会使用SSL…

React基础知识一

写的东西太多了&#xff0c;照成csdn文档编辑器都开始卡顿了&#xff0c;所以分篇写。 1.安装React 需要安装下面三个包。 react:react核心包 react-dom:渲染需要用到的核心包 babel:将jsx语法转换成React代码的工具。&#xff08;没使用jsx可以不装&#xff09;1.1 在html中…

VUE:基于MVVN的前端js框架

文章目录 vue框架v-show vue框架 注意是 先写函数名&#xff0c;再写function。 handle:function (){}下面是错误的 function:handle(){}3 v-show 本质上等于号后面还是判断条件&#xff0c;所以不能写赋值语句&#xff0c;下面是正确的 下面是错误的 v-show " ge…

六、卷积神经网络(CNN)基础

卷积神经网络&#xff08;CNN&#xff09;基础 前言一、CNN概述二、卷积层2.1 卷积2.2 步幅(Stride)2.3 填充(Padding)2.4 多通道卷积2.5 多卷积计算2.6 特征图大小计算2.7 代码演示 三、池化层3.1 池化层计算3.1.1 最大池化层3.1.2 平均池化层 3.2 填充(Padding)3.3 步幅(Stri…

Vscode写markdown快速插入python代码

如图当我按下快捷键CRTLSHIFTK 自动出现python代码片段 配置方法shortcuts’ 打开这个json文件 输入 {"key": "ctrlshiftk","command": "editor.action.insertSnippet","when": "editorTextFocus","args&…

Java NIO 核心知识总结

在学习 NIO 之前&#xff0c;需要先了解一下计算机 I/O 模型的基础理论知识。还不了解的话&#xff0c;可以参考我写的这篇文章&#xff1a;Java IO 模型详解。 一、NIO 简介 在传统的 Java I/O 模型&#xff08;BIO&#xff09;中&#xff0c;I/O 操作是以阻塞的方式进行的。…

vscode 远程连接ssh 密钥方式

目录 1. powershell 生成key&#xff1a; 2. 在服务器上安装公钥 3).为了确保连接成功&#xff0c;输入如下指令以保证以下文件权限正确&#xff1a; 3 开启 ssh 密钥登录 vscode 远程连接配置 python连接 1. powershell 生成key&#xff1a; 在命令行执行ssh-keygen来创…