Docker 部署 SpringBoot 项目超详细教程

Docker 部署 SpringBoot 项目超详细教程

一篇适合新手的 Docker 部署 SpringBoot 实战教程,包含:

  • Docker 安装
  • 镜像加速
  • SpringBoot 打包
  • Dockerfile 编写
  • 构建镜像
  • 容器部署
  • 日志查看
  • 防火墙开放
  • 常见问题解决

图文并茂,保姆级教学。
本文假设你已拥有一台安装了 Docker 的 CentOS 8 服务器 ,直接聚焦于如何将 SpringBoot 应用打包成 Docker 镜像并运行。

全程提供清晰的操作步骤与生产环境建议,新手也能无痛上手。


一、Docker 核心概念速览

概念 说明 类比
镜像(Image) 包含应用及其运行环境的只读模板 安装包
容器(Container) 镜像的运行实例 运行中的程序
Dockerfile 构建镜像的步骤描述文件 安装说明书

二、准备工作:项目 jar 包

  1. 在本地通过 mvn package 打包 SpringBoot 项目,生成可执行 jar 文件(例如 springboot-ai-chatbot-0.0.1-SNAPSHOT.jar)。
  2. 在服务器上创建专属目录,并将 jar 上传到此目录。
bash 复制代码
mkdir -p /usr/local/springboot-ai-chatbot
cd /usr/local/springboot-ai-chatbot
# 通过 SFTP 等工具将 jar 包上传至此

三、编写 Dockerfile

在项目目录下创建 Dockerfile 文件:

bash 复制代码
vi Dockerfile

填入以下内容:

dockerfile 复制代码
# jdk
FROM eclipse-temurin:17
# 作者
LABEL maintainer="nicky"
# 工作目录
WORKDIR /app
# 拷贝 jar
COPY springboot-ai-chatbot-0.0.1-SNAPSHOT.jar app.jar
# 暴露端口
EXPOSE 8080
# 时区(可选)
ENV TZ=Asia/Shanghai
# 启动命令
ENTRYPOINT ["java","-jar","/app/app.jar"]

逐行解释:

  • FROM:选择 Amazon Corretto 17 镜像,体积小且包含 JDK17。
  • WORKDIR:指定工作目录,后续命令均在该目录下执行。
  • COPY:将宿主机上的 jar 拷贝进镜像。
  • EXPOSE:告知 Docker 容器内应用监听 8080 端口。
  • ENTRYPOINT:容器启动时执行 java -jar app.jar 启动应用。

四、构建 Docker 镜像

Dockerfile 所在目录执行:

bash 复制代码
docker build -t springboot-ai-chatbot:1.0 .

注意命令末尾的 . 表示使用当前目录作为构建上下文,不可省略

构建成功后,查看本地镜像:

bash 复制代码
docker images

输出示例:

复制代码
REPOSITORY               TAG       IMAGE ID       CREATED          SIZE
springboot-ai-chatbot    1.0       abc123def456   10 seconds ago   350MB

五、运行容器

使用以下命令启动容器:

bash 复制代码
docker run -d \
  --name springboot-ai-chatbot \
  -p 8080:8080 \
  --restart=always \
  springboot-ai-chatbot:1.0

参数详解:

参数 作用
-d 后台运行容器
--name 为容器起一个名字,便于后续管理
-p 宿主机端口:容器端口 将宿主机 8080 端口映射到容器 8080 端口
--restart=always 容器异常退出或 Docker 重启后自动拉起容器

检查容器是否正常运行:

bash 复制代码
docker ps

看到 STATUSUp 即表示成功。


六、验证部署与查看日志

6.1 访问应用

在浏览器中访问 http://服务器IP:8080

若无法访问,请先开放防火墙端口:

bash 复制代码
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload

6.2 查看实时日志

bash 复制代码
docker logs -f springboot-ai-chatbot

当终端出现 Started XxxApplication 字样时,说明 SpringBoot 启动成功。


七、生产环境优化:目录挂载

将容器内的日志和配置文件目录挂载到宿主机,便于持久化和动态调整配置。

先创建宿主机目录:

bash 复制代码
mkdir -p /usr/local/springboot-ai-chatbot/{logs,config}

重新启动容器时加入 -v 参数:

bash 复制代码
# 先删除旧容器
docker rm -f springboot-ai-chatbot

# 带挂载启动
docker run -d \
  --name springboot-ai-chatbot \
  -p 8080:8080 \
  -v /usr/local/springboot-ai-chatbot/logs:/app/logs \
  -v /usr/local/springboot-ai-chatbot/config:/app/config \
  --restart=always \
  springboot-ai-chatbot:1.0
  • /app/logs 目录挂载后,应用日志会直接写入宿主机,方便日志收集。
  • /app/config 目录可放入 application.yml,修改后重启容器即可应用新配置。

八、常用 Docker 管理命令

操作 命令
查看运行中容器 docker ps
停止容器 docker stop springboot-ai-chatbot
启动已停止的容器 docker start springboot-ai-chatbot
重启容器 docker restart springboot-ai-chatbot
强制删除容器 docker rm -f springboot-ai-chatbot
删除镜像 docker rmi springboot-ai-chatbot:1.0
进入容器内部调试 docker exec -it springboot-ai-chatbot /bin/bash

九、常见问题排查

1. 构建镜像时拉取基础镜像超时

现象i/o timeout
解决 :为 Docker 配置国内镜像加速。编辑 /etc/docker/daemon.json,添加:

json 复制代码
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://dockerproxy.com"
  ]
}

然后重启 Docker:systemctl restart docker

2. 端口无法访问

  • 检查容器是否运行:docker ps
  • 检查防火墙:firewall-cmd --list-ports,确保 8080 已放行
  • 确认端口映射正确:docker port springboot-ai-chatbot

3. 容器启动后立即退出

使用 docker logs springboot-ai-chatbot 查看错误信息,常见原因包括:jar 包损坏、端口冲突、数据库连接失败等,根据日志提示修正后重新构建镜像即可。


十、总结

Docker 部署 SpringBoot 项目的核心流程仅需四步:

text 复制代码
编写 Dockerfile → docker build → docker run → docker logs 验证

掌握这一流程后,你不仅能轻松部署单体应用,还将为后续微服务、CI/CD 流水线、Kubernetes 容器编排打下坚实基础。


如果觉得教程有用,欢迎分享给更多需要的小伙伴!

相关推荐
珂玥c2 小时前
kubeadm方式部署 k8s 1.21
云原生·容器·kubernetes
HLAIA光子2 小时前
这些Spring Boot写法已经过时了!
spring boot·后端
i220818 Faiz Ul2 小时前
宠物猫之猫咖管理系统|基于java + vue宠物猫之猫咖管理系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·宠物猫之猫咖管理系统
i220818 Faiz Ul3 小时前
二手交易系统|基于springboot + vue二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·论文·毕设·二手交易系统
逍遥德3 小时前
SpringBoot自带TaskScheduler 接口实现定时任务的动态增、删、启、停。
java·spring boot·后端·中间件
小义_3 小时前
【Kubernetes】(十九)监控与升级
云原生·容器·kubernetes
炸炸鱼.4 小时前
Kubernetes Pod 深度理解:从入门到实战
云原生·容器·kubernetes·pod
云游牧者4 小时前
K8S网络策略全解-NetworkPolicy与GlobalNetworkPolicy实战
网络·容器·kubernetes·cni
宇明一不急5 小时前
k8s 常用的正则表达式
云原生·容器·kubernetes