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

Java Spring Boot 项目 Docker 容器化部署教程

在现代微服务架构中,容器化部署已成为主流。通过 Docker,我们可以将 Spring Boot 应用及其依赖打包成镜像,实现“一次构建,到处运行”。下面以一个典型的 Spring Boot 项目为例,演示如何编写 Dockerfile 并完成部署。


1. 项目准备

  • 项目结构:典型的 Maven Spring Boot 项目,主模块为 yudao-server
  • 工具链
    • JDK 17(运行时使用 JRE)
    • Maven 3.9+
    • Docker 20.10+
  • 忽略文件:在 .dockerignore 中排除 .gittarget/node_modules/ 等无关目录,减少构建上下文。
.git
.gitignore
.idea/
.vscode/
node_modules/
yudao-ui/
.image/
target/
*/target/
*.log
*.iml
*.swp
*.bak
*.tmp
*.DS_Store

2. 多阶段 Dockerfile

采用 多阶段构建,第一阶段编译打包,第二阶段生成精简运行镜像:

# -------------------------------
# 构建阶段:使用 Maven 构建产物
# -------------------------------
FROM maven:3.9.6-eclipse-temurin-17 AS builderWORKDIR /build# 复制项目源码(通过 .dockerignore 控制粒度)
COPY . .# 使用 BuildKit 缓存 Maven 仓库,加速依赖下载
RUN --mount=type=cache,target=/root/.m2 \mvn -B clean package -DskipTests# -------------------------------
# 运行阶段:构建精简运行镜像
# -------------------------------
FROM eclipse-temurin:17-jre-alpine# 安全性:创建非 root 用户
RUN addgroup -S sdkj && adduser -S sdkj -G sdkjWORKDIR /app# 拷贝构建产物(统一命名为 app.jar)
COPY --from=builder /build/yudao-server/target/*.jar ./app.jar# 可选:复制配置文件目录(支持挂载覆盖)
COPY --from=builder /build/yudao-server/src/main/resources ./config# 创建日志目录并赋权,避免 logback 写文件时报错
RUN mkdir -p /app/logs && chown -R sdkj:sdkj /app/logs# 设置时区
ENV TZ=Asia/Shanghai# JVM 参数(可通过 docker run -e JAVA_OPTS=... 覆盖)
ENV JAVA_OPTS="-Xms512m -Xmx1024m -Djava.security.egd=file:/dev/./urandom"# Spring Profile(可通过 docker run -e SPRING_PROFILE=dev 覆盖)
ENV SPRING_PROFILE=prod# 暴露端口(默认 48087)
EXPOSE 48087# 使用非 root 用户运行
USER sdkj# 启动命令(支持挂载配置目录)
ENTRYPOINT ["sh", "-c"]
CMD ["exec java $JAVA_OPTS -jar app.jar $ARGS"]

亮点:

  • BuildKit 缓存 Maven 仓库,加速依赖下载
  • 非 root 用户运行,提升安全性
  • 日志目录预创建并赋权,避免 logback 报错
  • 环境变量可覆盖,灵活配置 JVM 参数和 Spring Profile

3. 构建与运行

构建镜像

docker build -t myapp:1.0 .

运行容器

docker run -d \-p 48087:48087 \-e JAVA_OPTS="-Xms256m -Xmx512m" \-e SPRING_PROFILE=dev \-v /opt/config:/app/config \-v /opt/logs:/app/logs \myapp:1.0
  • 挂载配置目录:支持覆盖默认配置
  • 挂载日志目录:日志持久化到宿主机
  • 环境变量覆盖:灵活调整运行参数

4. 常见问题

问题解决方案
构建慢使用 BuildKit 缓存 Maven 依赖
日志写入失败确认 /app/logs 权限已赋给非 root 用户
配置未生效检查 SPRING_PROFILE 环境变量是否正确
容器时区错误确认 TZ=Asia/Shanghai 已设置

5. 总结

通过 多阶段构建 + 非 root 用户 + 配置挂载,我们实现了一个 安全、轻量、可配置 的 Spring Boot 容器化方案。
这种方式不仅适合本地开发,也能无缝对接 CI/CD 流水线(如 GitLab CI/CD + Harbor 推送)。

http://www.dtcms.com/a/573373.html

相关文章:

  • YOLOv8 模型 NMS 超时问题解决方案总结
  • 苏州网站设计公司有哪些行业网站导航
  • 福建外贸网站dw做网站注册页代码
  • VBA信息获取与处理专题五第三节:发送带附件的电子邮件
  • Linux上kafka部署和使用
  • 天河网站建设策划如何做阿里巴巴的网站
  • 网站建设自主开发的三种方式南充移动网站建设
  • 自动化测试用例的编写和管理
  • 头歌MySQL——数据库与表的基本操作
  • DUOATTENTION:结合检索与流式注意力机制的高效长上下文大语言模型推理方法
  • SAMWISE:为文本驱动的视频分割注入SAM2的智慧
  • Linux 进程状态:内核角度与应用层角度
  • A与非A、综合分析技巧
  • java之jvm堆内存占用问题
  • 江门网站制作设计网站地址栏图标文字
  • 做游戏网站多少钱网站做好了怎么上线
  • taro UI 的icon和自定义iconfont的icon冲突
  • 【开发】Git处理分支的指令
  • Linux 进程的写时拷贝(Copy-On-Write, COW)详解
  • git将克隆的目录作为普通文件夹上传
  • 集群网络技术1:RDMA和相关协议
  • SesameOp 恶意软件滥用 OpenAI Assistants API 实现与 C2 服务器的隐蔽通信
  • 网站开发服务器怎么选wordpress文章404
  • 安装 awscli
  • AWS + 发财CMS:高效采集站的新形态
  • 360提交网站wordpress购物商城代码
  • 在 DGX Spark 上使用 Ollama 打开 WebUI
  • 中小型网站服务器搭建方案西安做网站公司
  • Linux 常用命令详解与使用规则
  • ELK日志分析组件介绍+部署详解