docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > docker容器化部署spring boot项目

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

作者:盐城吊霸天

本文给大家介绍Docker容器化部署Spring Boot项目实战指南,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧

一、项目背景与技术栈

1. 项目概述

2. 部署目标

二、Docker基础配置

1. 环境准备

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. 数据持久化

3. 网络配置

五、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. 网络模式选择

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. 构建问题

2. 网络问题

3. 应用问题

九、最佳实践

1. 镜像管理

2. 网络配置

3. 存储管理

4. 容器管理

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项目内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文