Docker容器部署Java项目(详细版)

🤟致敬读者

  • 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉

📘博主相关

  • 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息

文章目录

  • Docker容器部署Java项目
    • 1. 环境及准备
    • 2. 项目打包
    • 2. Dockerfile
    • 3. 上传文件
    • 4. 构建镜像
    • 5. 运行容器
    • 6. 查看日志
    • 7. 测试接口
      • 7.1 ip和端口
      • 7.2 接口访问
    • 8. 拓展(通过线上镜像仓库部署服务)
      • 8.1 推送镜像到仓库
      • 8.2 服务端部署


📃文章前言

  • 🔷文章均为学习工作中整理的笔记。
  • 🔶如有错误请指正,共同学习进步。

Docker容器部署Java项目

1. 环境及准备

docker容器已安装(未安装参考文章安装docker容器安装docker)
Java环境镜像已创建(拉取线上的或本地制作,可参考制作JDK环境镜像(包含配置jdk环境变量))
Java项目已完成(提前准备好一个Java项目,能正常跑起来,且接口可成功调用)SpringBoot的搭建(两种方式)

这里准备了一个spring boot项目

2. 项目打包

将Java项目打成jar包
可参考文章:Java项目打包(使用IntelliJ IDEA打包Java项目)
可参考文章:Java项目打包(Maven命令打包)指南(操作简单)
可参考文章:Java项目打包方式汇总

2. Dockerfile

制作项目镜像的Dockerfile文件

# 使用官方 Java 基础镜像(推荐选择与开发环境一致的 JDK 版本,由于服务器内网环境无法拉取线上基础镜像故自行构建Java8镜像)
FROM java:8# 设置容器内工作目录(可选)
# WORKDIR /app# 复制 JAR 文件到容器中(注意名称与实际打包的 JAR 文件一致)(这里提前将app.jar通过oss复制进来放在了Dockerfile文件同级目录中,故无需指定target路径)
COPY app.jar app.jar# 暴露应用端口(与 application.yml/properties 中 server.port 一致)
EXPOSE 8089# 设置 JVM 启动参数(可选,如内存限制、时区)
ENV JAVA_OPTS="-Xmx512m -Duser.timezone=Asia/Shanghai"# 启动命令(使用 exec 形式避免信号丢失)
ENTRYPOINT exec java ${JAVA_OPTS} -jar app.jar

3. 上传文件

FileZilla下载安装使用指南(精简)
linux服务器上安装oss对象存储(命令行工具使用oss)
将项目jar包和Dockerfile文件通过FTP工具上传到服务器指定位置
这里直接使用oss工具上传了
在服务器中创建的文件夹路径下将文件都传进来
上传jar包

ossutil64 cp oss://dev/3_JWH/01_JAVA_BACK/app.jar app.jar

上传Dockerfile

ossutil64 cp oss://dev/3_JWH/01_JAVA_BACK/Dockerfile Dockerfile

上传完成后查看文件

ls

在这里插入图片描述

4. 构建镜像

根目录执行构建
-t 指定镜像名称和标签,注意结尾的 “.” 表示使用当前目录的 Dockerfile

docker build -t sb_back:20250326 .

在这里插入图片描述

验证镜像是否生成

docker images

在这里插入图片描述

5. 运行容器

执行命令运行容器(启动服务)
-p 端口映射,映射宿主机端口 3006 到容器端口 8089
-d 后台运行
--name 容器别名,可自定义,这里定义为sb-back
sb-back:20250326 用于运行容器的镜像名和标签TAG

docker run -d -p 3006:8089 --name sb_back sb_back:20250326

在这里插入图片描述运行成功后查看正在运行的容器

docekr ps

在这里插入图片描述

6. 查看日志

查看日志确认启动是否成功

docker logs -f sb_back

7. 测试接口

7.1 ip和端口

将服务部署到docker后
访问接口的ip和端口就变成了运行容器时所在服务器的ip和指定的端口号
如我们的服务器ip为172.180.10.1
刚刚指定的端口为3006
访问的ip地址就是

http://172.180.10.1:3006

7.2 接口访问

正常默认调用接口可如下(无参数)

curl http://172.180.10.1:3006/test/test1 

默认请求头参数:Content-Type: application/x-www-form-urlencoded

如果有参数,且指定了请求头类型,如
请求类型为POST,请求参数为JSONObject(这里内容为空),请求头为application/json
如图
在这里插入图片描述

则curl调用如下

curl http://172.180.10.1:3006/test/test1 -H "Content-Type:application/json" -d "{}"

在这里插入图片描述

调用成功如下
在这里插入图片描述

关于curl调用接口的详细内容可参考:curl调用带参数接口方法

8. 拓展(通过线上镜像仓库部署服务)

上面是本地运行容器,下面可以将镜像上传到镜像仓库,通过线上拉取
将部署到服务器

8.1 推送镜像到仓库

登录 Docker Hub(需提前注册账号)

docker login

标记镜像(格式:docker.io/<用户名>/<镜像名>:<标签>)

docker tag sb-back:1.0.0 yourusername/sb-back:1.0.0

推送镜像

docker push yourusername/sb-back:1.0.0

8.2 服务端部署

登录 Docker(若使用私有仓库)

docker login

拉取镜像

docker pull yourusername/sb-back:1.0.0

运行容器(示例:后台运行 + 端口映射 + 自动重启)

docker run -d \--name sb-back \-p 3006:8089 \--restart=always \yourusername/sb-back:1.0.0

📜文末寄语

  • 🟠关注我,获取更多内容。
  • 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
  • 🟢《全栈知识库》技社区,集结全栈各领域开发者,期待你的加入。
  • 🔵​加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
  • 🟣点击下方名片获取更多内容🍭🍭🍭👇

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

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

相关文章

C语言深度解析:从零到系统级开发的完整指南

一、C语言的核心特性与优势 1. 高效性与直接硬件控制 C语言通过编译为机器码的特性&#xff0c;成为系统级开发的首选语言。例如&#xff0c;Linux内核通过C语言直接操作内存和硬件寄存器&#xff0c;实现高效进程调度。 关键点&#xff1a; malloc/free直接管理内存&#…

Pytorch实现之基于GAN+序列后向选择的情绪识别增强方法

简介 简介:在WGAN-GP+CGAN的基础上利用了序列后向选择方法来挑选优质样本补充到训练集当中,丰富训练数据集。 论文题目:基于生成对抗网络的情绪识别数据增强方法 期刊:传感技术学报 摘要:使用深度学习方法构建高准确率的情绪识别模型需要大量的情绪脑电数据。 生成对抗…

软件工程面试题(十九)

1、十六进制的216转换十进制是多少: 216是16进制,转10进制: =2*16^2+1*16^1+6*16^0 =512+16+6 =536 2、Java中的XML解析方式: dom和jdom解析 Java中处理XML文档的标准API有两种,即XML的简单API(SAX,Simple API for XML)和文档对象模型(DOM,…

大模型AI Agent的工作原理与安全挑战

大模型AI Agent的工作原理与安全挑战 0x00 引言 智能体&#xff08;AI Agent&#xff09;作为大语言模型技术&#xff08;LLM&#xff09;的具体应用形式&#xff0c;突破了传统语言模型仅限于文字输入与输出的局限性。其通过感知环境、规划决策及执行行动的闭环机制&#xf…

腻子刮的遍数越多越好?刮的越厚墙面越平?

很多业主对刮腻子存在误区&#xff0c;感觉腻子刮的越厚越好&#xff0c;遍数越多越好。同时认为腻子有找平的作用&#xff0c;感觉墙面不平&#xff0c;就是腻子刮的不行。 有一位业主给我留言&#xff0c;说家里的腻子刮了两遍&#xff0c;然后油工师傅就开始打磨刷漆了&…

「深入解析 Chromium Message Pump:消息循环的核心驱动」

MessagePump 是 Chromium 中 消息循环&#xff08;Message Loop&#xff09; 的核心组件之一&#xff0c;负责在不同平台上管理和分发消息、事件&#xff0c;并协调任务调度。 在浏览器这样的 GUI 应用中&#xff0c;事件循环&#xff08;Event Loop&#xff09;是非常重要的&…

3d pose 指标和数据集

目录 3D姿态估计、3维重建指标: 数据集 EHF数据集 SMPL-X 3D姿态估计、3维重建指标: MVE、PMVE 和 p-MPJPE 都是用于评估3D姿态估计、三维重建等任务中预测结果与真实数据之间误差的指标。 MVE (Mean Vertex Error):是指模型重建过程中每个顶点的预测位置与真实位置之间…

大智慧大数据面试题及参考答案

目录 MySQL 的事务隔离级别是什么? MySQL 的覆盖索引是怎样的? MySQL 常用的存储引擎有哪些,它们之间的区别是什么? 在 MySQL 中,如果读取很大的数据集,同时进行一边 select 一边写入操作,结果会怎样? 当 ES 出现分词错误的情况时,应该如何处理? Kafka 如何保证…

微服务的简单认识

目录 一、微服务架构简介 二、微服务架构风格和分布式系统架构的关系 三、微服务组成 一、微服务架构简介 微服务是一种构建分布式系统的架构风格,它将一个大型的应用程序拆分成多个小型的、独立部署的服务单元,每个服务单元都专注于特定的业务功能,并通过轻量级的通信机…

Spring的 @Conditional @ConditionalOnProperty 注解 笔记250330

Spring的 Conditional ConditionalOnProperty 注解 Spring 的 Conditional 与 ConditionalOnProperty 注解详解 在 Spring 框架中&#xff0c;Conditional 和 ConditionalOnProperty 是用于动态控制 Bean 注册的重要注解。虽然它们都服务于条件化配置&#xff0c;但定位和使用…

电路学习——MOS栅极驱动电阻取值(2025.03.30)

参考链接1: 驱动芯片的驱动电流的选型和计算 参考链接2: NMOS栅极驱动电阻Rg阻值和功率的计算&#xff0c;NMOS栅极驱动电阻Rg的作用&#xff0c;如何防止NMOS误开通 单片机直接驱动NMOS的方法 RLC谐振电路 智能车BLDC 在此感谢各位前辈大佬的总结&#xff0c;写这个只是为了记…

mysql JSON_ARRAYAGG联合JSON_OBJECT使用查询整合(数组对象)字段

父表数据&#xff08;表名&#xff1a;class&#xff09; idname1一年级2二年级3三年级 子表数据&#xff08;表名&#xff1a;students&#xff09; idnameclassId11张三112李四113小明3 关联子表sql查询&#xff08;推荐使用方法一&#xff09; 方法一 (使用IFNull判断子…

张量-pytroch基础(2)

张量-pytroch网站-笔记 张量是一种特殊的数据结构&#xff0c;跟数组&#xff08;array&#xff09;和矩阵&#xff08;matrix&#xff09;非常相似。 张量和 NumPy 中的 ndarray 很像&#xff0c;不过张量可以在 GPU 或其他硬件加速器上运行。 事实上&#xff0c;张量和 Nu…

marked库(高效将 Markdown 转换为 HTML 的利器)

文章目录 前言使用基本使用自定义渲染器例子 代码高亮 前言 最近尝试了一下通过星火大模型将ai引入到项目上&#xff0c;但是ai返回的数据可以显而易见的发现是markedown语法的&#xff0c;那么就需要一个工具&#xff0c;将类似这种的格式转换为markdown格式 Marked 是一个用…

调用deepseek大模型时智能嵌入函数

DeepSeek-R1 当前炙手可热,以其强大的自然语言处理和推理能力而广受赞誉。饶是如此,却并不原生支持函数调用(function_call),这是开发过程中不可或缺的一部分。虽有第三方调校的模型支持,然终非官方自带,还需假以时日。本文虽然简短,应该是全网写得最通透的了吧。 …

SQLMesh系列教程:基于指标构建一致的分析语义层应用实践

本文深入探讨SQLMesh指标框架的核心概念、定义方法及应用场景。通过统一的语义层管理&#xff0c;SQLMesh解决了数据分析中指标定义不一致的痛点&#xff0c;实现了跨团队协作的数据一致性。文章包含指标定义语法详解、自动表连接机制解析、派生指标构建方法&#xff0c;并通过…

基于OpenCV+MediaPipe手部追踪

一、技术栈 1. OpenCV&#xff08;Open Source Computer Vision Library&#xff09; 性质&#xff1a;开源计算机视觉库&#xff08;Library&#xff09; 主要功能&#xff1a; 图像/视频的基础处理&#xff08;读取、裁剪、滤波、色彩转换等&#xff09; 特征检测&#xf…

机器学习ML极简指南

机器学习是现代AI的核心&#xff0c;从推荐系统到自动驾驶&#xff0c;无处不在。但每个智能应用背后&#xff0c;都离不开那些奠基性的模型。本文用最简练的方式拆解核心机器学习模型&#xff0c;助你面试时对答如流&#xff0c;稳如老G。 线性回归 线性回归试图通过"最…

装饰器模式:如何用Java打扮一个对象?

引言装饰器模式具体实例共有接口类具体被装饰类抽象装饰器类具体装饰器类 测试装饰器模式的实际应用Java I/O 体系游戏开发中的角色装备系统 总结 引言 在生活中&#xff0c;我们都知道一句话&#xff0c;“人靠衣装马靠鞍”&#xff0c;如果想要让自己在别人眼里看起来更加好…

【Easylive】HikariCP 介绍

【Easylive】项目常见问题解答&#xff08;自用&持续更新中…&#xff09; 汇总版 HikariCP 是目前 Java 生态中最快、最轻量级的高性能 JDBC 连接池&#xff0c;被 Spring Boot 2.x 及更高版本选为 默认数据库连接池。它的名字来源于日语“光”&#xff08;Hikari&#xf…