Linux系列:从0到1用Docker部署springboot项目

目录

1.前提条件

2.编写DockerFile镜像文件

3.打包SpringBoot项目

 4.通过软件Xftp进行传输(*)

1.点击“文件-新建”​编辑

5.操作远程主机

1.docker构建

2.容器运行

 6.容器的关闭和删除


1.前提条件

Linux、docker、xftp的安装、一台可以访问的远程主机

2.编写DockerFile镜像文件

Dockerfile 是一个文本文件,包含了一系列的指令,用于定义如何构建 Docker 镜像。创建好 Dockerfile 后,可以使用命令来构建镜像,然后将这个镜像用于部署应用程序。

1.在项目的根目录下命名一个文件“DockerFile.txt”,写完后重命名为‘DockerFile’(这里最好命名成‘DockerFile’,因为 Docker 默认会寻找名为 Dockerfile 的文件来构建镜像。),用于定义镜像文件,例如我的:

# 使用一个基础镜像,这里使用 OpenJDK 11 作为基础镜像
FROM openjdk:11-jre-slim

# 设置工作目录
WORKDIR /app

# 复制可执行的 JAR 文件到镜像中
COPY ./springboot-web2-0.0.1-SNAPSHOT.jar .

# 定义容器启动命令
CMD ["java", "-jar", "springboot-web2-0.0.1-SNAPSHOT.jar"]

以上根据自己的项目、具体目录作出调整修改,上面的工作目录是容器的目录,我写的‘/app’这个目录即使不存在,docker内也会进行自动创建,因此可以按自己需求进行命名

注意:COPY这行中一般是要用‘./’进行开头的,这表示相对路径(最好别用绝对路径,已踩坑!!)因为到时我们是在DockerFile文件所在目录下进行Docker的构建

3.打包SpringBoot项目

在确认项目没问题后,我们进行打包,点击Maven- LifeCycle-package进行打包,之后会生成一个target文件,里面就有我们需要的jar包:

注意:需要留意项目中配置的监听端口,后面会用到

 4.通过软件Xftp进行传输(*)

 这一步针对的是从本地Windows打包后,需要将jar包传输到对应的远程主机上时用到的,如果本地就是docker需要构建的地方,那么可以忽略这一步

传输步骤:

1.点击“文件-新建”

 需要填写的有:名称、主机、用户名和密码(这边是用Password进行登录,也可用公钥)

其中名称是自定义,主机是对应的远程主机IP以及主机的用户名和密码(我这里用的是虚拟机作示例)

连接成功后,如图所示:

 找到你要刚刚打包好的jar包,进行传输,直接进行拖拽即可:

5.操作远程主机

登录上远程主机,随后用docker指令进行构建部署

1.docker构建

在终端中,导航到项目根目录并执行以下命令来构建Docker镜像。将 my-spring-app 替换为你想要的镜像名称。

docker build -t my-spring-app .

出现上述运行结果,表示镜像名称为“my-spring-app”的容器构建成功

2.容器运行

 构建完成后,使用以下命令来运行Docker容器。将 my-spring-container 替换为你想要的容器名称。

docker run -d --name my-spring-container -p 8080:8080 my-spring-app

上面我的镜像名称取名为“my-spring-app”,且我的SpringBoot项目的监听端口设置为了8082,所以我的指令是这样的:

让我解释一下每部分的含义:

  1. -d 参数:这表示在“后台”运行容器,即在“守护进程”模式下。容器会在后台运行,不会占用当前终端。

  2. -p 8080:8082 参数:这表示将主机的 8080 端口映射到容器的 8082 端口。第一个 8080 是主机上的端口,第二个 8082 是容器内的端口。这样你可以通过访问主机的 http://localhost:8080 来访问容器内运行的应用程序。

  3. my-spring-app:这是容器的名称,通常由 Docker 自动生成。你可以使用这个名称来管理容器,如停止、删除等操作。

  4. 最后的输出 b421554123ebca89a45dca25096119b75df7a9dd3a73b6135bfc21b5ba061816是容器的唯一标识符,通常称为容器ID。

注意;上述两个8080,其中

其中下面的一串字符是该容器的唯一标识符,通常称为容器ID 到此我们已经成功运行

检查一下用“docker ps”检查下docker中正在运行中的容器

可以看到,名称为“my-spring-app” 的容器已经运行,并将容器内部的 8082 端口映射到了主机的 8080 端口,ip的0.0.0.0是由于我在远程主机上部署的,外网访问还是需要通过该远程主机的ip,格式为“ip地址:端口号”即可

用其它的主机进行访问,运行成功

 6.容器的关闭和删除

你也可以随时关闭容器:

docker stop <container_id>

关闭并删除容器:

docker rm -f <container_id>

这将停止并删除具有容器 ID 为 <container_id> 的容器。请注意,这会永久删除容器,并且容器内的数据可能会丢失,因此请谨慎使用 -f 参数。

如果你想要停止并删除所有的容器,可以使用以下命令:

docker stop $(docker ps -aq)
docker rm $(docker ps -aq)

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

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

相关文章

自动驾驶——驶向未来的革命性技术

自动驾驶——驶向未来的革命性技术 自动驾驶的组件自动驾驶的优势自动驾驶的应用自动驾驶的未来中国的自动驾驶 自动驾驶是一种技术&#xff0c;它允许车辆在没有人类驾驶员的情况下自主地进行行驶。它利用各种传感器、计算机视觉、人工智能和机器学习算法来感知和理解周围环境…

Vim学习(三)—— Git Repo Gerrit

Git、Gerrit、Repo三者的概念及使用 三者各自作用&#xff1a; git&#xff1a;版本管理库&#xff0c;在git库中没有中心服务器的概念&#xff0c;真正的分布式。 repo&#xff1a;repo就是多个git库的管理工具。如果是多个git库同时管理&#xff0c;可以使用repo。当然使用…

Linux常见面试题,应对面试分享

操作系统基础 1.cpu占⽤率太⾼了怎么办? 排查思路是什么&#xff0c;怎么定位这个问题&#xff0c;处理流程 其他程序: 1.通过top命令按照CPU使⽤率排序找出占⽤资源最⾼的进程 2.lsof查看这个进程在使⽤什么⽂件或者有哪些线程 3.询问开发或者⽼⼤,是什么业务在使⽤这个进程…

期权定价模型系列【2】—期权的希腊字母计算及应用

本篇文章旨在介绍期权常见希腊字母的计算及应用 本专栏更多侧重于理论及文字方面的展示&#xff0c;文章具体的代码可以参考我的另一个专栏【期权量化】。 【期权量化】专栏有同名文章&#xff0c;并且给出了文章的具体代码。 专栏地址&#xff1a; http://t.csdn.cn/Y30Hk…

接口测试自动化:简化测试流程,提升效率

接口测试自动化&#xff1a;简化测试流程&#xff0c;提升效率 什么是接口测试自动化&#xff1f; 接口测试自动化是指使用特定的工具和技术来自动化执行接口测试的过程。通过编写脚本&#xff0c;自动化工具可以模拟用户与软件系统的交互&#xff0c;验证接口的功能和性能。…

启动springboot,出现Unable to start embedded Tomcat

报错信息 org.apache.catalina.core.ContainerBase : A child container failed during startjava.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Tomcat].StandardHost[localhost].TomcatEmbedd…

智能优化算法:白鲨优化算法-附代码

智能优化算法&#xff1a;白鲨优化算法 文章目录 智能优化算法&#xff1a;白鲨优化算法1.白鲨优化算法1.1 初始化1.2 速度更新1.3位置更新1.4鱼群行为 2.实验结果3.参考文献4.Matlab5.python 摘要&#xff1a;WSO 算法是 Braik 等于 2022 年提出一种基于白鲨深海觅食策略的新型…

【Opencv入门到项目实战】(十):项目实战|文档扫描|OCR识别

所有订阅专栏的同学可以私信博主获取源码文件 文章目录 1.引言1.1 什么是光学字符识别 (OCR)1.2 应用领域 2.项目背景介绍3.边缘检测3.1 原始图像读取3.2 预处理3.3 结果展示 3.轮廓检测4.透视变换5.OCR识别5.1 tesseract安装5.2 字符识别 1.引言 今天我们来看一个OCR相关的文…

aardio 调用 python pickle load 数据

aardio 调用 python pickle load 词典数据 dump_pickle.py import os import sys import time import pickle from readmdict import MDX, MDDos.chdir("/mdict")mdxfile "your.mdx" if not os.path.exists(mdxfile):print("{mdxfile} not found!&…

2023年大数据与计算国际会议 (WBDC 2023)| EI、Scoups检索

会议简介 Brief Introduction 2023年大数据与计算国际会议&#xff08;WBDC 2023&#xff09; 会议时间&#xff1a;2023年11月17 -19日 召开地点&#xff1a;中国西安 大会官网&#xff1a;www.iwbdc.org 2023年大数据与计算国际会议&#xff08;WBDC 2023&#xff09;将围绕“…

docker下载和案例

文章目录 Docker安装一,根据官方文档安装二,根据我以下方式 Docker配置错误导致漏洞一,CRLF注入漏洞介绍在nginx中该漏洞例子解决方法 目录穿越漏洞介绍解决方法 Docker安装 一,根据官方文档安装 官方文档 二,根据我以下方式 docker安装要求&#xff1a; Docker要求Ce…

VTK学习笔记(二十一)

显示立方体已经做过了&#xff0c;现在想简单处理一下立方体&#xff0c;比如每个面上增加一些文字。效果如下。 #include <vtkAnnotatedCubeActor.h> #include <vtkCamera.h> #include <vtkNamedColors.h> #include <vtkNew.h> #include <vtkPrope…

SQL 数据科学:了解和利用联接

推荐&#xff1a;使用 NSDT场景编辑器助你快速搭建可编辑的3D应用场景 什么是 SQL 中的连接&#xff1f; SQL 联接允许您基于公共列合并来自多个数据库表的数据。这样&#xff0c;您就可以将信息合并在一起&#xff0c;并在相关数据集之间创建有意义的连接。 SQL 中的连接类型…

积木报表集成前端加载js文件404

项目场景&#xff1a; 在集成积木报表和shiro时候&#xff1a; 集成积木报表&#xff0c;shrio&#xff0c;shrio是定义在另一个模块下的&#xff0c;供另一个启动类使用&#xff0c;积木报表集成shrio的时候&#xff0c;需要依赖存放shrio的核心包&#xff0c;该核心包除了存…

Eleastisearch5.2.2利用镜像迁移构建实例后ES非健康状态

正常迁移完成后启动服务&#xff0c;查看ES非健康状态 此时观察ES集群状态&#xff1a;curl -XGET -u elastic:xxx localhost:9200/_cluster/health?pretty 注意到"active_shards_percent_as_number" : 88.8888 该项的值不产生变化;集群状态"status" : “…

常见的数据结构(顺序表、顺序表、链表、栈、队列、二叉树)

线性表&#xff08;Linear List&#xff09;  1.什么是线性表 2.线性表的特点 3.线性表的基本运算 顺序表 1.什么是顺序表 2.时间复杂度&#xff1a; 链表 1.什么是链表 2.单向链表 3. 双向链表 4.ArrayList和LinkedList的使用 栈Stack  1.什么是栈  2.栈的基本方法 队列…

【果树农药喷洒机器人】Part2:机器人变量喷药系统硬件选型

&#x1f4e2;&#xff1a;如果你也对机器人、人工智能感兴趣&#xff0c;看来我们志同道合✨ &#x1f4e2;&#xff1a;不妨浏览一下我的博客主页【https://blog.csdn.net/weixin_51244852】 &#x1f4e2;&#xff1a;文章若有幸对你有帮助&#xff0c;可点赞 &#x1f44d;…

【ChatGPT 指令大全】怎么使用ChatGPT辅助程式开发

目录 写程式 解读程式码 重构程式码 解 bug 写测试 写 Regex 总结 在当今快节奏的数字化世界中&#xff0c;程式开发变得越来越重要和普遍。无论是开发应用程序、网站还是其他软件&#xff0c;程式开发的需求都在不断增长。然而&#xff0c;有时候我们可能会遇到各种问题…

C语言数据类型

C语言具有多种数据类型&#xff0c;用于存储不同类型的数据。大体可以分为基本数据类型和派生数据类型两大类。 一、基本数据类型 整型&#xff08;Integer&#xff09;&#xff1a; 用于表示整数值&#xff0c;包括int、short、long和long long等类型&#xff0c;可以有不同…

AI:03-基于深度神经网络的低空无人机目标检测图像识别的研究

文章目录 数据集收集与预处理深度神经网络模型设计模型训练与优化目标检测与图像识别代码实现:实验结果与分析讨论与展望低空无人机的广泛应用为许多领域带来了巨大的潜力和机会。为了实现无人机的自主导航和任务执行,准确的目标检测和图像识别是至关重要的。本文旨在研究并提…