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 "===== 容器重建流程执行完毕 ====="
相关推荐
桌面运维家4 小时前
旧电脑跑不动课程软件,VDI云桌面怎样接着用?
运维·服务器·虚拟化·pve·vdi·云桌面
zhang133830890754 小时前
传统机械三杯式风速传感器易磨损冻堵?CG-88金属超声波风速风向传感器给出免运维方案
运维·服务器·网络·人工智能·自动化
知已难寻5 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
2601_949847757 小时前
bcrypt.js 跨端三方库仓颉适配全流程
linux·运维·ubuntu
m0_639906947 小时前
Linux 操作系统入门:目录结构、服务排查常用命令、Shell 脚本基础
linux·运维·后端
今天重构了吗7 小时前
Linux 上 rm -rf 删错了能找回吗
运维·服务器
KaiwuDB8 小时前
KaiwuDB 分布式集群扩缩容,从原理到完整操作踩坑总结
运维·数据库·分布式
codezzzsleep8 小时前
学术汇报 PPT 自动化生成实战指南
运维·自动化·powerpoint
古法老登瞎折腾8 小时前
大数据智能运维实战(九):让 AI 查日志——找到异常,也保留上下文
java·大数据·运维·人工智能·spring ai·mcp
讯捷蓝达9 小时前
IBM V3500存储 双控故障、数据怎么恢复?
运维