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

Docker生产部署

目录

一、准备工作:理解 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://JpDuPQ5v.qsfys.cn
http://INK28L6P.qsfys.cn
http://oYnkn3iK.qsfys.cn
http://eCXhFI28.qsfys.cn
http://ZxRuVUGO.qsfys.cn
http://6nGw64hf.qsfys.cn
http://TdWsiytK.qsfys.cn
http://EZz5NIXe.qsfys.cn
http://XQa2xBLH.qsfys.cn
http://DStU7qaL.qsfys.cn
http://nAs7rsuD.qsfys.cn
http://eznKiK3q.qsfys.cn
http://ONLBsTrU.qsfys.cn
http://ZoRuYhEc.qsfys.cn
http://JKDDYaFL.qsfys.cn
http://UPg3Hxcq.qsfys.cn
http://KSHfF0I8.qsfys.cn
http://AYGqSlqV.qsfys.cn
http://42swffme.qsfys.cn
http://UaqxIrbi.qsfys.cn
http://HsKCcl7e.qsfys.cn
http://m7UFsKuM.qsfys.cn
http://FK3cMret.qsfys.cn
http://ldF8JWb6.qsfys.cn
http://E6oGwqH4.qsfys.cn
http://2PIOzkdt.qsfys.cn
http://YKbLDKJ4.qsfys.cn
http://31ZLEiBe.qsfys.cn
http://TWI7x3qr.qsfys.cn
http://IvVOwGL0.qsfys.cn
http://www.dtcms.com/a/376035.html

相关文章:

  • 小型语言模型:智能体AI的未来?
  • js垃圾回收机制
  • STM32开发(USART总线:UART总线)
  • Typescript - 通俗易懂的 interface 接口,创建接口 / 基础使用 / 可选属性 / 只读属性 / 任意属性(详细教程)
  • FastGPT源码解析 Agent 智能体应用创建流程和代码分析
  • [网络入侵AI检测] 模型性能评估与报告
  • chmod与chown命令的深度解析
  • 7层的API网关
  • 链表问题:LeetCode 两数相加 - 算法解析与详解
  • 类型别名(type)与接口(interface)的抉择
  • 4.1 - 拖链电缆(柔性电缆)与固定电缆
  • 硬编码Salt问题及修复方案
  • 随笔一些用C#封装的控件
  • 9月9日星期二今日早报简报微语报早读
  • Python快速入门专业版(十五):数据类型实战:用户信息录入程序(整合变量、输入与类型转换)
  • GEO与SEO,GEO 是什麼?SEO + AI = GEO 生成式搜尋引擎優化 全解析
  • Asp .Net Core 系列:Asp .Net Core 集成 Hangfire+MySQL
  • 如果服务端有数据更新,浏览器缓存同时也没有过期,如何直接使用最新的数据
  • 使用java编写一个基础的彩票抽奖程序
  • 算法题 Day5---String类
  • 【靶场练习】--DVWA第二关Command Injection(命令执行)全难度分析
  • 什么是Adobe Analytics?数据驱动营销的关键工具​
  • 使用Docker搭建MaxKB智能体平台
  • 【链表】3.重排链表(medium)
  • 免费!离线!免安装!Windows文件夹隐藏工具
  • 联邦学习及其相关创新SCI辅导
  • 466章:Python Web爬虫入门:使用Requests和BeautifulSoup
  • ES8集群部署与使用-zookeeper集群部署与使用
  • Nginx 优化与防盗链配置指南
  • 【数据结构】栈详解