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
容器中,我们需要编写一个 Dockerfile。Dockerfile
是一个简单的脚本,它包含了构建 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.jar
和Dockerfile
文件上传到服务器上,使用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
查看启动日志 -
启动成功
-
6. 验证部署
访问 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
项目并将日志挂载到宿主机是一个非常实用的方案,尤其是在生产环境中。它不仅简化了部署过程,还可以更好地管理应用的日志。通过将日志文件存储在宿主机上,我们可以方便地查看和管理日志,避免了容器重启后丢失日志的风险。