Docker部署SpringBoot项目(镜像部署)

目录

一、在pom.xml 文件中加入依赖

1.依赖内容

2.依赖说明和解释

3.使用流程

4.示例

5.注意

二、执行打包

1.使用命令打包

2.使用IDEA提供快捷方式

三、将jar包上传到服务器

 四、创建相关配置

 1.创建一个Dockerfile文件

 2.添加配置

3.举例 

五、生成Docker镜像

1.命令模版

 2.举例

(1)命令

(2)解释说明 

1. docker build

2. -t gateway:1.1

3. .

命令的工作流程:

 (3)注意点

3.运行效果

六、生成Docker容器

1.命令模版

2. 举例

(1)命令

(2). 解释说明

1. docker run

2. --name gateway

3. -p 8201:8201

4. -d

5. gateway:1.1

总结

后台运行:容器将在后台运行,不会占用当前的终端。

命令解析:

3. 运行结果


 


一、在pom.xml 文件中加入依赖

1.依赖内容

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version> <!-- Spring Boot 版本 --><configuration><mainClass>com.macro.mall.MallGatewayApplication</mainClass> <!-- 主类(启动类) --></configuration><executions><execution><goals><goal>repackage</goal> <!-- 执行 repackage 目标 --></goals></execution></executions></plugin></plugins>
</build>

这个Maven 配置是用来配置 Spring Boot 项目的打包插件 spring-boot-maven-plugin,它会帮助你构建一个可执行的 JAR 文件(Spring Boot 可运行 JAR 文件),以及在 Maven 构建过程中执行重新打包的任务。

2.依赖说明和解释

  • <groupId>: 该插件的 Maven 组 ID。spring-boot-maven-plugin 是 Spring Boot 提供的插件,用于构建和打包 Spring Boot 应用程序。
  • <artifactId>: 插件的工件 ID,在这个案例中是 spring-boot-maven-plugin
  • <version>: 插件的版本。通常,这个版本应该和你使用的 Spring Boot 版本一致,这样可以确保兼容性。${spring-boot.version} 是一个变量,表示 Spring Boot 的版本号。你可以在 <properties> 部分定义该版本,如:
<properties><spring-boot.version>2.7.0</spring-boot.version> <!-- 设置 Spring Boot 版本 -->
</properties>
  • <mainClass>: 指定你的 Spring Boot 应用程序的主类(即包含 main 方法的类)。在这个例子中是 com.macro.mall.MallGatewayApplication,你应该根据你的项目结构修改为正确的主类。
  • <executions>: 在构建过程中执行的目标任务。在这个例子中,repackage 目标会被执行,这意味着该插件将重新打包应用并生成可执行的 JAR 文件。
  • <goal>repackage</goal>: 这个目标会将你的项目重新打包成一个可执行的 JAR 文件,所有的依赖和资源都将被打包到该 JAR 中,以便你可以通过 java -jar 命令运行应用。

3.使用流程

  1. mvn clean install: 执行 Maven 构建命令,Maven 会通过 spring-boot-maven-plugin 插件自动将项目打包成一个可执行的 JAR 文件。
  2. java -jar target/<your-jar-file>.jar: 你可以通过执行生成的 JAR 文件来启动 Spring Boot 应用。

4.示例

假设你将 Spring Boot 版本设置为 2.7.0,并且主类是 com.macro.mall.MallGatewayApplication,那么在 <properties> 部分你可能会这样设置版本:

<properties><spring-boot.version>2.7.0</spring-boot.version>
</properties>

项目主类(启动类) MallGatewayApplication 应该如下所示:

package com.macro.mall;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class MallGatewayApplication {public static void main(String[] args) {SpringApplication.run(MallGatewayApplication.class, args);}
}

5.注意

  1. 确保 <mainClass> 标签中指定的主类路径是正确的,并且该类包含 public static void main(String[] args) 方法。
  2. 在构建前,确保你已经配置了正确的 Spring Boot 版本,避免版本不兼容的问题。
  3. repackage 目标的默认行为是将项目打包成一个 Spring Boot 可执行 JAR,你可以根据需要定制其他行为。

二、执行打包

1.使用命令打包

运行 mvn clean package 命令,Spring Boot 会自动使用 spring-boot-maven-plugin 重新打包项目,并将所有依赖和配置打包进一个单独的 JAR 文件。

2.使用IDEA提供快捷方式

IDEA中有提供的快捷方式,直接点击就行

 打包结果:

三、将jar包上传到服务器

我这使用的是FinalShell直接进入到指定目录拖拽上传即可(其他工具我电脑上没有,这里就不一一展示了)

 四、创建相关配置

 1.创建一个Dockerfile文件

在jar包的同一目录创建一个Dockerfile文件

vim Dockerfile

 2.添加配置

# 使用 OpenJDK 17 作为基础镜像,该镜像包含 JDK 17 环境
# 该镜像适用于需要编译或运行基于 JDK 17 的 Java 应用程序FROM openjdk:17# 设置容器中的工作目录为 /app
# 所有后续操作(如文件复制、命令执行等)都会基于该目录进行WORKDIR /app# 将本地的 JAR 文件 复制到容器的 /app 目录下
# COPY 命令将指定路径的文件从构建上下文复制到镜像中的目标路径COPY jar包名称 /app/jar包名称# 设置环境变量 JAR_FILE,指向 JAR 文件的名称
# 环境变量可以在容器运行时被应用程序或其他脚本访问
# 这里设置环境变量方便在 Dockerfile 中或运行时引用 JAR 文件ENV JAR_FILE=jar包名称# 暴露容器的 8201端口,使得主机能够与容器的指定端口进行通信
# 通常用于 Web 服务或应用程序监听端口
# 可以根据应用需要更改为其他端口号EXPOSE 8201# 定义容器启动时的默认命令,使用 ENTRYPOINT 设置为 java -jar 来启动应用
# 这行命令会在容器启动时运行 Java 应用,加载指定的 JAR 文件
# 如果没有其他命令传入,ENTRYPOINT 将执行默认的 java -jar jar包名称ENTRYPOINT ["java", "-jar", "/app/jar包名称"]

3.举例 

这里拿我刚刚打包的项目举例

五、生成Docker镜像

1.命令模版

docker build -t 镜像名称:标签 .

 2.举例

 这里依旧拿我打包的gateway举例

(1)命令

docker build -t gateway:1.1 .

(2)解释说明 

1. docker build

docker build 是 Docker 的命令,用于根据 Dockerfile 文件和上下文构建镜像。Dockerfile 是描述如何构建镜像的脚本文件,包含了安装软件、设置环境、复制文件等步骤。

2. -t gateway:1.1

-t 选项用于给构建的镜像指定名称和标签。gateway:1.1 表示:

  • gateway 是镜像的名称(可以是你选择的任何名字)。
  • 1.1 是镜像的标签(也可以是任何有效的标签)。标签通常用于标识不同版本的镜像。常见的标签有 latest(表示最新版本)或其他版本号如 1.02.0 等。

因此,-t gateway:1.1 表示你构建的镜像将命名为 gateway,并标记为 1.1 版本。

3. .

. 代表当前目录,作为 Docker 构建的上下文(build context)。构建过程中,Docker 将从当前目录获取所有的文件(如果有 .dockerignore 文件,则会排除其中指定的文件)并传递给 Docker 引擎,供 Dockerfile 使用。

通常,Dockerfile 和构建过程中需要的文件会在同一目录下。如果你运行 docker build -t gateway:1.1 .,Docker 会从当前目录(包含 Dockerfile)读取相关的文件来构建镜像。

命令的工作流程:
  1. Docker 在当前目录查找 Dockerfile
  2. Docker 根据 Dockerfile 中的指令构建镜像(例如复制文件、安装依赖、设置环境变量等)。
  3. 构建完成后,Docker 将创建一个名为 gateway:1.1 的镜像,保存到本地的 Docker 镜像库中。

 (3)注意点

 在命令中 这个点不要忘了  “  .  ” 

3.运行效果

六、生成Docker容器

1.命令模版

用生成的Docker镜像生成Docker容器并运行

docker run --name 容器名称 -p 宿主机端口:容器端口 -d 镜像名称:镜像标签

2. 举例

 这里依旧拿我打包的gateway举例

(1)命令

docker run --name gateway -p 8201:8201 -d gateway:1.1

(2). 解释说明

1. docker run
  • 这是 Docker 中最常用的命令,用于运行一个新的容器。
  • docker run 会拉取指定镜像(如果本地没有的话),然后创建并启动一个容器。

2. --name gateway
  • --name 选项用于给启动的容器指定一个名称。
  • 在这个例子中,容器将被命名为 gateway
  • 使用容器名称可以方便你后续操作,比如查看日志、停止容器或删除容器等。例如,使用 docker stop gateway 来停止名为 gateway 的容器。

注意: 容器名称应该是唯一的,不能与其他正在运行的容器名称重复。如果你尝试给容器起一个已经存在的名称,Docker 会报错。

3. -p 8201:8201
  • -p 选项用于设置端口映射,将容器内部的端口映射到宿主机的端口,使你能够从外部访问容器提供的服务。
  • 8201:8201 表示将宿主机的 8201 端口映射到容器内的 8201 端口。
    • 容器内的服务监听在端口 8201
    • 你可以通过宿主机的 8201 端口来访问容器中的服务。

例子: 如果容器运行的是一个 Web 应用,并且该应用在容器内部的端口 8201 上监听,那么宿主机的 http://localhost:8201 就能访问到容器内的应用。

端口映射原理:

  • 容器内的服务可能仅能通过容器内的 IP 访问,但通过 -p 参数,将容器内部的端口暴露到宿主机后,外部网络请求就可以通过宿主机的指定端口访问到容器服务。

4. -d
  • -d 代表 detached mode(后台模式)。
  • 如果不加 -d,容器会在前台运行,并且你会看到容器的日志输出。如果加上 -d,容器会在后台运行,当前终端会被释放出来,可以继续执行其他命令。
  • 在后台运行时,Docker 会显示容器的唯一 ID,而不会显示容器的标准输出(日志)。

后台模式的优势: 当你希望容器在后台持续运行,不占用当前终端时,使用 -d 非常有用。

5. gateway:1.1
  • gateway:1.1 指定了要启动的 镜像名称 和 版本标签
    • gateway 是镜像的名称。
    • 1.1 是镜像的版本标签。Docker 默认使用 latest 标签,如果没有显式指定版本标签,Docker 会拉取 latest 标签的镜像。这里使用了 1.1 版本的镜像,表示启动的是该版本的镜像。

镜像和标签: gateway 是镜像名称,1.1 是版本标签。通过版本标签可以确保你运行的镜像是特定版本,而不是其他版本。

总结

这条命令的作用是:

  1. 创建并启动容器:基于 gateway:1.1 镜像,创建并启动一个名为 gateway 的新容器。
  2. 端口映射:将宿主机的 8201 端口映射到容器的 8201 端口,从而使容器内的服务能通过宿主机的端口进行访问。
  3. 后台运行:容器将在后台运行,不会占用当前的终端。

命令解析:

docker run --name gateway -p 8201:8201 -d gateway:1.1

  • --name gateway:容器名称为 gateway
  • -p 8201:8201:宿主机的 8201 端口映射到容器的 8201 端口。
  • -d:容器以后台模式运行。
  • gateway:1.1:使用 gateway 镜像的 1.1 版本启动容器。

这样,通过这个命令,你将能够在后台运行一个名为 gateway 的容器,并且通过宿主机的端口 8201 访问容器内部的服务。

3. 运行结果

ip+端口访问

如果不是出现拒接连接就成功了

我这里gateway网关所以访问找不到路径就出现404找不到路径的问题(属于正常现象) 

 出现一下页面就是错误的证明容器中项目报错,启动失败

又或者服务器ip端口没有放开

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

WPF+MVVM案例实战与特效(二十五)- 3D粒子波浪效果实现

文章目录 1、案例效果2、案例实现1、文件创建2. 功能代码实现3、粒子功能应用1、前端布局与样式2、代码解释2、 后端功能代码1、案例效果 2、案例实现 1、文件创建 打开 Wpf_Examples 项目、Models 文件夹下创建 3D粒子模型类 ParticleWaveEffectModel.cs 文件。在Tools 文件…

设计模式之建造者模式(各项装修物料组合套餐选配场景)

前言&#xff1a; 乱码七糟&#xff0c;我时常怀疑这个成语是来形容程序猿的&#xff01; 无论承接什么样的需求&#xff0c;是不是身边总有那么几个人代码写的烂&#xff0c;但是却时常有测试小姐姐过来聊天(求改bug)、有产品小伙伴送吃的(求写需求)、有业务小妹妹陪着改代码(…

ffmpeg视频滤镜:组合两个视频为立体视频- framepack

视频描述 framepack 官方网址 > FFmpeg Filters Documentation 这个滤镜会将两个视频进行组合&#xff0c;有个前提是这两个视频的帧率、分别率必须一样。比如输入的是两个852x480 视频&#xff0c;输出可能是1704*480&#xff08;左右拼接&#xff09;、852*960&#xf…

【K8S问题系列 | 8】K8S集群资源突然爆满导致 Pod 状态变为 Pending 详细解决方案

在 Kubernetes 集群中&#xff0c;当 CPU 突然爆满时&#xff0c;Pod 可能无法获得所需的资源&#xff0c;从而导致其状态变为 Pending。以下是更详细的解决方案描述&#xff0c;有效应对这一问题。 解决方案 1: 扩展集群资源 描述 当集群资源不足以支撑当前的工作负载时&…

第18篇 :深入剖析systemverilog中 randomize 失败案例启示录(一)

经过前面章节的理论学习&#xff0c;我们对systemverilog中的随机约束&#xff0c;有一定的了解&#xff0c;那么&#xff0c;今天开始&#xff0c;着重讲述一些工作中遇到的困惑。主要通过一些例子&#xff0c;层层递进&#xff0c;举一反三&#xff0c;源于实践&#xff0c;剖…

mac端mumu模拟器adb识别不了问题

1.在终端中输入&#xff1a;system_profiler SPUSBDataType,把0x05e3 (Genesys Logic, Inc.)复制 2. 1.cd ~/.android/ 2.open . 3.找到.android/adb_usb.ini文件 将以上格式的Wendor ID放入该文件 3.依次执行 * adb devices* adb kill-server* adb start-server* adb disco…

Ubuntu版本、ROS版本与Python 版本之间的关系

引言 在机器人开发中&#xff0c;ROS&#xff08;机器人操作系统&#xff09;广泛应用于科研和工业领域&#xff0c;支持多个Ubuntu和Python版本。然而&#xff0c;随着不同Ubuntu LTS版本的发布以及Python逐渐从2.x向3.x过渡&#xff0c;ROS的版本选择和兼容性要求也在不断变化…

Linux - 信号

文章目录 一、信号的定义二、查看信号三、产生信号1、指令2、系统调用3、由软件条件产生信号4、异常5、键盘输入 四、保存信号1、补充&#xff1a;信号其他相关概念2、信号保存在哪&#xff0c;怎么保存&#xff1f;3、信号集操作函数 五、捕获信号1、概念2、捕获信号的时机3、…

PMP–知识卡片--项目干系人

项目干系人主要分为两类&#xff1a;参与项目的人和受项目影响的人。按照由近及远&#xff0c;从项目经理、项目团队等逐渐扩充至供应商、客户、监管机构等。 项目往往死在被忽略的干系人手上&#xff0c;作为项目经理&#xff0c;要尽可能地识别出来所有可能影响项目以及受项目…

MATLAB - ROS 2 分析器

系列文章目录 前言 本主题介绍如何连接 ROS 2 网络&#xff0c;分析网络图中所有元素的基本信息&#xff08;如节点名称和节点之间的信息&#xff09;&#xff0c;以及可视化与 ROS 2 节点相关的参数&#xff08;如主题、服务和操作&#xff09;之间的交互。 一、连接并查看 RO…

分组校验在Spring中的应用详解

目录 前言1. 什么是分组校验2. 分组校验的基本原理3. 分组校验的实现步骤3.1 定义分组接口3.2 在校验项中指定分组3.3 校验时指定要校验的分组3.4 默认分组和分组的继承 4. 分组校验的优势和适用场景4.1 优势4.2 适用场景 5. 常见问题与解决方案5.1 校验未生效5.2 无法识别默认…

SDL打开YUV视频

文章目录 问题1&#xff1a;如何控制帧率&#xff1f;问题2&#xff1a;如何触发退出事件&#xff1f;问题3&#xff1a;如何实时调整视频窗口的大小问题4&#xff1a;YUV如何一次读取一帧的数据&#xff1f; 问题1&#xff1a;如何控制帧率&#xff1f; 单独用一个子线程给主线…

[MySQL]索引

索引介绍 索引是帮助数据库高效获取数据的数据结构。在数据之外&#xff0c;数据库系统还维护着满足特定查找算法的数据结构&#xff0c;这些数据结构以某种方式引用数据&#xff0c; 这样就可以在这些数据结构上实现高级查找算法&#xff0c;这种数据结构就是索引。 假设我们有…

window 利用Putty免密登录远程服务器

1 在本地电脑用putty-gen生成密钥 参考1 参考2 2 服务器端操作 将公钥上传至Linux服务器。 复制上述公钥到服务器端的authorized_keys文件 mkdir ~/.ssh vi ~/.ssh/authorized_keys在vi编辑器中&#xff0c;按下ShiftInsert键或者右键选择粘贴&#xff0c;即可将剪贴板中的文…

【大数据技术基础 | 实验八】HBase实验:新建HBase表

文章目录 一、实验目的二、实验要求三、实验原理四、实验环境五、实验内容和步骤&#xff08;一&#xff09;启动HBase集群&#xff08;二&#xff09;编写项目java代码&#xff08;三&#xff09;将代码导出jar包 六、实验结果七、实验心得 一、实验目的 掌握HBase数据模型(逻…

密钥管理服务 (KMS) 故障排除指南

企业客户将密钥管理服务 (KMS) 设置为部署流程的一部分&#xff0c;因为通过该服务&#xff0c;他们可以使用简单、直接的过程在其环境中激活 Windows。 通常&#xff0c;一旦设置了 KMS 主机&#xff0c;KMS 客户端就会自动连接到主机并自行激活。 然而&#xff0c;有时该流程…

CSS的配色

目录 1 十六进制2 CSS中的十六进制2.1 十六进制颜色的基本结构2.2 十六进制颜色的范围2.3 简写形式2.4 透明度 3 CSS的命名颜色4 配色4.1 色轮4.2 互补色4.3 类似色4.4 配色工具 日常在开发小程序中&#xff0c;客户总是希望你的配色是美的&#xff0c;但是美如何定义&#xff…

基于 RNN 的语言模型

基于 RNN 的语言模型 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09;是一类网络连接中包含环路的 神经网络的总称。 给定一个序列&#xff0c;RNN 的环路用于将历史状态叠加到当前状态上。沿着时间维度&#xff0c;历史状态被循环累积&#xff0c;并作为…

【软考网工笔记】网络基础理论——物理层

文章目录 贝尔系统 T1 载波光纤 - SFP接口差分&&曼彻斯特编码网桥MAC-in-MACQ-in-QIPv6的链路本地地址CRC校验与计算E1载波编码效率对称xDSL坚持算法-CSMAUDP头部字段万兆以太网标准 IEEE 802.3ae海明码-纠错码ARP帧中的目标MAC地址快速以太区网物理层标准 100BASE-TXM…

现代Web开发:TypeScript 深入解析与最佳实践

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 现代Web开发&#xff1a;TypeScript 深入解析与最佳实践 现代Web开发&#xff1a;TypeScript 深入解析与最佳实践 现代Web开发&a…