Docker部署SpringBoot项目教程(完整版)

 更新时间:2025年06月20日 09:04:39   作者:hoho不爱喝酒  
这篇文章主要介绍了Docker部署SpringBoot项目教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

背景

在微服务架构的背景下,Spring Boot 已经成为了许多项目的首选开发框架。随着容器化技术的兴起,Docker 为应用的部署、管理提供了强大且灵活的方式。

本文将演示如何将一个本地开发的 Spring Boot 项目,通过 Docker 容器部署到 Linux 服务器上,并将日志文件挂载到宿主机上,以便于后期的日志管理和排查问题。

目标

  • 使用 Docker 部署 Spring Boot 项目。
  • 日志文件挂载到宿主机,以便后期查看和管理。
  • 通过 本地 IntelliJ IDEA 构建项目,然后上传到服务器。

1. 准备工作

安装FinalShell(远程服务器连接工具)

安装 Docker

确保你的服务器上已经安装 Docker。你可以通过以下命令来检查 Docker 是否安装:

docker --version

如果没有安装 Docker,可以参考官方文档进行安装

配置日志存储路径

在部署 Spring Boot 项目时,我们需要指定日志文件的存储路径。为了让容器中的日志能够被宿主机访问并持久化,我们将 日志文件挂载到宿主机

假设我们在宿主机上创建一个日志文件存储目录 /usr/app2/learn-server-app-logs

mkdir -p /usr/app2/learn-server-app-logs
chmod -R 755 /usr/app2/learn-server-app-logs

配置 Spring Boot 日志

在你的 logback-spring.xml 配置文件中,确保日志文件输出路径指向容器内的 /app/logs 路径,并且在启动时将该目录挂载到宿主机:

<property name="LOG_HOME" value="log/logs" />
<appender name="FILE_LOG" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <File>${LOG_HOME}/springboot-app.log</File>
    <!-- 配置滚动策略 -->
</appender>

确保日志文件的路径使用相对路径(如 log/logs),Docker 会将此目录挂载到宿主机指定的目录。

2. 使用 IntelliJ IDEA 构建 Spring Boot 项目

首先,我们需要将 Spring Boot 项目打包为一个可执行的 JAR 文件。

打包 Spring Boot 项目

IntelliJ IDEA 中,你可以通过以下步骤来构建项目:

打开项目,在Maven菜单栏中双击package进行打包。

出现BUILD SUCCESS打包成功

生成的 JAR 文件

构建完成后,你的 JAR 文件将在 target/ 目录中,假设文件名为 learn-server.jar

3. 创建 Dockerfile

为了将 Spring Boot 项目打包到 Docker 容器中,我们需要编写一个 DockerfileDockerfile 是一个简单的脚本,它包含了构建 Docker 镜像所需的所有命令。

创建一个名为 Dockerfile 的文件:

# 选择基础镜像
FROM openjdk:11-jre-slim
# 设置工作目录
WORKDIR /app
# 复制构建后的 JAR 文件到容器中
COPY learn-server.jar app.jar
# 暴露应用程序端口
EXPOSE 10010
# 设置容器启动时执行的命令,启动 Spring Boot 应用并传递参数
ENTRYPOINT ["java", "-jar", "app.jar", "--server.port=10010", "--spring.profiles.active=prod"]

4.(关键的一步)将文件上传到服务器

learn-server.jarDockerfile文件上传到服务器上,使用FinalShell时直接从本地磁盘将这两个文件拖拽到/usr/app2目录,FinalShell`会自动上传。

5. 构建 Docker 镜像

使用下面的命令在项目目录下构建 Docker 镜像:

docker build -t springboot-app .

注意:要在你上传jar包的同级目录下执行

该命令将会根据 Dockerfile 构建出一个名为 springboot-app 的 Docker 镜像。

构建成功如图所示:

6. 运行 Docker 容器

使用以下命令启动容器,并将日志文件挂载到宿主机的 /usr/app2/learn-server-app-logs 目录:

docker run -d -p 10010:10010 --name learn-server-app -v /usr/app2/learn-server-app-logs:/app/log/logs springboot-app
  • -p 10010:10010:将容器的 10010 端口映射到宿主机的 10010 端口。
  • --name learn-server-app:给容器指定一个名称。
  • -v /usr/app2/learn-server-app-logs:/app/log/logs:将宿主机上的 /usr/app2/learn-server-app-logs 目录挂载到容器中的 /app/log/logs 目录。

使用docker logs learn-server-app查看启动日志

启动成功

7. 验证部署访问 Spring Boot 应用

在浏览器中访问 http://<服务器IP>:10010,你应该能够看到 Spring Boot 应用正常启动。

查看日志

所有生成的日志文件将被保存在宿主机上的 /usr/app2/learn-server-app-logs 目录中,方便后期查看和管理。

tail -200f /usr/app2/learn-server-app-logs/pro-server-info.log

结论

通过 Docker 部署 Spring Boot 项目并将日志挂载到宿主机是一个非常实用的方案,尤其是在生产环境中。它不仅简化了部署过程,还可以更好地管理应用的日志。通过将日志文件存储在宿主机上,我们可以方便地查看和管理日志,避免了容器重启后丢失日志的风险。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringMVC学习之JSON和全局异常处理详解

    SpringMVC学习之JSON和全局异常处理详解

    在项目上线之后,往往会出现一些不可预料的异常信息,对于逻辑性或设计性问题,开发人员或者维护人员需要通过日志,查看异常信息并排除异常,这篇文章主要给大家介绍了关于SpringMVC学习之JSON和全局异常处理的相关资料,需要的朋友可以参考下
    2022-10-10
  • Java之关于基本数据类型和引用数据类型的存放位置

    Java之关于基本数据类型和引用数据类型的存放位置

    这篇文章主要介绍了Java之关于基本数据类型和引用数据类型的存放位置,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • java泛型的局限探究及知识点总结

    java泛型的局限探究及知识点总结

    在本篇内容里小编给大家分享的是一篇关于java泛型的局限探究及知识点总结内容,有需要的朋友们可以跟着学习参考下。
    2021-07-07
  • IDEA 阿里JAVA规范插件的具体使用

    IDEA 阿里JAVA规范插件的具体使用

    这篇文章主要介绍了IDEA 阿里JAVA规范插件的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Springboot项目Aop与拦截器与过滤器横向对比

    Springboot项目Aop与拦截器与过滤器横向对比

    前三篇文章已经介绍过Springboot项目如何实现Aop,拦截器和过滤齐功能,这篇文章主要介绍三者的横向对比,本文有一定的参考价值,感兴趣的小伙伴可以参考阅读
    2023-03-03
  • 详解如何在低版本的Spring中快速实现类似自动配置的功能

    详解如何在低版本的Spring中快速实现类似自动配置的功能

    这篇文章主要介绍了详解如何在低版本的Spring中快速实现类似自动配置的功能,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • 浅谈java中定义泛型类和定义泛型方法的写法

    浅谈java中定义泛型类和定义泛型方法的写法

    下面小编就为大家带来一篇浅谈java中定义泛型类和定义泛型方法的写法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • java使用GeoTools读取shp文件并画图的操作代码

    java使用GeoTools读取shp文件并画图的操作代码

    GeoTools是ArcGis地图与java对象的桥梁,今天通过本文给大家分享java使用GeoTools读取shp文件并画图,文章通过实例代码给大家介绍的非常详细,需要的朋友参考下吧
    2021-07-07
  • Java如何在List或Map遍历过程中删除元素

    Java如何在List或Map遍历过程中删除元素

    相信大家在日常的开发过程中,经常需要对List或Map里面的符合某种业务的数据进行删除,但是如果不了解里面的机制就容易掉入“陷阱”导致遗漏或者程序异常。下面这篇文章将会给大家详细介绍Java如何在List和Map遍历过程中删除元素,有需要的朋友们可以参考借鉴。
    2016-12-12
  • 三分钟教你如何在IDEA中快速创建工程的方法

    三分钟教你如何在IDEA中快速创建工程的方法

    这篇文章主要介绍了三分钟教你如何在IDEA中快速创建工程的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04

最新评论