Docker部署SpringBoot項(xiàng)目教程(完整版)
背景
在微服務(wù)架構(gòu)的背景下,Spring Boot 已經(jīng)成為了許多項(xiàng)目的首選開(kāi)發(fā)框架。隨著容器化技術(shù)的興起,Docker 為應(yīng)用的部署、管理提供了強(qiáng)大且靈活的方式。
本文將演示如何將一個(gè)本地開(kāi)發(fā)的 Spring Boot 項(xiàng)目,通過(guò) Docker 容器部署到 Linux 服務(wù)器上,并將日志文件掛載到宿主機(jī)上,以便于后期的日志管理和排查問(wèn)題。
目標(biāo)
- 使用 Docker 部署
Spring Boot項(xiàng)目。 - 將 日志文件掛載到宿主機(jī),以便后期查看和管理。
- 通過(guò) 本地 IntelliJ IDEA 構(gòu)建項(xiàng)目,然后上傳到服務(wù)器。
1. 準(zhǔn)備工作
安裝FinalShell(遠(yuǎn)程服務(wù)器連接工具)

安裝 Docker
確保你的服務(wù)器上已經(jīng)安裝 Docker。你可以通過(guò)以下命令來(lái)檢查 Docker 是否安裝:
docker --version

如果沒(méi)有安裝 Docker,可以參考官方文檔進(jìn)行安裝
配置日志存儲(chǔ)路徑
在部署 Spring Boot 項(xiàng)目時(shí),我們需要指定日志文件的存儲(chǔ)路徑。為了讓容器中的日志能夠被宿主機(jī)訪問(wèn)并持久化,我們將 日志文件掛載到宿主機(jī)。
假設(shè)我們?cè)谒拗鳈C(jī)上創(chuàng)建一個(gè)日志文件存儲(chǔ)目錄 /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 配置文件中,確保日志文件輸出路徑指向容器內(nèi)的 /app/logs 路徑,并且在啟動(dòng)時(shí)將該目錄掛載到宿主機(jī):
<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>
<!-- 配置滾動(dòng)策略 -->
</appender>確保日志文件的路徑使用相對(duì)路徑(如 log/logs),Docker 會(huì)將此目錄掛載到宿主機(jī)指定的目錄。
2. 使用 IntelliJ IDEA 構(gòu)建 Spring Boot 項(xiàng)目
首先,我們需要將 Spring Boot 項(xiàng)目打包為一個(gè)可執(zhí)行的 JAR 文件。
打包 Spring Boot 項(xiàng)目
在 IntelliJ IDEA 中,你可以通過(guò)以下步驟來(lái)構(gòu)建項(xiàng)目:
打開(kāi)項(xiàng)目,在Maven菜單欄中雙擊package進(jìn)行打包。

出現(xiàn)BUILD SUCCESS打包成功

生成的 JAR 文件
構(gòu)建完成后,你的 JAR 文件將在 target/ 目錄中,假設(shè)文件名為 learn-server.jar。

3. 創(chuàng)建 Dockerfile
為了將 Spring Boot 項(xiàng)目打包到 Docker 容器中,我們需要編寫(xiě)一個(gè) Dockerfile。Dockerfile 是一個(gè)簡(jiǎn)單的腳本,它包含了構(gòu)建 Docker 鏡像所需的所有命令。
創(chuàng)建一個(gè)名為 Dockerfile 的文件:
# 選擇基礎(chǔ)鏡像 FROM openjdk:11-jre-slim # 設(shè)置工作目錄 WORKDIR /app # 復(fù)制構(gòu)建后的 JAR 文件到容器中 COPY learn-server.jar app.jar # 暴露應(yīng)用程序端口 EXPOSE 10010 # 設(shè)置容器啟動(dòng)時(shí)執(zhí)行的命令,啟動(dòng) Spring Boot 應(yīng)用并傳遞參數(shù) ENTRYPOINT ["java", "-jar", "app.jar", "--server.port=10010", "--spring.profiles.active=prod"]
4.(關(guān)鍵的一步)將文件上傳到服務(wù)器
將learn-server.jar和Dockerfile文件上傳到服務(wù)器上,使用FinalShell時(shí)直接從本地磁盤(pán)將這兩個(gè)文件拖拽到/usr/app2目錄,F(xiàn)inalShell`會(huì)自動(dòng)上傳。

5. 構(gòu)建 Docker 鏡像
使用下面的命令在項(xiàng)目目錄下構(gòu)建 Docker 鏡像:
docker build -t springboot-app .
注意:要在你上傳jar包的同級(jí)目錄下執(zhí)行

該命令將會(huì)根據(jù) Dockerfile 構(gòu)建出一個(gè)名為 springboot-app 的 Docker 鏡像。
構(gòu)建成功如圖所示:

6. 運(yùn)行 Docker 容器
使用以下命令啟動(dòng)容器,并將日志文件掛載到宿主機(jī)的 /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端口映射到宿主機(jī)的10010端口。--name learn-server-app:給容器指定一個(gè)名稱。-v /usr/app2/learn-server-app-logs:/app/log/logs:將宿主機(jī)上的/usr/app2/learn-server-app-logs目錄掛載到容器中的/app/log/logs目錄。

使用docker logs learn-server-app查看啟動(dòng)日志
啟動(dòng)成功

7. 驗(yàn)證部署訪問(wèn) Spring Boot 應(yīng)用
在瀏覽器中訪問(wèn) http://<服務(wù)器IP>:10010,你應(yīng)該能夠看到 Spring Boot 應(yīng)用正常啟動(dòng)。

查看日志
所有生成的日志文件將被保存在宿主機(jī)上的 /usr/app2/learn-server-app-logs 目錄中,方便后期查看和管理。
tail -200f /usr/app2/learn-server-app-logs/pro-server-info.log

結(jié)論
通過(guò) Docker 部署 Spring Boot 項(xiàng)目并將日志掛載到宿主機(jī)是一個(gè)非常實(shí)用的方案,尤其是在生產(chǎn)環(huán)境中。它不僅簡(jiǎn)化了部署過(guò)程,還可以更好地管理應(yīng)用的日志。通過(guò)將日志文件存儲(chǔ)在宿主機(jī)上,我們可以方便地查看和管理日志,避免了容器重啟后丟失日志的風(fēng)險(xiǎn)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- 使用Shell腳本實(shí)現(xiàn)SpringBoot項(xiàng)目自動(dòng)化部署到Docker的操作指南
- Springboot開(kāi)發(fā)之利用Docker和Kubernetes部署微服務(wù)
- docker部署springBoot項(xiàng)目實(shí)操(docker是什么)
- springboot項(xiàng)目中使用docker進(jìn)行遠(yuǎn)程部署的實(shí)現(xiàn)
- PostgreSQL Docker部署+SpringBoot集成方式
- Docker一鍵部署SpringBoot項(xiàng)目的多種方式
- 基于SpringBoot項(xiàng)目實(shí)現(xiàn)Docker容器化部署的主要步驟
相關(guān)文章
SpringMVC學(xué)習(xí)之JSON和全局異常處理詳解
在項(xiàng)目上線之后,往往會(huì)出現(xiàn)一些不可預(yù)料的異常信息,對(duì)于邏輯性或設(shè)計(jì)性問(wèn)題,開(kāi)發(fā)人員或者維護(hù)人員需要通過(guò)日志,查看異常信息并排除異常,這篇文章主要給大家介紹了關(guān)于SpringMVC學(xué)習(xí)之JSON和全局異常處理的相關(guān)資料,需要的朋友可以參考下2022-10-10
Java之關(guān)于基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的存放位置
這篇文章主要介紹了Java之關(guān)于基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的存放位置,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07
java泛型的局限探究及知識(shí)點(diǎn)總結(jié)
在本篇內(nèi)容里小編給大家分享的是一篇關(guān)于java泛型的局限探究及知識(shí)點(diǎn)總結(jié)內(nèi)容,有需要的朋友們可以跟著學(xué)習(xí)參考下。2021-07-07
詳解如何在低版本的Spring中快速實(shí)現(xiàn)類似自動(dòng)配置的功能
java使用GeoTools讀取shp文件并畫(huà)圖的操作代碼
三分鐘教你如何在IDEA中快速創(chuàng)建工程的方法

