部署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、操作步驟
- 利用 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 "運行啟動容器成功 !"
最後文章有啥不對,歡迎大佬在評論區指點!!!
如果感覺對你有幫助就點贊推薦或者關註一下吧!!!