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 "===== 容器重建流程执行完毕 ====="
相关推荐
invicinble5 小时前
对linux形成认识
linux·运维·服务器
小Pawn爷5 小时前
14.VMmare安装ubuntu
linux·运维·ubuntu
技术路上的探险家5 小时前
8 卡 V100 服务器:基于 vLLM 的 Qwen 大模型高效部署实战
运维·服务器·语言模型
有谁看见我的剑了?5 小时前
介绍一款 测试 DNS解析成功率的网站
运维
半桔5 小时前
【IO多路转接】高并发服务器实战:Reactor 框架与 Epoll 机制的封装与设计逻辑
linux·运维·服务器·c++·io
engchina6 小时前
WSL Ubuntu で Kubernetes v1.34.2 + Docker 環境を構築する
ubuntu·docker·kubernetes
HABuo6 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
Howrun7776 小时前
关于Linux服务器的协作问题
linux·运维·服务器
yunfuuwqi8 小时前
OpenClaw✅真·喂饭级教程:2026年OpenClaw(原Moltbot)一键部署+接入飞书最佳实践
运维·服务器·网络·人工智能·飞书·京东云
迎仔8 小时前
C-算力中心网络隔离实施方法:怎么搞?
运维·网络