java版
#!/bin/bashAPP_NAME="springboot-demo-0.0.1-SNAPSHOT"
JAR_PATH="/home/package/target/${APP_NAME}.jar"
LOG_PATH="/home/package/logs/app.log"# 查找并停止舊進程
PID=$(ps aux | grep "$APP_NAME.jar" | grep -v grep | awk '{print $2}')if [ -n "$PID" ]; thenecho "Stopping existing process with PID: $PID"kill -9 $PID || { echo "Failed to kill PID: $PID"; exit 1; }echo "Process stopped."sleep 3 # 等待端口釋放
elseecho "No running Java process found for $APP_NAME"
fi# 確保 LOG_PATH 所在目錄存在
mkdir -p /home/package/logs# 啟動新的服務
nohup java -jar "$JAR_PATH" > "$LOG_PATH" 2>&1 &
docker 版
|--home
| |
| --- package
| |
| --- docker
| |
| --- target# 注意:docker-compose 命令要事先安裝
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composedocker-compose --version# 保證系統可執行
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose# 重啟系統
sudo reboot
本地項目目錄結構 :
Dockerfile文件
# 這里有坑需要自己填,因為dockerhup 已經不提供服務了,所以我是從阿里云定義倉庫下載的 視頻教程:https://www.bilibili.com/video/BV1Zn4y19743/# 使用 Java 8 的鏡像作為基礎
FROM crpi-e68w7himn5fxckd3.cn-shenzhen.personal.cr.aliyuncs.com/ldj-01/openjdk:8-jdk# 把 jar 包復制到容器里的 /usr/local/apps 目錄下
COPY springboot-demo.jar /usr/local/apps/# 設置工作目錄,后面的操作都在這個目錄進行
WORKDIR /usr/local/apps# 容器啟動時運行這個命令:執行 Spring Boot 的 jar 包
ENTRYPOINT ["java", "-jar", "/usr/local/apps/springboot-demo.jar"]
docker-compose 文件
注意!!! 這里的路徑一定要根據自己實際上傳到目標服務器的文件路徑來設置
為了避免路徑
services:springboot-demo: # 定義服務名稱build:context: ./ # 構建上下文目錄 (即包含此 docker-compose.yml 文件的目錄)dockerfile: Dockerfile # 使用的 Dockerfile 文件名image: springboot-demo:v1.0.O # 構建后生成的鏡像名和標簽container_name: springboot-demo # 容器名稱ports:- "8088:8080" # 端口映射,將主機的8088端口映射到容器的8080端口
腳本:
# 進入Dockerfile所在目錄dcoker/ 目的是在這個目錄執行docker-compose命令成功
cd /home/package/docker# 將jar包挪到docker目錄下
mv ../target/*.jar ./# 停止舊容器
docker-compose down# 啟動新容器
docker-compose up -d --build# 刪除懸空的鏡像
docker image prune -f
效果: