docker更新jar包,懒人执行脚本

以下是一个用于启动 Docker 容器的脚本,适用于快速部署通过挂载方式运行的 JAR 应用,包含启动、停止、重启和查看状态等功能:

bash 复制代码
#!/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)" ]; then
        echo "正在停止容器 $CONTAINER_NAME..."
        docker stop $CONTAINER_NAME
        if [ $? -eq 0 ]; then
            echo "容器 $CONTAINER_NAME 已停止"
        else
            echo "停止容器 $CONTAINER_NAME 失败"
            exit 1
        fi
    else
        echo "容器 $CONTAINER_NAME 未在运行"
    fi
}

# 函数:删除容器
remove_container() {
    if [ "$(docker ps -aq -f name=$CONTAINER_NAME)" ]; then
        echo "正在删除容器 $CONTAINER_NAME..."
        docker rm $CONTAINER_NAME
        if [ $? -eq 0 ]; then
            echo "容器 $CONTAINER_NAME 已删除"
        else
            echo "删除容器 $CONTAINER_NAME 失败"
            exit 1
        fi
    else
        echo "容器 $CONTAINER_NAME 不存在"
    fi
}

# 函数:删除镜像
remove_image() {
    if [ "$(docker images -q $IMAGE_NAME:$IMAGE_TAG)" ]; then
        echo "正在删除镜像 $IMAGE_NAME:$IMAGE_TAG..."
        docker rmi $IMAGE_NAME:$IMAGE_TAG
        if [ $? -eq 0 ]; then
            echo "镜像 $IMAGE_NAME:$IMAGE_TAG 已删除"
        else
            echo "删除镜像 $IMAGE_NAME:$IMAGE_TAG 失败(可能被其他容器引用)"
            exit 1
        fi
    else
        echo "镜像 $IMAGE_NAME:$IMAGE_TAG 不存在"
    fi
}

# 函数:构建镜像
build_image() {
    echo "正在构建镜像 $IMAGE_NAME:$IMAGE_TAG..."
    docker build -t $IMAGE_NAME:$IMAGE_TAG $DOCKERFILE_PATH
    if [ $? -eq 0 ]; then
        echo "镜像 $IMAGE_NAME:$IMAGE_TAG 构建成功"
    else
        echo "镜像 $IMAGE_NAME:$IMAGE_TAG 构建失败"
        exit 1
    fi
}

# 函数:启动容器
start_container() {
    echo "正在启动容器 $CONTAINER_NAME..."
    docker run -d \
        --name $CONTAINER_NAME \
        -p $HOST_PORT:$CONTAINER_PORT \
        $IMAGE_NAME:$IMAGE_TAG
    if [ $? -eq 0 ] && [ "$(docker ps -q -f name=$CONTAINER_NAME)" ]; then
        echo "容器 $CONTAINER_NAME 启动成功"
        echo "访问地址: http://localhost:$HOST_PORT"
    else
        echo "容器 $CONTAINER_NAME 启动失败"
        exit 1
    fi
}




# 主流程执行
echo "===== 开始执行容器重建流程 ====="
stop_container
remove_container  # 先删除容器再删除镜像,避免镜像被占用
remove_image
build_image
start_container
echo "===== 容器重建流程执行完毕 ====="
相关推荐
人工智能训练42 分钟前
【极速部署】Ubuntu24.04+CUDA13.0 玩转 VLLM 0.15.0:预编译 Wheel 包 GPU 版安装全攻略
运维·前端·人工智能·python·ai编程·cuda·vllm
微露清风2 小时前
系统性学习Linux-第二讲-基础开发工具
linux·运维·学习
阳光九叶草LXGZXJ3 小时前
达梦数据库-学习-48-DmDrs控制台命令(同步之Manager、CPT模块)
linux·运维·数据库·sql·学习
小二李4 小时前
第11章 nestjs服务端开发:登录鉴权
运维·服务器
i建模5 小时前
如何在Arch Linux中重设忘记的root密码
linux·运维·服务器
chatexcel6 小时前
元空AI+Clawdbot:7×24 AI办公智能体新形态详解(长期上下文/自动化任务/工具粘合)
运维·人工智能·自动化
kida_yuan6 小时前
【Linux】运维实战笔记 — 我常用的方法与命令
linux·运维·笔记
小陈phd7 小时前
混合知识库搭建:本地Docker部署Neo4j图数据库与Milvus向量库
数据库·docker·neo4j
Wpa.wk8 小时前
容器编排 - 了解K8s(pod, deployment,service,lable等概念)
经验分享·测试工具·docker·云原生·容器·kubernetes
何中应8 小时前
vmware的linux虚拟机如何设置以命令行方式启动
linux·运维·服务器