SpringBoot+Docker +Nginx 部署前後端項目

来源:https://www.cnblogs.com/blbl-blog/p/18438840
-Advertisement-
Play Games

部署SpringBoot項目(通關版) 一、概述 使用 java -jar 命令直接部署項目的JAR包和使用Docker製作鏡像進行部署是兩種常見的部署方式。以下是對這兩種方式的概述和簡要的優劣勢分析: 1.1、使用 java -jar 命令直接部署項目的JAR包 概述: 通過 java -jar ...


部署SpringBoot項目(通關版)

一、概述

使用 java -jar 命令直接部署項目的JAR包和使用Docker製作鏡像進行部署是兩種常見的部署方式。以下是對這兩種方式的概述和簡要的優劣勢分析:

1.1、使用 java -jar 命令直接部署項目的JAR包

概述:

  • 通過 java -jar 直接部署項目的JAR包是最簡單直接的部署方式之一。它直接利用了Java的特性,無需額外的容器技術支持。
  • 你可以在命令行中使用 java -jar 啟動一個JAR文件,從而運行你的Java應用。

優勢:

  • 簡單直接:直接使用JVM運行JAR包,無需依賴其他容器技術,部署簡單。
  • 適用範圍:適用於簡單的、單一的應用部署。

劣勢:

  • 彈性和隔離性差:直接運行在主機上,沒有資源隔離,可能會受到主機環境的影響。
  • 難以管理:難以控制不同版本的應用,無法靈活地管理多個實例。

1.2、使用Docker製作鏡像進行部署

概述:

  • 使用Docker可以將應用、運行環境、依賴項等打包到一個鏡像中,併在不同環境中進行一致的部署。
  • 通過Docker可以更加方便地管理應用的部署和運行,以及實現多實例部署和水平擴展。

優勢:

  • 靈活部署:容器化的應用更易於在不同的環境中部署和運行。
  • 資源隔離:使用容器可以實現資源的隔離和更好的應用安全性。
  • 一致性:Docker鏡像提供了可重覆、一致的運行環境,解決了“在我的機器上是好的”的問題。

劣勢:

  • 學習曲線:引入Docker增加了一定的學習和適應成本。
  • 運維複雜性:需要考慮容器的運行、監控、網路配置等方面的問題,增加了一定的運維複雜性。

綜上所述,兩種部署方式各有優勢和劣勢。使用 java -jar 直接部署簡單直接,適用於簡單的、單一的應用部署;而使用Docker製作鏡像進行部署更加靈活,容易實現一致性部署和資源隔離,但需要考慮學習曲線和運維複雜性。

二、使用 java -jar 運行jar 包

使用這個部署方式的優勢是:簡單,快捷

2.1、CentOS 7 下載安裝 Java JDK 17

2.1.1、操作步驟

  1. 利用 wget 下載 Java JDK 17 到 /usr/local/java 安裝目錄中,並解壓縮
## 進入安裝目錄
cd /usr/local/
## 新建Java安裝目錄,併進入此目錄
mkdir java
cd java/
## 下載JDK
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
## 將安裝包解壓縮到java目錄
tar -zxvf /root/jdk-17_linux-x64_bin.tar.gz
## 進入目錄
cd jdk-17.0.4.1/

2.配置環境變數

## 配置環境變數
vim /etc/profile

將下麵內容加到該文件的末端

## set java environment
JAVA_HOME=/usr/local/java/jdk-17.0.4.1
PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME PATH

3.重新載入該文件使其生效

## 重新載入profile
source /etc/profile

4.至此,Java JDK 17 安裝完成,驗證 Java 版本

## 查看Java版本
java -version

2.2、運行項目

這個啟動就比較簡單,找到上傳的jar 包,執行命令就行

java -jar yourfile.jar

三、使用docker 製作鏡像部署自己項目的jar 包

詳細步驟

3.1、安裝docke

3.1.1、安裝前準備工作

  • 查看伺服器系統版本以及內核版本
cat /etc/redhat-release

#查看伺服器內核版本
uname -r

這裡我們使用的是CentOS 7.4 系統,內核版本為3.10

  • 安裝依賴包
 yum install -y yum-utils device-mapper-persistent-data lvm2
  • 設置阿裡雲鏡像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.2、安裝Docker

3.2.1、 Docker版本說明

Docker從17.03版本之後分為兩個版本:社區版(Community Edition,縮寫為 CE)和企業版(Enterprise Edition,縮寫為 EE)。
企業版包含了一些收費服務,個人開發者一般用不到,所以我們只需要安裝社區版docker-ce版本即可。

3.2.2、 docker-ce安裝

yum install -y docker-ce

3.2.3、 動docker並設置開機自啟

#啟動docker命令
systemctl start docker
#設置開機自啟命令
systemctl enable docker
#查看docker版本命令
docker version

3.3、配置阿裡雲鏡像源

docker 鏡像源地址預設是國外的,網速慢,並且不配置的話還可以在拉取的時候會報錯

3.3.1,首先需要創建阿裡雲的賬號(免費註冊),阿裡雲官網地址: www.aliyun.com

3.3.2,搜索容器鏡像加速

3.3.3,找到自己的鏡像地址

3.3.4,在 Lunix 裡面配置鏡像

路徑:/etc/docker/daemon.json

如果沒有就直接新建一個文件

{
  "registry-mirrors": ["https://XXXX.mirror.aliyuncs.com"]
}

3.3.5,重啟保存

#重啟docker
sudo systemctl daemon-reload
sudo systemctl restart docker

3.3.6,查看結果

這裡就是你阿裡雲的鏡像加速地址

四、創建dockerFile

eip 這個可以改成自己項目的名稱,不過後面的命令都需一系列改動

# 使用 OpenJDK 17 作為基礎鏡像
FROM openjdk:17

# 作者
MAINTAINER admin

# 在容器中創建一個臨時文件夾
VOLUME /tmp

# 複製本地的jar文件到容器中,並將其重命名為eip.jar
COPY eip-0.0.1-SNAPSHOT.jar eip.jar

# 更新文件的修改時間
RUN bash -c 'touch /eip.jar'

# 定義容器啟動時運行的命令
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/eip.jar"]

五、構建鏡像

在當時目錄下根據dockerfile 構建一個eip 的鏡像

這裡的jar包和dockerfile、必須在同一目錄,我這裡放在 home目錄下,eip 是自己新建的文件夾

 # 構建鏡像
 docker build -t eip .
 
 # 查看命令,就會出現生成的鏡像
 docker images

結果:

六、配置docker網路

以便宿主機內在同一個網路下的各個容器能夠相互通信

# 構建網路名:eip_net
docker network create --driver bridge eip_net

#查找網路的名稱或者 ID
docker network ls

#刪除網路名(這個不需要執行,這裡只是提供)
docker network rm your_network

結果:

七、根據鏡像運行容器

# 其中 eipcontainer是容器名   eip_net是網路名       eip是鏡像名(剛剛上面生成的)

docker run -d --name eipcontainer --network eip_net -p 8069:8069 eip

# 檢查命令
docker ps

結果: 這裡我是二次生成,容器名稱改了 eipcontainer ==》eip eipcontainer (如下name)

到這裡就是成功的:手動利用dockerfile在docker 裡面把自己的jar 包打成鏡像,並運行容器

這個時候我們也可以訪問介面地址,但是前提得自己項目有集成文檔

例如:IP+埠/doc.html

綜合腳本

如果感覺上面的部署太麻煩,這裡提供一個啟動腳本,這樣每次修改後的代碼只需要重新上傳jar和重新執行腳本就是最新的代碼,而不需上面的複雜流程。

前提:文件必須在同一目錄下,並且已經上傳Dockerfile 和jar 包


1.

新建 start.sh 腳本

echo "eip startup"

echo "刪除容器和鏡像"
docker stop $1
docker rm $1
docker rmi $(docker images | awk '/^<none>/ { print $2 }')


echo "構建鏡像"
docker build -t eip .

echo "根據鏡像構建容器"
docker run -d --name eip --network eip_net -p 8069:8069 eip

echo "eip startup success"

一鍵執行腳本文件

# 執行命令 eip 表示腳本的$1   8069 表示腳本的$2  類似以參數的方式進行傳遞
sh start.sh eip 8069

這裡沒有去拉取倉庫的代碼,是因為快速部署,這裡也是可以優化的點。如果想要拉取代碼,一鍵打包,自動部署,可以參考下麵文章:

文章地址:

高端操作: 倉庫 + Jenkins + maven + docker + K8S 這樣的部署方式,這個算是另一個知識點

其他命令

# 刪除鏡像
docker rmi 鏡像ID
# 刪除容器
docker rm 容器ID

#查看鏡像
docker images
#查看運行容器
docker ps

#實時查看100行
docker logs -f your_container | tail -n 100
#實時查看
docker logs -f your_container

前端

安裝Nginx 可以自行百度

路徑:home/eipWeb/nginx

# 上傳dist 打包文件
npm run build:stage

一鍵啟動腳本:eipui.sh

#停止並刪除容器
docker stop eip_ui
echo "停止容器成功 !"

#
docker rm -f eip_ui
echo "刪除容器成功 !"

# 運行容器,並掛
docker run -d -p 7069:80 --name eip_ui -v /home/eipWeb/nginx/dist:/usr/share/nginx/html --restart=always registry.cn-hangzhou.aliyuncs.com/acs-sample/nginx

echo "運行啟動容器成功 !"

最後文章有啥不對,歡迎大佬在評論區指點!!!
如果感覺對你有幫助就點贊推薦或者關註一下吧!!!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 移動支付業務起源於銀行的電子支付業務。銀行的網上支付功能剛開始稱為電子銀行。網上支付涉及到很多的支付安全問題。移動支付是銀行支持手機移動支付功能。移動的銀行應用程式靈活程度更高,但是會增加伺服器追蹤客戶端應用程式和相關設備聯網互聯的複雜程度。現在的支付業務類型有銀行的支付應用程式APP和第三方支付平 ...
  • 今天我們來說說一個大家每天都在做但很少深入思考的操作——類型轉換。 本文索引 一行奇怪的代碼 go的類型轉換 數值類型之間互相轉換 unsafe相關的轉換 字元串到byte和rune切片的轉換 slice轉換成數組 底層類型相同時的轉換 別的語言里是個啥情況 總結 一行奇怪的代碼 事情始於年初時我對 ...
  • Java中的中間件配置體現在springboot的yml配置文件中。Springboot框架支持微服務和中間件和restful api遠程服務的調用。中間件是Java web系統的中間層的服務系統的調用介面。Springboot的自動裝配和約定大於配置機制初始化springcontext的容器空間和 ...
  • 前言 我們在使用IDEA開發時,經常是和Git一起使用的,這樣能方便的管理我們的代碼。 git的一個特點就是可以有很多分支,這些分支能讓我們區分不同的功能等,非常方便。 有時候,我們需要查看下某個文件中,當前分支與某個分支的差異,應該如何操作呢? 如何查看不同分支的git差異 首先,我們找到我們要對 ...
  • 機緣 電腦信息技術的需要持續學習的興趣和熱情。大學學習電腦編程開發即使是短暫,不會太漫長。大學一年級對於信息科學技術的興趣只增不減。一個剛步入大學校園的高中畢業生,對於將來發生的任何事情都是十分憧憬和好奇。大學的圖書館和自習室經常都會有不同系學生的光顧。高中趕鴨子上架,大學很輕鬆,人很多。 南方 ...
  • 人工智慧artificial intelligence 是電腦互聯網信息技術多年積累和不同互聯網公司共同構造的產物。人工智慧和大數據領域聯繫很大。每個軟體公司都有公司的業務數據和目標客戶。中央倉庫和私有倉庫保存著公有數據和私有數據。Java應用開發中的Maven是對實體本地jar包的一種互聯網分佈 ...
  • 正文 忽然想起,昨天有一個財政局的工作人員,過來轉款。那時候已經快下班了。我們給他辦完之後,他說他沒想到這麼快。看來還得回去,明明都打算不回去了來著。 我有些疑惑。照理來說,財政局應該挺好玩。我這麼問他。他苦笑了一下,說要是好玩就回去上班了,天天都不想去單位。然後開始感慨我們的銀行工作好。 我實在沒 ...
  • 大家好,我是風箏 個人博客:【古時的風箏】。 本文目的為個人學習記錄及知識分享。如果有什麼不正確、不嚴謹的地方請及時指正,不勝感激。 每一個贊都是我前進的動力。 公眾號:「古時的風箏」 前幾天順手改的一個安卓啟動器,開源沒幾天,沒想到GitHub上已經獲得了40多顆星,要知道我前段時間花 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...