docker更新jar包,懒人执行脚本
以下是一个用于启动 Docker 容器的脚本,适用于快速部署通过挂载方式运行的 JAR 应用,包含启动、停止、重启和查看状态等功能:
#!/bin/bash
# 完整重建Docker容器和镜像的脚本
# 流程:停止容器 → 删除镜像 → 删除容器 → 构建镜像 → 启动容器# 配置参数
CONTAINER_NAME="back-service" # 容器名称
IMAGE_NAME="back-service" # 镜像名称
IMAGE_TAG="latest" # 镜像标签
DOCKERFILE_PATH="./" # Dockerfile所在目录(当前目录为.)
# 容器端口
HOST_PORT=8881 # 宿主机端口
CONTAINER_PORT=8881 # 容器端口# 函数:停止容器
stop_container() {if [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; thenecho "正在停止容器 $CONTAINER_NAME..."docker stop $CONTAINER_NAMEif [ $? -eq 0 ]; thenecho "容器 $CONTAINER_NAME 已停止"elseecho "停止容器 $CONTAINER_NAME 失败"exit 1fielseecho "容器 $CONTAINER_NAME 未在运行"fi
}# 函数:删除容器
remove_container() {if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; thenecho "正在删除容器 $CONTAINER_NAME..."docker rm $CONTAINER_NAMEif [ $? -eq 0 ]; thenecho "容器 $CONTAINER_NAME 已删除"elseecho "删除容器 $CONTAINER_NAME 失败"exit 1fielseecho "容器 $CONTAINER_NAME 不存在"fi
}# 函数:删除镜像
remove_image() {if [ "$(docker images -q $IMAGE_NAME:$IMAGE_TAG)" ]; thenecho "正在删除镜像 $IMAGE_NAME:$IMAGE_TAG..."docker rmi $IMAGE_NAME:$IMAGE_TAGif [ $? -eq 0 ]; thenecho "镜像 $IMAGE_NAME:$IMAGE_TAG 已删除"elseecho "删除镜像 $IMAGE_NAME:$IMAGE_TAG 失败(可能被其他容器引用)"exit 1fielseecho "镜像 $IMAGE_NAME:$IMAGE_TAG 不存在"fi
}# 函数:构建镜像
build_image() {echo "正在构建镜像 $IMAGE_NAME:$IMAGE_TAG..."docker build -t $IMAGE_NAME:$IMAGE_TAG $DOCKERFILE_PATHif [ $? -eq 0 ]; thenecho "镜像 $IMAGE_NAME:$IMAGE_TAG 构建成功"elseecho "镜像 $IMAGE_NAME:$IMAGE_TAG 构建失败"exit 1fi
}# 函数:启动容器
start_container() {echo "正在启动容器 $CONTAINER_NAME..."docker run -d \--name $CONTAINER_NAME \-p $HOST_PORT:$CONTAINER_PORT \$IMAGE_NAME:$IMAGE_TAGif [ $? -eq 0 ] && [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; thenecho "容器 $CONTAINER_NAME 启动成功"echo "访问地址: http://localhost:$HOST_PORT"elseecho "容器 $CONTAINER_NAME 启动失败"exit 1fi
}# 主流程执行
echo "===== 开始执行容器重建流程 ====="
stop_container
remove_container # 先删除容器再删除镜像,避免镜像被占用
remove_image
build_image
start_container
echo "===== 容器重建流程执行完毕 ====="