【初识 Docker | 中级篇】 Docker 中部署 Spring Boot 微服务详解

news2024/11/18 20:26:33

文章目录

  • 前言
  • 一、生成 Docker 镜像
    • 1.编写Dockerfile
    • 2.构建镜像
  • 二、启动容器
    • 1.运行服务
    • 2.测试
  • 三、jar包映射部署
    • 1.更新Dockerfile文件
    • 2.构建镜像
    • 3.创建&启动容器
  • 总结


前言

本文将为您详细介绍如何在Docker容器中部署Spring Boot服务。

首先,您需要为您的Spring Boot应用程序创建一个Docker镜像。然后将镜像在Docker容器中运行起来即可


提示:以下是本篇文章正文内容,下面案例可供参考

一、生成 Docker 镜像

1.编写Dockerfile

FROM openjdk:8-oracle
MAINTAINER cat

# 在主机 /var/lib/docker目录下创建一个临时文件,并链接到容器的 /tmp
VOLUME /tmp

# 将jar包添加到容器中,并命名为 springboot_docker.jar
ADD springboot-api-0.0.1-SNAPSHOT.jar /springboot_docker.jar
# 运行jar包
RUN bash -c 'touch /springboot_docker.jar'
ENTRYPOINT ["java", "-jar", "/springboot_docker.jar"]

# SpringBoot项目配置的端口号为8083,需要将8083暴露出去
EXPOSE 8083

这个Dockerfile文件使用alpine Linux操作系统和OpenJDK 8图像作为基础映像,将Spring Boot应用程序的JAR文件复制到springboot_docker.jar路径,然后使用ENTRYPOINT命令来启动应用程序。

2.构建镜像

将打包好的jar上传至服务器,与Dockerfile同一目录下

执行如下命令

docker build -t springboot_docker .

说明:docker build -t 镜像名称:标签 Dockerfile的相对位置,点号为寻址路径代表当前目录,不写tag默认是latest。

生成docker镜像如下:

二、启动容器

1.运行服务

执行命令docker run -d -p 8083:8083 --name myapp springboot_docker ,查看日志 docker logs -f -t --tail 行数 容器名

🚫出现报错:

Exception in thread "main" java.lang.UnsupportedClassVersionError:com/example/myweb/xxxApplication has been 
compiled by a more recent version of the Java Runtime (class file version 61.0), this version of the Java Runtime 
only recognizes class file versions up to 52.0

✅解决方法:

  • 编译版本和运行版本不一致,可能是编译版本高于运行版本导致的
  • 为spring-boot-maven-plugin增加的版本号

看一下项目JDK为17,修改为JDK8,重新编译打包,成功启动

2.测试

浏览器输入http://ip:8083/demo-api/hello/world

三、jar包映射部署

根据上述步骤成功通过docker部署springboot服务,但是这样在启动容器后,每次需更新jar包时,都得重新制作镜像,再启动容器。流程及其繁琐,效率极低。

那如何在不更新镜像或者容器的前提下直接更新jar包完成部署呢?

1.更新Dockerfile文件

FROM openjdk:8-jdk-alpine

MAINTAINER cat

RUN mkdir -p /demo/springboot/logs \
    /demo/springboot/temp \
    /demo/skywalking/agent

WORKDIR /demo/springboot

ENV SERVER_PORT=8083

EXPOSE ${SERVER_PORT}

ADD /springboot-api-0.0.1-SNAPSHOT.jar app.jar

ENTRYPOINT ["java", \
            "-Djava.security.egd=file:/dev/./urandom", \
            "-Dserver.port=${SERVER_PORT}", \
#            "-Dskywalking.agent.service_name=demo-springboot", \
#            "-javaagent:/demo/skywalking/agent/skywalking-agent.jar", \
            "-jar", "app.jar"]

2.构建镜像

docker build -t demo-springboot .

3.创建&启动容器

docker run --name demo-springboot -it -v /docker/java/demo/springboot-api-0.0.1-SNAPSHOT.jar:/demo/springboot/app.jar 
-v /dlogs:/demo/springboot/logs -d -p 8083:8083 demo-springboot

-v 宿主机目录关联容器目录。这样宿主机的/docker/java/demo目录就与docker的/demo/springboot/目录进行映射。(这里还映射了日志目录)

这样的话,当jar包发生变动时,直接更新宿主机的/docker/java/demo/目录下的jar包即可,更新jar包之后需要将容器重启一下。

docker restart 容器id

总结

以上就是今天要讲的内容,本文仅仅简单介绍了如何在Docker容器中部署Spring Boot服务,以上方法亲测有效,希望能给大家一个参考。

⭕关注博主,不迷路 ⭕

创作不易,关注💖、点赞👍、收藏🎉就是对作者最大的鼓励👏,欢迎在下方评论留言🧐

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

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

相关文章

Argo CD 实践教程 07

在本章中,我们将探讨如何设置用户访问Argo CD的权限,以及从终端或CI/CD管道连接CLI的选项,以及如何执行基于角色的访问控制。我们将查看单点登录(SSO)选项,通常这是一个需要付费的功能,但由于Ar…

Bean与@Bean注解

文章目录 一、背景与IoC二、注解Bean1、Bean注解用法2、Bean注解源码3、Bean注解演示 一、背景与IoC 之前的代码书写现状—耦合度偏高。如下图,业务层需要数据层实现类对象BookDaoImpl,于是自己new了一个,此时,当数据层类名改为B…

隐藏菜单之菜单和搜索

先看效果&#xff1a; 再看代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>菜单</title><style>/* css代码开始*/* {margin: 0;padding: 0;box-sizing: border-box;}b…

人工智能(pytorch)搭建模型15-手把手搭建MnasNet模型,并实现模型的训练与预测

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能(pytorch)搭建模型15-手把手搭建MnasNet模型&#xff0c;并实现模型的训练与预测&#xff0c;本文将介绍MnasNet模型的原理&#xff0c;并使用PyTorch框架构建一个MnasNet模型用于图像分类任务&#xff0c;…

1、电商数仓(用户行为采集平台)数据仓库概念、用户行为日志、业务数据、模拟数据、用户行为数据采集模块、日志采集Flume

1、数据仓库概念 数据仓库&#xff08; Data Warehouse &#xff09;&#xff0c;是为企业制定决策&#xff0c;提供数据支持的。可以帮助企业&#xff0c;改进业务流程、提高产品质量等。 数据仓库的输入数据通常包括&#xff1a;业务数据、用户行为数据和爬虫数据等。 业务数…

Linux——使用第三方库链接的方式——动态式

回顾上文&#xff1a; (122条消息) Linux使用第三方库链接的使用方式——静态式_橙予清的zzz~的博客-CSDN博客https://blog.csdn.net/weixin_69283129/article/details/131414804?spm1001.2014.3001.5502 上篇文章中&#xff0c;我讲到了关于链接第三方库作为静态库的使…

股票技术分析方法综述

文章目录 K线均线MACDKDJ和RSIBOLL线趋势理论、支撑位和压力位形态理论量价关系理论道氏理论波浪理论江恩理论缠论自定义指标 K线 K线的组合形态是K线技术分析中的重要部分&#xff0c;包括早晨之星、黄昏之星、红三兵、黑三兵等。 早晨之星&#xff1a;由三根K线组成&#x…

OpenGL 抗锯齿

1.简介 你可以看到&#xff0c;我们只是绘制了一个简单的立方体&#xff0c;你就能注意到它存在锯齿边缘。 可能不是非常明显&#xff0c;但如果你离近仔细观察立方体的边缘&#xff0c;你就应该能够看到锯齿状的图案。如果放大的话&#xff0c;你会看到下面的图案&#xff1a…

家校互动、班级管理系统

最近做了一款使用若依开源框架搭建的一款家校互动、班级管理的平台&#xff0c;采用uniapp作为APP端&#xff0c;原生小程序作为小程序的家长端。

软件测试的概念与过程(软件测试的历史、概念、结构、过程)

软件测试的概念与过程----软件测试的历史 软件测试的历史软件的概念软件的结构软件测试的过程 软件测试的历史 1、早期的的软件开发过程中&#xff0c;将测试“调试”&#xff0c;目的是纠正软件已经知道的故障&#xff0c;常常有开发人员自己去完成这部分工作。 2、1957年&…

使用数据集工具

一.数据集工具介绍 HuggingFace通过API提供了统一的数据集处理工具&#xff0c;它提供的数据集如下所示&#xff1a; 该界面左侧可以根据不同的任务类型、类库、语言、License等来筛选数据集&#xff0c;右侧为具体的数据集列表&#xff0c;其中有经典的glue、super_glue数据集…

Unity | HDRP高清渲染管线学习笔记:材质系统Lit着色器

目录 一、Lit着色器 1. Surface Options 2. Surface Inputs&#xff08;表面输入&#xff09; 3. Transparency Inputs 二、HDRP渲染优先级 我们可以把现实世界中的物体分成不透明物体和透明物体&#xff08;其中包括透明或者半透明&#xff09;。在实时渲染时&#xff0c…

Debian二次开发网关支持Docker+RS485+网口

随着物联网技术的不断发展&#xff0c;瑞芯微边缘计算网关作为一种集成多种接口和功能的智能网关&#xff0c;逐渐成为了物联网领域中的热门产品。本文将详细介绍瑞芯微边缘计算网关的特点和优势&#xff0c;并探讨其在实际应用中的广泛应用。 瑞芯微Linux系统边缘计算网关是一…

【Java】 Java 私有接口方法的使用

本文仅供学习参考&#xff01; 相关教程地址&#xff1a; https://www.baeldung.com/java-interface-private-methods https://www.geeksforgeeks.org/private-methods-java-9-interfaces/ https://www.runoob.com/java/java9-private-interface-methods.html 接口是定义一组方…

java之路—— SpringMVC的常用注解解析以及作用、应用

创作不易&#xff0c;真的希望能给个免费的小 文章目录 1、Controller2、RequestMapping3.GetMapping、PostMapping、PutMapping、DeleteMapping4. RequestParam5.PathVariable6.RequestHeader7.CookieValue8.RequestBody9.ResponseBody10.SessionAttribute11.ControllerAdvice…

二层、三层交换机是什么?有什么区别?

作者&#xff1a;Insist-- 个人主页&#xff1a;insist--个人主页 作者会持续更新网络知识和python基础知识&#xff0c;期待你的关注 前言 本文将讲解二层交换机和三层交换机是什么&#xff0c;以及他们的区别。 目录 一、二层交换机是什么&#xff1f; 二、二层交换机的主…

本地生活多城市合伙人系统开发

本地生活多城市合伙人项目是一种基于本地生活服务的创业项目&#xff0c;旨在为各个城市的居民提供方便、实惠、高品质的生活服务。该项目通过招募多个城市的合伙人&#xff0c;建立完整的本地生活服务平台和供应链体系&#xff0c;覆盖不同类型的本地生活服务&#xff0c;如餐…

Nginx的Rewrite(地址重定向)

目录 前言 一、Rewrite 跳转场景 二、Rewrite 跳转实现 三、Rewrite实际场景 3.1Nginx跳转需求的实现方式 3.2rewrite放在 server{}&#xff0c;if{}&#xff0c;location{}段中 3.3对域名或参数字符串 四、Rewrite正则表达式 五、Rewrite语法格式 5.1rewrite语法格式…

互联网常见架构接口压测性能分析及调优手段建议

目录 互联网常见架构接口压测性能分析及调优手段建议 1 接口名称: 获取列表 1.1 压测现象:单台tps700多&#xff0c;应用cpu高负载 1.1.1 问题分析: 1.1.2 改进措施: 1.1.3 改进效果: 1.2 压测现象&#xff1a;数据库资源利用率高 1.2.1 问题分析: 1.2.2 改进措施: 1.2.3 改…

SciencePub学术 | 计算机科学类重点SCIEEI征稿中

SciencePub学术 刊源推荐:计算机科学类重点SCIE&EI征稿中&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 计算机科学类重点SCIE&EI 【期刊简介】IF&#xff1a;3.0-3.5&#xff0c;JCR 2区&#xff0c;中科院4区&#xff1b; 【检…