Docker部署Java Web项目实战指南
1. 项目概述最近在整理黑马程序员Java Web课程的学习笔记时发现项目部署环节使用Docker确实能极大提升效率。作为一个从传统部署方式转型过来的开发者我想分享下这个过程中积累的实战经验。Docker部署不仅解决了环境不一致的痛点还能实现一键部署和快速回滚特别适合Java Web项目的持续交付场景。2. 环境准备与基础配置2.1 Docker环境搭建对于Java Web项目部署建议使用Docker CE稳定版。在Ubuntu系统上安装时记得先卸载旧版本sudo apt-get remove docker docker-engine docker.io containerd runc然后执行官方推荐的安装命令sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ gnupg-agent \ software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository \ deb [archamd64] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) \ stable sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io注意生产环境务必配置docker用户组避免直接使用root权限操作容器2.2 Java环境镜像选择针对Java Web项目基础镜像的选择直接影响最终镜像大小和安全性openjdk:8-jdk-alpine推荐体积仅105MB包含完整的JDK环境适合中小型项目adoptopenjdk:11-jre-hotspot体积约200MB使用JRE减少攻击面适合生产环境自定义基础镜像基于ubuntu:20.04构建可预装监控组件适合企业级项目3. 项目Docker化实战3.1 标准Dockerfile编写以Spring Boot项目为例典型的多阶段构建Dockerfile# 构建阶段 FROM maven:3.6.3-jdk-11 AS builder WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src ./src RUN mvn package -DskipTests # 运行阶段 FROM openjdk:11-jre-slim WORKDIR /app COPY --frombuilder /app/target/*.jar app.jar EXPOSE 8080 ENTRYPOINT [java,-jar,app.jar]关键优化点使用多阶段构建减小最终镜像体积先单独复制pom.xml下载依赖利用Docker缓存使用非root用户运行容器增强安全性3.2 容器网络配置Java Web项目通常需要连接数据库推荐使用自定义bridge网络docker network create app-network运行MySQL容器时加入该网络docker run -d \ --name mysql \ --network app-network \ -e MYSQL_ROOT_PASSWORDsecret \ -e MYSQL_DATABASEappdb \ mysql:5.7应用容器连接同一网络即可通过容器名访问spring.datasource.urljdbc:mysql://mysql:3306/appdb4. 生产环境部署方案4.1 健康检查配置在Dockerfile中添加健康检查指令HEALTHCHECK --interval30s --timeout3s \ CMD curl -f http://localhost:8080/actuator/health || exit 1配合Spring Boot Actuator的health端点可以实时监控应用状态。4.2 日志收集方案推荐采用以下日志处理方式json-file日志驱动默认docker run --log-driverjson-file --log-opt max-size10m --log-opt max-file3ELK方案Filebeat收集容器日志输出到Logstash最终在Kibana展示生产环境必备参数-e JAVA_TOOL_OPTIONS-XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath/tmp -v /host/path:/tmp5. 常见问题排查指南5.1 容器内存问题现象容器频繁重启日志显示OOM解决方案限制容器内存docker run -m 512m --memory-swap1g调整JVM参数-e JAVA_OPTS-Xms256m -Xmx256m5.2 时区不一致问题现象日志时间与系统时间不符解决方法FROM openjdk:8-jdk-alpine RUN apk add --no-cache tzdata ENV TZAsia/Shanghai5.3 容器启动慢问题优化方案使用.dockerignore文件排除无关文件构建时指定构建缓存目录docker build --build-arg MAVEN_OPTS-Dmaven.repo.local/path/to/cache6. 进阶部署技巧6.1 使用Docker Compose编排典型docker-compose.yml配置version: 3.8 services: app: build: . ports: - 8080:8080 depends_on: - mysql environment: - SPRING_PROFILES_ACTIVEprod networks: - app-network mysql: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: secret MYSQL_DATABASE: appdb volumes: - mysql_data:/var/lib/mysql networks: - app-network networks: app-network: driver: bridge volumes: mysql_data:6.2 CI/CD集成示例GitLab CI配置片段deploy: stage: deploy script: - docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY - docker build -t $CI_REGISTRY_IMAGE . - docker push $CI_REGISTRY_IMAGE - ssh userserver docker pull $CI_REGISTRY_IMAGE docker-compose up -d only: - master7. 监控与维护7.1 基础监控方案推荐使用cAdvisorPrometheusGrafana组合docker run \ --volume/:/rootfs:ro \ --volume/var/run:/var/run:ro \ --volume/sys:/sys:ro \ --volume/var/lib/docker/:/var/lib/docker:ro \ --publish8080:8080 \ --detachtrue \ --namecadvisor \ google/cadvisor:latest7.2 容器更新策略蓝绿部署示例流程新版本容器使用不同标签逐步将流量切换到新容器旧版本保留一段时间后下线docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d --scale app3 --no-recreate在实际项目中根据流量情况逐步替换旧容器是最稳妥的方式。我通常会保留旧版本容器运行至少30分钟确认监控指标正常后再完全下线。

相关新闻

仅限前500名开发者获取:SD局部重绘Prompt工程白皮书V3.2(含21类物体专属重绘指令集+mask容错率测试报告)

仅限前500名开发者获取:SD局部重绘Prompt工程白皮书V3.2(含21类物体专属重绘指令集+mask容错率测试报告)

更多请点击: https://codechina.net 第一章:SD局部重绘Prompt工程白皮书V3.2核心价值与适用边界 SD局部重绘(Inpainting)Prompt工程V3.2聚焦于精准控制生成区域语义一致性、遮罩边缘自然融合与文本指令-像素级对齐三大能力。其核…

2026/10/19 20:48:55 阅读更多 →
新能源功率预测技术:从数据采集到决策优化

新能源功率预测技术:从数据采集到决策优化

1. 新能源功率预测的现状与困境 2026年对于新能源行业来说是个关键的转折点。根据最新数据,太阳能发电装机规模即将首次超越传统煤电,风光发电合计占比将达到总装机容量的一半左右。这个里程碑式的成就背后,却隐藏着一个令人担忧的现象&#…

2026/10/18 4:18:04 阅读更多 →
Nostrum事件处理机制深度剖析:编写响应式Discord机器人

Nostrum事件处理机制深度剖析:编写响应式Discord机器人

Nostrum事件处理机制深度剖析:编写响应式Discord机器人 【免费下载链接】nostrum Elixir Discord Library 项目地址: https://gitcode.com/gh_mirrors/no/nostrum Nostrum是一个基于Elixir语言开发的Discord机器人库,其高效的事件处理机制是构建响…

2026/10/18 4:17:55 阅读更多 →

最新新闻

把 REA 逆向分析的 token 消耗压下来:给 Agent 的搜索与追踪上三道闸门

把 REA 逆向分析的 token 消耗压下来:给 Agent 的搜索与追踪上三道闸门

把 REA 逆向分析的 token 消耗压下来:给 Agent 的搜索与追踪上三道闸门 【免费下载链接】rea Reverse engineer anything with agents, from app behavior down to native binaries. 项目地址: https://gitcode.com/GitHub_Trending/rea2/rea 让 REA 这类 Ag…

2026/10/20 1:20:54 阅读更多 →
Apache Gravitino 安装部署完整指南:十分钟搭建统一元数据湖

Apache Gravitino 安装部署完整指南:十分钟搭建统一元数据湖

Apache Gravitino 安装部署完整指南:十分钟搭建统一元数据湖 【免费下载链接】gravitino Worlds most powerful open data catalog for building a high-performance, geo-distributed and federated metadata lake. 项目地址: https://gitcode.com/GitHub_Trendi…

2026/10/20 1:20:54 阅读更多 →
PySR项目中导入问题的分析与解决

PySR项目中导入问题的分析与解决

PySR项目中导入问题的分析与解决 【免费下载链接】PySR Symbolic Learning in Python and Julia 项目地址: https://gitcode.com/GitHub_Trending/py/PySR 引言:当符号回归遇上导入困境 你是否曾经满怀期待地安装PySR这个强大的符号回归工具,却在…

2026/10/20 1:20:54 阅读更多 →
Spike RISC-V 模拟器安装指南:三步完成编译与首次运行验证

Spike RISC-V 模拟器安装指南:三步完成编译与首次运行验证

Spike RISC-V 模拟器安装指南:三步完成编译与首次运行验证 【免费下载链接】riscv-isa-sim Spike, a RISC-V ISA Simulator 项目地址: https://gitcode.com/GitHub_Trending/ri/riscv-isa-sim Spike 是一款 RISC-V 指令集模拟器,它以功能模型的方…

2026/10/20 1:20:54 阅读更多 →
PySR项目中关于JuliaCall错误的技术分析与解决方案

PySR项目中关于JuliaCall错误的技术分析与解决方案

PySR项目中关于JuliaCall错误的技术分析与解决方案 【免费下载链接】PySR Symbolic Learning in Python and Julia 项目地址: https://gitcode.com/GitHub_Trending/py/PySR 引言:当高性能符号回归遭遇JuliaCall困境 你是否曾经满怀期待地安装PySR&#xff…

2026/10/20 1:20:54 阅读更多 →
千页文档逐页喂给大模型,这个“最贵“的设计真的划算吗?PageIndex 性能账本拆解

千页文档逐页喂给大模型,这个“最贵“的设计真的划算吗?PageIndex 性能账本拆解

千页文档逐页喂给大模型,这个"最贵"的设计真的划算吗?PageIndex 性能账本拆解 【免费下载链接】PageIndex 📑 PageIndex: Document Index for Vectorless, Reasoning-based RAG 项目地址: https://gitcode.com/GitHub_Trending/p…

2026/10/20 1:19:53 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →