Docker容器化部署Spring Boot项目实战指南(最新整理)

 更新时间:2026年02月27日 11:02:12   作者:盐城吊霸天  
本文给大家介绍Docker容器化部署Spring Boot项目实战指南,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

一、项目背景与技术栈

1. 项目概述

  • 项目名称:Spring Boot应用
  • 核心功能:用户管理系统(UserIndexController)
  • 技术栈
    • Spring Boot
    • JSP视图
    • MySQL数据库
    • Docker容器化

2. 部署目标

  • 将Spring Boot应用容器化
  • 将MySQL数据库容器化
  • 实现容器间网络通信
  • 确保应用正常访问

二、Docker基础配置

1. 环境准备

  • Docker版本:支持Docker Compose
  • 网络配置:默认bridge网络或自定义网络
  • 存储配置:Docker卷用于MySQL数据持久化
  • 网络环境:需要稳定的网络连接(镜像拉取可能需要科学上网)

2. 核心概念

  • 镜像:应用的可执行包
  • 容器:镜像的运行实例
  • 网络:容器间通信的桥梁
  • :数据持久化存储

三、Spring Boot项目配置

1. JSP视图配置

问题:访问UserIndexController的listUser方法跳转"index"页面时出现404错误 解决方案

修改pom.xml:配置JSP文件打包

<resources>
    <resource>
        <directory>src/main/resources</directory>
        <includes><include>**/*.*</include></includes>
    </resource>
    <resource>
        <directory>src/main/webapp/WEB-INF/jsp</directory>
        <targetPath>WEB-INF/jsp</targetPath>
        <includes><include>**/*.*</include></includes>
    </resource>
</resources>

修改application.properties:配置JSP视图解析器

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

2. 数据库配置

配置文件:application.properties

spring.datasource.url=jdbc:mysql://mysql8:3306/wxdev?
useUincode=true&characterEncoding=utf-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

四、MySQL容器部署

1. 基础部署

# 运行MySQL容器

docker run -d --name mysql8 -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root \
  -e MYSQL_DATABASE=wxdev \
  -v mysql-data:/var/lib/mysql \
  mysql:8.0

2. 数据持久化

  • 使用Docker卷:-v mysql-data:/var/lib/mysql
  • 优势:容器重启后数据不丢失,便于备份和迁移

3. 网络配置

  • 默认网络:容器IP通常为172.17.0.x
  • 端口映射:-p 3306:3306,宿主机可访问
  • 实际IP:MySQL容器IP为172.17.0.2(最终使用此IP连接)

五、Spring Boot应用容器化

1. 项目打包

运行

# 清理并打包项目

mvn clean package -DskipTests

2. Dockerfile配置

FROM amazoncorretto:8-alpine
COPY target/springboot-0.0.1-SNAPSHOT.war app.war
ENTRYPOINT ["java","-jar","/app.war"]

3. .dockerignore配置

问题:构建时出现"target目录不存在"错误 解决方案:修改.dockerignore文件

.git/
.gitignore
.idea/
*.iml
.DS_Store
*.log

# 不要包含target目录

4. 构建镜像

问题:下载JDK8镜像时失败 解决方案:使用科学上网工具后成功下载

# 构建Spring Boot镜像

docker build -t springboot-app .

六、容器网络通信

1. 网络模式选择

  • 默认bridge网络:通过IP地址通信
  • 自定义网络:支持容器名称DNS解析
  • host网络:与宿主机共享网络(不推荐)

2. 连接方式

最终方案:使用容器IP连接

# 获取MySQL容器IP(实际IP为172.17.0.2)
MYSQL_IP=$(docker inspect --format '{{range.NetworkSettings.
Networks}}{{.IPAddress}}{{end}}' mysql8)
# 运行Spring Boot容器(使用实际IP)
docker run -d --name springboot-app -p 8080:8080 \
  -e 'SPRING_DATASOURCE_URL=jdbc:mysql://172.17.0.2:3306/wxdev?
  useUincode=true&characterEncoding=utf-8' \
  -e SPRING_DATASOURCE_USERNAME=root \
  -e SPRING_DATASOURCE_PASSWORD=root \
  springboot-app

备选方案:使用docker-compose

version: '3.8'
services:
  springboot-app:
    image: springboot-app
    container_name: springboot-app
    ports:
      - "8080:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql8:3306/wxdev?
      useUincode=true&characterEncoding=utf-8
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=root
    depends_on:
      - mysql8
    networks:
      - app-network
    restart: unless-stopped
  mysql8:
    image: mysql:8.0
    container_name: mysql8
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=wxdev
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - app-network
    restart: unless-stopped
networks:
  app-network:
    driver: bridge
volumes:
  mysql-data:

3. 网络连通性测试

运行

# 进入Spring Boot容器

docker exec -it springboot-app sh

# 测试IP连通性

ping 172.17.0.2

# 测试MySQL端口

telnet 172.17.0.2 3306

七、部署验证

1. 容器状态检查

运行

# 查看所有容器状态

docker ps

# 查看Spring Boot容器日志

docker logs springboot-app

# 查看MySQL容器日志

docker logs mysql8

2. 应用访问测试

运行

# 测试应用访问

curl http://localhost:8080/

# 查看应用启动状态

docker logs springboot-app | grep "Started Application"

3. 数据库连接测试

运行

# 进入MySQL容器

docker exec -it mysql8 mysql -u root -p

# 查看数据库

show databases;

use wxdev;

show tables;

八、常见问题与解决方案

1. 构建问题

  • 问题:.dockerignore包含target导致构建失败
  • 解决方案:修改.dockerignore移除target配置
  • 问题:镜像拉取403 Forbidden或下载失败
  • 解决方案:使用科学上网工具后成功下载,或使用国内镜像源
  • 问题:运行命令时-e: command not found
  • 解决方案:使用单引号包围环境变量值

2. 网络问题

  • 问题:UnknownHostException: mysql8
  • 解决方案:最终采用直接使用容器IP(172.17.0.2)连接的方式
  • 问题:127.0.0.1无法访问
  • 解决方案:容器内127.0.0.1指向容器本身,使用容器IP或网络别名

3. 应用问题

  • 问题:JSP文件404错误
  • 解决方案:确保JSP文件正确打包到WEB-INF/jsp目录
  • 问题:数据库连接失败
  • 解决方案:使用容器实际IP(172.17.0.2)进行连接

九、最佳实践

1. 镜像管理

  • 使用官方基础镜像
  • 最小化镜像大小
  • 定期更新镜像
  • 准备科学上网环境以应对镜像拉取问题

2. 网络配置

  • 生产环境使用自定义网络
  • 开发环境可直接使用容器IP
  • 配置网络安全策略

3. 存储管理

  • 使用Docker卷持久化数据
  • 定期备份重要数据
  • 监控存储使用情况

4. 容器管理

  • 使用docker-compose管理多容器应用
  • 配置健康检查
  • 设置合理的重启策略

5. 部署流程

  • 自动化构建和部署
  • 环境变量分离
  • 版本控制和回滚机制

十、完整部署脚本

1. 一键部署脚本

#!/bin/bash
# 清理并打包项目
echo "=== 打包Spring Boot项目 ==="
mvn clean package -DskipTests
# 构建Docker镜像(注意:可能需要科学上网)
echo "=== 构建Docker镜像 ==="
docker build -t springboot-app .
# 运行MySQL容器
echo "=== 运行MySQL容器 ==="
docker run -d --name mysql8 -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root \
  -e MYSQL_DATABASE=wxdev \
  -v mysql-data:/var/lib/mysql \
  mysql:8.0
# 获取MySQL容器IP
echo "=== 获取MySQL容器IP ==="
MYSQL_IP=$(docker inspect --format '{{range.NetworkSettings.
Networks}}{{.IPAddress}}{{end}}' mysql8)
echo "MySQL容器IP: $MYSQL_IP"
# 运行Spring Boot容器(使用实际IP)
echo "=== 运行Spring Boot容器 ==="
docker run -d --name springboot-app -p 8080:8080 \
  -e 'SPRING_DATASOURCE_URL=jdbc:mysql://'$MYSQL_IP':3306/wxdev?
  useUincode=true&characterEncoding=utf-8' \
  -e SPRING_DATASOURCE_USERNAME=root \
  -e SPRING_DATASOURCE_PASSWORD=root \
  springboot-app
# 验证部署
echo "=== 验证部署 ==="
sleep 10
docker ps
curl http://localhost:8080/

2. docker-compose部署

# docker-compose.yml
version: '3.8'
services:
  springboot-app:
    build: .
    container_name: springboot-app
    ports:
      - "8080:8080"
    environment:
      - SPRING_DATASOURCE_URL=jdbc:mysql://mysql8:3306/wxdev?
      useUincode=true&characterEncoding=utf-8
      - SPRING_DATASOURCE_USERNAME=root
      - SPRING_DATASOURCE_PASSWORD=root
    depends_on:
      - mysql8
    networks:
      - app-network
    restart: unless-stopped
  mysql8:
    image: mysql:8.0
    container_name: mysql8
    ports:
      - "3306:3306"
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=wxdev
    volumes:
      - mysql-data:/var/lib/mysql
    networks:
      - app-network
    restart: unless-stopped
networks:
  app-network:
    driver: bridge
volumes:
  mysql-data:

# 启动服务

docker-compose up -d

# 查看状态

docker-compose ps

# 查看日志

docker-compose logs springboot-app

十一、总结

通过本指南,您已经掌握了:

  1. Spring Boot项目容器化:包括JSP配置、Maven打包和Docker镜像构建
  2. MySQL容器化:包括数据持久化和网络配置
  3. 容器网络通信:最终采用容器IP(172.17.0.2)直接连接的方式
  4. 镜像拉取问题:通过科学上网工具解决JDK8镜像下载失败问题
  5. 部署验证:包括容器状态检查和应用访问测试
  6. 问题排查:包括常见错误的解决方案
  7. 最佳实践:包括镜像管理、网络配置和容器管理

Docker容器化部署不仅提高了开发和部署效率,也为应用的可扩展性和可维护性奠定了基础。通过合理的配置和管理,您的Spring Boot应用将在容器环境中稳定运行。

到此这篇关于Docker容器化部署Spring Boot项目实战指南的文章就介绍到这了,更多相关docker容器化部署spring boot项目内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • centos 下docker 安装方法

    centos 下docker 安装方法

    这篇文章主要介绍了centos 下docker 安装方法,本文只介绍比较简易的安装方式,需要的朋友可以参考下
    2018-10-10
  • docker Dockerfile文件制作自己的镜像的方法

    docker Dockerfile文件制作自己的镜像的方法

    这篇文章主要介绍了docker Dockerfile文件制作自己的镜像的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-12-12
  • Docker使用Link在容器之间建立连接

    Docker使用Link在容器之间建立连接

    这篇文章主要介绍了Docker使用Link在容器之间建立连接的相关资料,需要的朋友可以参考下
    2016-10-10
  • Docker设置日志滚动的解决方案

    Docker设置日志滚动的解决方案

    Docker容器默认将日志写入同一文件,可能导致磁盘满,解决方案包括修改全局docker.service配置或针对特定容器修改hostconfig.json,下面给大家介绍Docker设置日志滚动的解决方案,感兴趣的朋友跟随小编一起看看吧
    2024-10-10
  • Docker端口冲突5步快速定位并解决容器端口占用难题

    Docker端口冲突5步快速定位并解决容器端口占用难题

    ocker容器端口冲突是部署中的常见问题,通常因指定主机端口被其他进程或容器占用导致,这篇文章主要介绍了Docker端口冲突5步快速定位并解决容器端口占用难题的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2026-04-04
  • 快速安装Docker详细步骤教程

    快速安装Docker详细步骤教程

    这篇文章主要为大家详细的介绍了快速安装Docker的详细步骤教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • 教你Docker安装GitLab功能

    教你Docker安装GitLab功能

    Gitlab是一个开源分布式版本控制系统,由Ruby开发,有管理项目源代码、版本控制、代码复用与查找等功能,这篇文章主要介绍了Docker安装GitLab,需要的朋友可以参考下
    2022-04-04
  • dockercompose应用及说明

    dockercompose应用及说明

    文章主要介绍了如何使用 Docker Compose 一键开启常用中间件,并提供了详细的安装步骤和测试方法,同时,还总结了一些常用的 Docker 命令
    2026-01-01
  • Docker Registry 实现原理、适用场景、常用操作及搭建过程

    Docker Registry 实现原理、适用场景、常用操作及搭建过程

    Docker Registry基于无状态架构,支持多存储后端与认证方式,用于私有镜像管理、性能优化及CI/CD集成,提供官方镜像、Harbor和高可用部署方案,需注意安全、存储规划与备份,本文给大家介绍Docker Registry 实现原理、适用场景、常用操作,感兴趣的朋友一起看看吧
    2025-09-09
  • docker centos7 安装ssh具体步骤

    docker centos7 安装ssh具体步骤

    这篇文章主要介绍了 docker centos7 安装ssh相关资料,这里提供了详细的具体安装步骤,需要的朋友可以参考下
    2016-11-11

最新评论