目录

一、准备工作:理解 Docker 与 Spring Boot 的关系

1. Docker 是什么?

2. Spring Boot 为什么适合 Docker?

二、编写Dockerfile

三、配置管理

挂载外部配置文件

四、用 docker-compose 编排多服务


一、准备工作:理解 Docker 与 Spring Boot 的关系

1. Docker 是什么?

        Docker 是一个容器化平台,可以把你的应用 + 依赖 + 运行环境打包成一个镜像,在任何支持 Docker 的机器上运行。

2. Spring Boot 为什么适合 Docker?

  • 内嵌 Tomcat/Jetty,无需外部容器
  • 打包成 fat jar,依赖自包含
  • 配置灵活
  • 启动快、资源轻,适合微服务架构

二、编写Dockerfile

在 Spring Boot 项目的根目录下,创建 Dockerfile

# 第一阶段:构建阶段(使用 Maven 镜像)
FROM maven:3.8.6-openjdk-17 AS builder
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests# 第二阶段:运行阶段(使用轻量 JRE 镜像)
FROM openjdk:17-jre-slim
WORKDIR /app
COPY --from=builder /app/target/*.jar app.jar# 创建非 root 用户(安全最佳实践)
RUN addgroup --system spring && adduser --system --ingroup spring spring
USER springEXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

构建镜像:

docker build -t campus-app:1.0 .

运行容器:

docker run -d -p 8080:8080 --name campus-app campus-app:1.0

三、配置管理

        Spring Boot 支持多 profile,Docker 可通过环境变量或挂载配置文件实现灵活切换。

挂载外部配置文件

docker run -d \-p 8080:8080 \-v /path/to/application-prod.yml:/app/config/application.yml \--name campus-app \campus-app:1.0

Spring Boot 默认会加载 config/ 目录下的配置文件,优先级高于 jar 包内配置。

四、用 docker-compose 编排多服务

        真实项目往往不止一个服务 —— 还有 MySQL、Redis、Nginx 等。

创建 docker-compose.yml

version: '3.8'services:# Spring Boot 应用app:build: .ports:- "8080:8080"environment:- SPRING_PROFILES_ACTIVE=docker- DB_HOST=mysql- REDIS_HOST=redisdepends_on:- mysql- redisvolumes:- ./logs:/app/logsrestart: unless-stopped# MySQL 数据库mysql:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: root123MYSQL_DATABASE: campusports:- "3306:3306"volumes:- mysql_data:/var/lib/mysqlrestart: unless-stopped# Redis 缓存redis:image: redis:7-alpineports:- "6379:6379"restart: unless-stoppedvolumes:mysql_data:

启动整个环境

docker-compose up -d

查看日志

docker-compose logs -f app

一键启动完整开发/测试环境。

五、性能与安全优化

1. JVM 参数调优

在 Dockerfile 或启动命令中指定:

ENTRYPOINT ["java", "-XX:+UseZGC", "-Xmx512m", "-jar", "app.jar"]

2. 健康检查(Health Check)

在 docker-compose.yml 中添加:

healthcheck:test: ["CMD", "curl", "-f", "http://localhost:8080/actuator/health"]interval: 30stimeout: 10sretries: 3

3 日志与监控

挂载日志目录:volumes: - ./logs:/app/logs

使用 ELK 或 Loki + Grafana 收集日志

暴露 Prometheus 指标端点(/actuator/prometheus),配合 Grafana 监控 JVM、HTTP 请求

启动流程与健康检查时序图

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

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

相关文章

ARM 基础(3)

ARM汇编与C语言函数的相互调用及参数传递汇编调用C函数参数传递规则 前4个参数通过寄存器 R0-R3 传递,超出部分从右向左压栈。32位返回值存于 R0,64位整数用 R0 和 R1,浮点数通过 S0/D0 返回。示例:ARM汇编调用C函数.global _star…

OpenCV计算机视觉笔记合集

参考课程: 【黑马程序员 OpenCV入门教程】 [https://www.bilibili.com/video/BV1Fo4y1d7JL] ZZHow(ZZHow1024) 学习路线 基本的图像处理方法:几何变换,形态学变换,图像平滑,直方图操作,模板匹配&#…

Mybatis-12 第三方缓存-EhCache

配置文档 Ehcache配置文件ehcache.xml Java Ehcache缓存的timeToIdleSeconds和timeToLiveSeconds区别 基本介绍 1.EhCache是一个纯Java的缓存框架,具有快速、精干等特点 2.MyBatis有自己默认的二级缓存(前面我们已经使用过了),…

元器件--电容器

文章目录一、技术理论  1、电容定义  2、定义式  3、单位换算  4、电容作用  5、电容特性二、组成结构  1、极板(电极)​​  ​​2、介质(绝缘层)​​  3、引线(电极引出端)​​  4、封装…

【Leetcode hot 100】146.LRU缓存

问题链接 146.LRU缓存 问题描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中,则返回关…

MySQL超大数据量查询与删除优化

引言 在处理TB级数据时,传统SQL操作可能导致性能崩溃。本文揭示MySQL超大数据量场景下的核心优化策略,通过生产环境案例展示如何将亿级数据删除耗时从8小时压缩至8分钟,并附完整监控方案与容灾措施。 深度剖析海量数据操作痛点 1. 传统删除操…

【内存管理】常用的页表映射函数

1、pgd_addr_end 根据当前虚拟地址 addr 和目标结束地址 end,计算当前 PGD 项 能够覆盖的最大虚拟地址范围的结束地址 next。 如果 addr 和 end 跨越多个 PGD 项(即 end 超出当前 PGD 项的地址范围),则返回当前 PGD 项的地址边界。…

XR数字融合工作站赋能新能源汽车专业建设的创新路径

XR数字融合工作站作为集PC、VR、MR技术于一体的软硬件集成平台,凭借其多维交互、虚实融合、智能管理等特性,为新能源汽车专业的教学改革与创新提供了全新解决方案。一、教学场景革新:构建沉浸式、互动化学习环境XR数字融合工作站通过多形态拼…

C语言通用链表终章:优雅的收尾 - 清空与销毁

各类资料学习下载合集 ​https://pan.quark.cn/s/8c91ccb5a474​ 经过前面的学习,我们已经从零构建了一个功能强大的通用链表,它能自如地进行节点的插入和删除。我们的“数据火车”已经可以驰骋在内存的世界里。然而,旅途终有终点,当火车完成任务后,如何安全、彻底地让…

MATLAB R2025a安装配置及使用教程(超详细保姆级教程)

文章目录前言什么是MATLAB?了解这款数据分析利器matlab安装前准备工作MATLAB R2025a下载完整MATLAB R2025a安装步骤MATLAB进阶应用技巧前言 全网最新最全的MATLAB R2025a安装教程来了!2025年版本完整图文指南,包含软件下载、详细安装、密钥激…

在Mybatis plus中如何使用自定义Sql

在演示UpdateWrapper的案例中&#xff0c;我们在代码中编写了更新的SQL语句&#xff1a;Test void testUpadateWrapper(){List<Long> ids List.of(1L,2L,4L);//生成SQLUpadateWrapper<User> wrapper new UpdateWrapper<User> ().setSql("balance balan…

Deepoc科技之暖:智能助盲设备如何为视障家人点亮生活

作为一名视障人士的家属&#xff0c;我们或许都经历过这样的时刻&#xff1a;看着亲人在书架前摸索&#xff0c;却无法独自获取文字信息&#xff1b;担心他们外出时遇到障碍物或交通危险&#xff1b;心疼他们因找不到日常物品而不得不一次次求助。这些细微的日常困境&#xff0…

大模型食材识别技术革新:AI重构精准营养管理

随着健康意识的提升&#xff0c;饮食管理需求激增&#xff0c;但传统手动记录易出错、效率低。大模型食材识别技术的突破&#xff0c;让AI通过多模态输入精准识别食材种类与重量&#xff0c;结合营养数据库&#xff0c;系统可快速生成营养报告&#xff0c;实现从“经验驱动”到…

使用 Altair RapidMiner 将机器学习引入您的 Mendix 应用程序

Altair RapidMiner 使机器学习更加容易&#xff1a;无论您喜欢使用 Python 编码&#xff0c;还是在 Workflow Studio 中进行可视化工作&#xff0c;Altair AI Cloud 都能为团队提供快速构建和部署 ML 模型的工具。 将机器学习与 Mendix 集成很简单&#xff1a;通过 Mendix 的低…

EasyExcel:快速读写Excel的工具类

EasyExcel&#xff1a;快速读写Excel的工具类 项目介绍 ​EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。 他能让你在不用考虑性能、内存的等因素的情况下&#xff0c;快速完成Excel的读、写等功能。 pom地址 ‍ <!--exel--> <depe…

WSL Ubuntu Docker 代理自动配置教程

WSL Ubuntu Docker 代理自动配置教程 WSL Ubuntu Docker 代理自动配置教程 背景说明 在 WSL2 环境下使用 Docker 时&#xff0c;由于网络环境限制&#xff0c;经常需要通过 Windows 主机上的代理来访问 Docker Hub。但每次 Windows 重启后&#xff0c;WSL 获取到的主机 IP 地址…

踩坑实录:Django继承AbstractUser时遇到的related_name冲突及解决方案

一、问题现象分析 咱们在用Django开发时&#xff0c;有时候需要扩展用户模型&#xff0c;就会去继承AbstractUser。但这么做的时候&#xff0c;要是没处理好groups和user_permissions这两个多对多字段的反向查询名称&#xff0c;就会遇到这样的报错&#xff1a;主要就是这种错误…

push pop 和 present dismiss

push/pop 和 present/dismiss 文章目录push/pop 和 present/dismiss前言push / poppresent普通的present多层present多层present后的父子关系问题多层弹出会遇到的问题showViewController 和 showDetailViewControllershowViewControllershowDetailViewControllerdismiss模态化…

服务器异常负载排查手册 · 隐蔽进程篇

适用范围 适用于 Linux 3.10 生产环境&#xff0c;发现 load 高但用户态 CPU 接近 0 % 的场景。1. 现场冻结目标&#xff1a;在 rootkit 干预前保存易失数据。#!/bin/bash # freeze.sh TS$(date %s) mkdir -p /srv/ir/${TS} cd /srv/ir/${TS}# 1.1 进程树&#xff08;busybox 静…

2024理想算法岗笔试笔记

要理解指令微调&#xff08;Instruction Tuning&#xff09;&#xff0c;需要先将其置于大语言模型&#xff08;LLM&#xff09;的训练框架中 —— 它并非模型训练的起点&#xff0c;而是针对 “让模型更懂人类需求” 的关键优化步骤。简单来说&#xff0c;指令微调是通过让模型…