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

Docker容器化部署实战:从零构建Spring Boot微服务镜像

前言

Docker 是现代微服务架构的基石。将 Spring Boot 应用容器化,可以实现一次构建,处处运行。本文带你从零完成 Spring Boot 应用的 Docker 容器化部署。

一、为什么需要 Docker

  • 环境一致性:开发、测试、生产环境完全一致
  • 快速部署:秒级启动,秒级扩容
  • 资源隔离:每个容器独立运行,互不影响
  • CI/CD 友好:与 Jenkins/GitHub Actions 无缝集成

二、Spring Boot 项目准备

<!-- pom.xml -->
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>mvn clean package -DskipTests
// target/myapp-1.0.0.jar

三、编写 Dockerfile

# 基础版
FROM openjdk:21-jdk-slim
WORKDIR /app
COPY target/myapp-1.0.0.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]# 多阶段构建(推荐)
FROM maven:3.9-eclipse-temurin-21 AS builder
WORKDIR /build
COPY pom.xml .
RUN mvn dependency:go-offline
COPY src ./src
RUN mvn package -DskipTestsFROM eclipse-temurin:21-jre-alpine
WORKDIR /app
COPY --from=builder /build/target/myapp-1.0.0.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

四、构建和运行

# 构建镜像
docker build -t myapp:1.0.0 .# 运行容器
docker run -d --name myapp -p 8080:8080 \-e SPRING_PROFILES_ACTIVE=prod \-e JAVA_OPTS="-Xms256m -Xmx512m" \myapp:1.0.0# 查看日志
docker logs -f myapp# 进入容器调试
docker exec -it myapp sh

五、Docker Compose 编排

# docker-compose.yml
version: "3.8"
services:app:build: .ports:- "8080:8080"environment:- SPRING_PROFILES_ACTIVE=prod- SPRING_DATASOURCE_URL=jdbc:mysql://db:3306/mydbdepends_on:db:condition: service_healthyrestart: alwaysdb:image: mysql:8.0environment:- MYSQL_ROOT_PASSWORD=123456- MYSQL_DATABASE=mydbvolumes:- mysql_data:/var/lib/mysqlhealthcheck:test: ["CMD", "mysqladmin", "ping"]interval: 10sretries: 5redis:image: redis:7-alpineports:- "6379:6379"volumes:mysql_data:# 一键启动
docker compose up -d

六、镜像优化技巧

# 1. 使用 .dockerignore
# .dockerignore
.git
.mvn
target/classes
test# 2. 非root用户运行
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser# 3. 镜像大小对比
# openjdk:21-jdk = 470MB
# eclipse-temurin:21-jre-alpine = 90MB
# 节省 80%

七、常用命令速查

docker imagesdocker ps -adocker logs -f myappdocker stats

总结

Docker 容器化是 Java 开发者必备技能。核心要点:多阶段构建减小镜像、Docker Compose 编排多服务、合理利用缓存加速构建。

觉得有帮助请点赞收藏!有问题欢迎评论区交流 🚀

http://www.jsqmd.com/news/586960/

相关文章:

  • Windows环境下Dlib库安装完全指南:从报错到成功的实战手册
  • 终极VR视频转换神器:三步实现自由视角探索
  • AI视频生成终极指南:如何在3分钟内创作专业视频
  • 电力-电子式互感器设计方案
  • 构建高效资源分析工作流:Godot游戏资源解包的深度应用指南
  • 2026年深聊全国隔音效果好的轻奢别墅门品牌怎么选择 - myqiye
  • 2026年OpenClaw部署攻略:新手友好部署、配置大模型百炼APIKey、集成Skill详细步骤
  • seo代写文章如何选择合适的代写公司
  • @giszhc/sse-client:前端SSE(Server-Sent Events)通讯神器,这才是更优解(附在线示例)
  • GLM-4.1V-9B-Base行业落地:物流包裹照片破损识别与责任判定辅助
  • DeepSeek-R1-Distill-Qwen-1.5B成本优化:GGUF-Q4压缩部署案例
  • JianYingApi:视频自动化剪辑的技术架构与企业级实践
  • 2026年纯实木环保ENF级板材性价比排名,桦东木业排第几 - mypinpai
  • Open UI5 源代码解析之854:MenuItem.js
  • OpenArk:革新性Windows内核安全分析工具的突破性升级
  • image2cpp图像转换工具完全指南:从入门到精通
  • 如何利用Tantivy的JSON字段实现灵活动态Schema搜索:终极指南
  • YOLOV1-V9发展历程(1) (V1-V5)
  • uniapp打开webview链接(app内打开,不跳转外部浏览器),点击webview里面的按钮执行app.vue的方法,安卓能执行,苹果手机不行
  • 2026年济南靠谱的雕刻铝单板总结,专业单曲铝单板哪家性价比高 - 工业推荐榜
  • Coffee Chat 的高效转化:15 分钟的对话,如何从“求内推”升华为“技术探讨”?
  • VirtualBrowser:反检测浏览器自动化的突破性解决方案
  • AUTO-MAS终极指南:如何轻松管理多个自动化脚本与用户配置
  • B站直播推流码获取工具完整指南:5分钟解锁专业直播自由
  • Bowser文档生成终极指南:利用JSDoc创建专业API文档的完整教程
  • 智能风扇控制:Fan Control在多场景下的温度管理解决方案
  • 实战应用:基于快马平台构建项目级UI颜色规范管理工具
  • Melty AI代码编辑器终极调试指南:快速解决AI生成代码问题的10个技巧
  • 聊聊建华塑胶制品的核心竞争力是什么 其产品适合哪些工程 - 工业品牌热点
  • Qwen3-ASR-0.6B企业应用:制造业设备语音报修工单自动生成