当前位置: 首页 > article >正文

SpringBoot项目容器化进行部署,meven的docker插件远程构建docker镜像

需求:将Spring Boot项目使用容器化进行部署

  • 前提 默认其他环境,如mysql,redis等已经通过docker部署完毕, 这里只讨论,如何制作springboot项目的镜像

要将Spring Boot项目使用docker容器进行部署,就需要将Spring Boot项目构建成一个docker镜像

一、手动 dockerfile构建镜像

有一个更基础的入门教程,见通过dockerfile构建jdk17的环境🔗教程链接,这次也以这个jdk17的环境为基础

1、 项目打包

1.、打包一个我们自己写的springboot项目为可执行的jar
需要在pom.xml中引入插件

<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>3.0.5</version> <!-- 使用与你的 Spring Boot 版本匹配的版本 --><executions><execution><goals><goal>repackage</goal>
<!--              repackage 目标会把普通的 JAR 转换为可执行的 Spring Boot JAR。--></goals></execution></executions></plugin></plugins>
</build>

2、 点击install会在target目录生成可执行jar
在这里插入图片描述
在这里插入图片描述
先在本地跑一试试, 记得把idea中项目停掉,否则会占用端口, 我这个项目设置的端口为8080, 进到springboot-demo-1.0-SNAPSHOT.jar 所在目录
执行

java -jar springboot-demo-1.0-SNAPSHOT.jar 

在这里插入图片描述
在这里插入图片描述

3、没啥问题上传jar包到linux服务器上
在这里插入图片描述

2、 dockerfile文件

jar包同级目录下创建dockerfile文件的内容如下所示:
在这里插入图片描述

#这个mycentos-jdk17是基础入门中,自己制作的镜像, 我们要依赖此镜像
FROM mycentos-jdk17
#作者
MAINTAINER cgj# 声明容器内主进程所对应的端口, 端口映射的时候要用 -p  宿主机端口:容器内端口 ,expose设置的就是容器内端口
EXPOSE 8080# 文件添加进来,  add 源 目的
#复制文件到容器linux的根目录
ADD springboot-demo-1.0-SNAPSHOT.jar /springboot-demo-1.0-SNAPSHOT.jar# 相当于windows中的cd命令
WORKDIR /      
#容器一启动, boot项目就运行起来了
ENTRYPOINT ["java" , "-jar" , "springboot-demo-1.0-SNAPSHOT.jar"]

在这里插入图片描述

3、构建镜像

当前目录命令如下所示:

docker build -t myfirstboot:v1 .

myfirstboot 为容器名:版本号 (可不写)
在这里插入图片描述
用docker images命令可以查看镜像
在这里插入图片描述

4、创建容器

命令如下所示:

docker run -d --name boot -p 8080:8080 myfirstboot:v1

在这里插入图片描述
在这里插入图片描述

访问测试: http://你linux的ip:映射的端口
如果你用的是云服务器,记得防火墙放开对应的端口.
在这里插入图片描述
停掉容器
docker stop 容器名

docker stop boot

二、自动 Maven的docker插件

刚才的构建过程是手动镜像构建的过程。使用Maven的docker插件可以实现镜像的自动化部署。

步骤:

1、在pom.xml文件中添加Maven的docker插件

2、开启docker服务端的远程访问

3、在工程的根目录下创建dockerfile文件

4、使用maven的打包命令进行打包

5、创建容器并访问

实操:

1、在pom.xml文件中添加Maven的docker插件

            <plugin><groupId>com.spotify</groupId><artifactId>docker-maven-plugin</artifactId><version>1.2.2</version><!--将插件绑定在某个phase执行--><executions><execution><id>build-image</id><!--将插件绑定在package这个phase(阶段)上。也就是说,用户只需执行mvn package,就会自动执行mvn docker:build--><phase>package</phase><goals><goal>build</goal></goals></execution></executions><configuration><!--指定生成的镜像名--><imageName>${project.artifactId}</imageName><!--指定标签,也就是版本号,可以自定义--><imageTags><imageTag>v2.0</imageTag></imageTags><!--指定远程 docker api地址 也就是服务器ip+docker的端口号--><dockerHost>http://yourip:2375</dockerHost><!-- 指定 dockerfile 路径--><dockerDirectory>${project.basedir}</dockerDirectory><!-- 是否跳过docker构建 --><skipDockerBuild>false</skipDockerBuild></configuration></plugin>

2、docker服务端开启远程访问

#修改该文件
vim /lib/systemd/system/docker.service#找到ExecStart行,修改成如下内容
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H fd:// --containerd=/run/containerd/containerd.sock
systemctl daemon-reload				#重启守护进程
systemctl restart docker			#重启docker
  • 安全问题: 如果你没有公网ip,此步骤可以跳过
    2375:这是 Docker 守护进程(dockerd)默认监听的端口,用于提供 HTTP 明文通信 的远程管理接口。如果你将 Docker 的 2375 端口暴露在公网,风险极大,因为任何人都可以不需要身份验证地远程控制你的 Docker 容器(包括运行恶意镜像、提权、访问主机文件系统等)。如果要启用远程 API,建议:
  1. 使用 2376 + TLS 认证;
  2. 或者通过 SSH 隧道代理访问;
  3. 或者限制 IP 白名单;
  4. 更推荐使用 Docker Socket Proxy 结合认证和限权机制
    我这里采用的是白名单, 也就是此端口只对对应的ip开放,
    docker中配置,另外我在腾讯云的策略组中也进行了限制

在这里插入图片描述

3、编写dockerfile文件

  • 该文件的位置必须是和pom.xml处于同一个目录
FROM mycentos-jdk17
MAINTAINER cgj
EXPOSE 8080
ADD target/springboot-demo-1.0-SNAPSHOT.jar /springboot-demo-1.0-SNAPSHOT.jarWORKDIR /
ENTRYPOINT ["java" , "-jar" , "springboot-demo-1.0-SNAPSHOT.jar"]

4.制作并查看镜像

先clean, 然后直接使用install即可
在这里插入图片描述

在这里插入图片描述
✅ 两个镜像标签的解释:

你构建的镜像被打了 两个标签(tags):
1. springboot-demo:latest
• 这是默认标签。
• 如果你没有显式指定 tag,Docker 会自动加上 latest。
2. springboot-demo:v2.0
• 这是你在构建脚本、配置文件或命令中明确指定的版本号标签。
• 比如 Maven 插件配置了

<tag>v2.0</tag>

🧱 Docker 标签不是副本,而是“指针”

Docker 镜像的 tag 其实是 指向镜像 ID(68ac058f9d16)的名字别名,所以这两个 tag 其实指向的是同一个镜像:
可以删除一个 tag,不影响另一个。

docker rmi springboot-demo:latest

5、创建容器并进行访问

docker run -d --name  bootv2 -p 8080:8080 springboot-demo:v2.0

运行和手动一样,都是成功这里不在演示

相关文章:

SpringBoot项目容器化进行部署,meven的docker插件远程构建docker镜像

需求&#xff1a;将Spring Boot项目使用容器化进行部署 前提 默认其他环境,如mysql,redis等已经通过docker部署完毕, 这里只讨论,如何制作springboot项目的镜像 要将Spring Boot项目使用docker容器进行部署&#xff0c;就需要将Spring Boot项目构建成一个docker镜像 一、手动…...

【小记】excel vlookup一对多匹配

一个学生报四门课&#xff0c;输出每个学生课程 应用概述操作预处理数据计数指令 COUNTIFS进行一对多匹配 vlookup 应用概述 应用场景&#xff1a;学生报名考试&#xff0c;需要整理成指定格式&#xff0c;发给考试院。 一个学生最多报考四门 格式实例&#xff1a;准考证号 …...

LeetCode热题100 两数之和

目录 两数之和题目解析方法一暴力求解代码 方法二哈希代码 感谢各位大佬对我的支持,如果我的文章对你有用,欢迎点击以下链接 &#x1f412;&#x1f412;&#x1f412; 个人主页 &#x1f978;&#x1f978;&#x1f978; C语言 &#x1f43f;️&#x1f43f;️&#x1f43f;…...

问题解决思路:numpy:DLL load failed

首先明确几点&#xff1a; 1这是在使用anaconda中除开base环境下其他envs时出现的问题 2这不是pytorch版本过高的问题&#xff08;也可以是&#xff09; 3这不是pytorch安装错误的问题&#xff08;也可以是&#xff09;需要检查是否正确安装 解决思路&#xff1a; 本人遇到…...

[春秋云镜] Brute4Road 仿真场景

文章目录 靶标介绍&#xff1a;知识点约束性委派攻击 外网redis主从复制base64提权 内网搭建代理wpcargo插件漏洞mssql弱口令SweetPotato提权远程桌面连接mimikatz抓取hash约束性委派攻击 参考文章 靶标介绍&#xff1a; Brute4Road是一套难度为中等的靶场环境&#xff0c;完成…...

adb 实用命令汇总

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 基础adb命令 # 重启adb adb kill-server# 查看已连接的设备 adb devices# 进入命令行 adb shell# 使用 -s 参数来指定设备 adb -s <设备序列号> shell…...

鸿蒙系统使用ArkTS开发语言支持身份证阅读器、社保卡读卡器等调用二次开发SDK

har库导入&#xff1a; { "license": "", "devDependencies": {}, "author": "", "name": "entry", "description": "Please describe the basic information.", &qu…...

《Python星球日记》 第54天:卷积神经网络进阶

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、深度CNN架构解析1. LeNet-5&#xff08;1998&#xff09;2. AlexNet&#x…...

《AI大模型应知应会100篇》第53篇:Hugging Face生态系统入门

第53篇&#xff1a;Hugging Face生态系统入门 ——从模型获取到部署的全流程实战指南 &#x1f4cc; 摘要 在人工智能快速发展的今天&#xff0c;Hugging Face已成为自然语言处理&#xff08;NLP&#xff09;领域最具影响力的开源平台之一。它不仅提供丰富的预训练模型、强大…...

【基于 LangChain 的异步天气查询2】GeoNames实现地区实时气温查询

目录 功能简介 一、创建GeoNames账号 1、进入官网 2、创建账号 二、运行代码 weather_runnable.py main.py 运行结果 功能简介 本文主要通过Langchain&#xff0c;结合GeoNames实现了地区温度的实时查询&#xff0c;并通过GPT-4o对温度进行一段简短的描述。 一、创建Ge…...

嵌入式与物联网:C 语言在边缘计算时代的破局之道

引言 在万物互联的 2025 年&#xff0c;全球物联网设备连接数突破 300 亿台&#xff0c;其中 78% 的嵌入式控制系统仍基于 C 语言开发。这种跨越半个世纪的编程语言&#xff0c;正以新的技术形态在智能汽车、工业物联网、边缘计算等领域重塑竞争力。本文通过三个前沿应用场景&…...

《基于人工智能的智能客服系统:技术与实践》

一、引言 在数字化时代&#xff0c;客户服务已成为企业竞争的关键领域之一。随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;智能客服系统逐渐成为企业提升服务质量和效率的重要工具。智能客服不仅能够快速响应客户咨询&#xff0c;还能通过自然语言处理&am…...

5. HTML 转义字符:在网页中正确显示特殊符号

在 HTML 开发中,我们经常会遇到需要显示特殊字符的情况,比如 <、>、空格或版权符号等。直接输入这些字符可能会导致 HTML 解析错误或显示异常。接下来通过学习 HTML 转义字符(也称为实体字符),将会掌握了如何在网页中正确显示这些特殊符号的方法。 一、为什么需要转…...

基于nodejs + Koa +Nuxt3的订单系统项目实战

以下是一个基于 Node.js Koa Nuxt3 的订单系统项目实战指南&#xff0c;包含关键实现步骤和代码示例&#xff1a; 一、项目架构设计 project/ ├── backend/ # Koa 后端 │ ├── config/ # 配置文件 │ ├── controllers/ # 控制器 │ ├──…...

软件开发者如何转战AI领域

在人工智能&#xff08;AI&#xff09;技术迅猛发展的当下&#xff0c;越来越多的软件工程师开始考虑转型进入AI领域。本文将探讨AI软件行业的现状、所需能力&#xff0c;以及普通软件工程师在转型过程中可以借助的技能和需要补充的知识。 AI软件行业的现状 截至2025年&#…...

服务器数据恢复—硬盘坏道导致EqualLogic存储不可用的数据恢复

服务器存储数据恢复环境&故障&#xff1a; 一台EqualLogic某型号存储中有一组由16块SAS硬盘组建的RAID5阵列。上层采用VMFS文件系统&#xff0c;存放虚拟机文件&#xff0c;上层一共分了4个卷。 磁盘故障导致存储不可用&#xff0c;且设备已经过保。 服务器存储数据恢复过程…...

JAVA实战开源项目:智能学习平台系统 (Vue+SpringBoot) 附源码

本文项目编号 T 181 &#xff0c;文末自助获取源码 \color{red}{T181&#xff0c;文末自助获取源码} T181&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...

Linux系统使用vscode格式化shell脚本

推荐工具及配置方案 BeautySH 特点 纯 Python 实现&#xff0c;轻量级且活跃维护。 配置步骤 安装 BeautySH pip3 install beautyshVSCode 集成 打开命令面板&#xff08;CtrlShiftP&#xff09;&#xff0c;输入 Tasks: Configure Task&#xff0c;选择 Create tasks.json f…...

牛客练习赛138

目录 A-小s的签到题 无注释版 有注释版 B-行列改写 无注释版 有注释版 C-树上替身追赶游戏 无注释版 有注释版 A-小s的签到题 无注释版 #include<bits/stdc.h> using namespace std; struct f{char ch;int x; }a[110]; bool cmp(f p,f q){if(p.xq.x) return p…...

傅利叶十周年,升级核心战略:“有温度”的具身智能蓝图

5月9日&#xff0c;傅利叶十周年庆典暨首届具身智能生态峰会在上海正式召开。本次大会以“十年共创&#xff0c;具身成翼”为主题&#xff0c;汇聚了来自通用机器人与医疗康复领域的顶尖专家学者、合作伙伴与投资机构&#xff0c;共同探索具身智能在未来十年的技术应用与生态发…...

JS正则表达式介绍(JavaScript正则表达式)

文章目录 JavaScript正则表达式完全指南正则表达式基础元字符与特殊字符基本元字符. - 点号\d - 数字\D - 非数字\w - 单词字符\W - 非单词字符\s - 空白字符\S - 非空白字符 正则表达式标志常用标志详解g - 全局匹配i - 忽略大小写m - 多行匹配s - 点号匹配所有字符u - Unicod…...

AI安全之对抗样本攻击---FGSM实战脚本解析

一、对抗样本与FGSM的背景 在深度学习安全领域&#xff0c;对抗样本&#xff08;Adversarial Examples&#xff09;因其特殊的生成机制备受关注。2015年ICLR会议收录的里程碑式论文《Explaining and Harnessing Adversarial Examples》中&#xff0c;Goodfellow等学者首次系统…...

《Python星球日记》 第50天:深度学习概述与环境搭建

名人说&#xff1a;路漫漫其修远兮&#xff0c;吾将上下而求索。—— 屈原《离骚》 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、什么是深度学习&#xff1f;它与传统机器学习的区别1. 深度学习的定义2. 深…...

Android开发-图像显示

在Android应用开发中&#xff0c;图像显示是提升用户体验的重要元素之一。无论是展示产品图片、用户头像还是应用程序图标&#xff0c;合理地使用图像资源可以显著增强界面的吸引力和功能性。本文将详细介绍如何在Android应用中有效地显示图像&#xff0c;包括加载本地与网络图…...

linux搭建hadoop学习

linux搭建hadoop学习 下载安装包: 海外资源可能需要翻墙或者找国内资源 cd /opt wget https://dlcdn.apache.org/hadoop/common/hadoop-2.10.2/hadoop-2.10.2.tar.gz tar -zxvf hadoop-2.10.2.tar.gz mv hadoop-2.10.2 hadoop配置环境变量 # 在/etc/profile文件中添加下面内…...

PyTorch API 8 - 工具集、onnx、option、复数、DDP、量化、分布式 RPC、NeMo

文章目录 torch.nn.inittorch.nn.attention工具集子模块 torch.onnx概述基于 TorchDynamo 的 ONNX 导出器基于TorchScript的ONNX导出器贡献与开发 torch.optim如何使用优化器构建优化器每个参数的选项执行优化步骤optimizer.step()optimizer.step(closure) 基类算法如何调整学习…...

0基础 | STM32 | TB6612电机驱动使用

TB6612介绍及使用 单片机通过驱动板连接至电机 原因&#xff1a;单品机I/O口输出电流I小 驱动板&#xff1a;从外部引入高电压&#xff0c;控制电机驱动 电源部分 VM&#xff1a;电机驱动电源输入&#xff0c;输入电压范围建议为3.7&#xff5e;12V GND&#xff1a;逻辑电…...

【Linux】POSIX 线程信号量与互斥锁▲

代码要求&#xff1a;高内聚&#xff0c;低耦合 高内聚&#xff1a;元素之间具有很强的关联性&#xff0c;模块的功能单一且集中 低耦合&#xff1a;代码之间的依赖关系尽可能简单&#xff0c;相互之间的影响和交互尽可能少 线程安全问题&#xff1a;多线程访问共享数据&…...

轻松制作高质量视频,实时生成神器LTX-Video重磅登场!

探索LTX-Video&#xff1a;实时视频生成跨越新高度 在如今这个视觉内容主导的数字时代&#xff0c;视频生成成为推动创意表达的关键。而今天&#xff0c;我们将带您深入探索LTX-Video&#xff0c;一个强大的开源项目&#xff0c;致力于通过尖端技术将视频生成提升到一个全新的…...

USR-M100采集数据并提交MQTT服务器

本文为记录备忘&#xff0c;不做过多解释。 模块自身带有2路数字量输入&#xff0c;2路模拟量输入&#xff0c;2路485接口 数字量接报警输入&#xff0c;模拟量接压力传感器&#xff0c;液位传感器&#xff0c;485接口分别接流量计&#xff0c;温湿度传感器。 正确接线&…...