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
效果: