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

宿州网站建设设计公司海口可信的海南网站建设

宿州网站建设设计公司,海口可信的海南网站建设,在线药店网站建设,搜索引擎优化的内容需求:将Spring Boot项目使用容器化进行部署 前提 默认其他环境,如mysql,redis等已经通过docker部署完毕, 这里只讨论,如何制作springboot项目的镜像 要将Spring Boot项目使用docker容器进行部署,就需要将Spring Boot项目构建成一个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

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

http://www.dtcms.com/a/577496.html

相关文章:

  • Go Map 实现原理解析:从数据结构到核心机制
  • 百度做的网站国外可以打开吗软件开发过程五个步骤
  • 快速入门 - 开始使用 Azure Digital Twins Explorer 中的示例场景
  • 快速入门 - Azure 数字孪生的 3D 场景工作室(预览版)入门
  • 【OS zephyr】子系统logging
  • 哪里有免费建设网站企业解决方案ppt
  • Android内核进阶之获取PCM状态snd_pcm_status:用法实例(八十三)
  • 建设银行网站用户登录网页类界面图片
  • 【产品调研】MATB-II 软件用户指南总结
  • 程序开发的步骤东莞关键词排名seo
  • 重装系统后,恢复mysql的方法
  • 年化波动率匹配原则在ETF网格区间选择中的应用
  • 智慧公厕系统单机版与联网版有哪些区别
  • 华为技术有限公司 C语言编程规范
  • 新买的硬盘格式化后容量为啥缩水啦?
  • 【Ros2学习】服务-客户端模式
  • 网站建设的新闻重庆建网
  • 数字货币时代网络域名的价值评估
  • 帆软报表本地设计器中连接远程服务器后SAP数据集不显示问题
  • 第174期 TIMM:让迁移学习变得异常简单的PyTorch“隐藏”库
  • git cherry-pick
  • AR 眼镜之-普通电话-实现方案
  • 下厨房网站学做蒸包视频可以上传自己做的视频的网站吗
  • IO卡常见问题处理
  • 11_FastMCP 2.x 中文文档之FastMCP高级功能:用户引导详解
  • 门户网站 移动端黄石专业网站建设推广
  • 类的嵌套 、封装
  • (128页PPT)麦肯锡金字塔原理培训思考写作和解决问题的逻辑(附下载方式)
  • Python 类实战:从“函数堆函数”到“客户端对象”,看类如何让 API 请求代码脱胎换骨
  • springboot的单元测试功能有什么用