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 "===== 容器重建流程执行完毕 ====="
相关推荐
AlfredZhao2 小时前
Docker 查看容器日志:别只记 `docker logs -f`
docker
Crazy________4 小时前
k8s部署若依微服务架构流程,v3.6.6
运维·云原生·容器·kubernetes·状态模式
云飞云共享云桌面5 小时前
广东精密机械设备工厂8-10人共享一台SolidWorks设计服务器
运维·服务器·3d·自动化·汽车·制造
jieyucx5 小时前
【高级利用】条件竞争与逻辑漏洞:与服务器赛跑的艺术
android·运维·服务器·web安全·文件上传
tianyuanwo5 小时前
服务器OS组件研发效能度量可视系统——顶层方案设计与阶段性规划
运维·服务器·度量系统
初级炼丹师(爱说实话版)5 小时前
Ubuntu服务器配置docker
服务器·ubuntu·docker
黄华SJ520it6 小时前
二二复制定点裂变双轨商城系统开发:原理、架构与实战指南
运维·小程序·架构·系统开发
生活爱好者!6 小时前
NAS还能用来开视频会议?docker一键部署MiroTalk SFU
运维·docker·容器
xiaoxiangsiyan6 小时前
GitLab CI/CD 自托管(EE 企业版)+ Kubernetes Runner 集群 + ArgoCD(GitOps 部署)
运维·网络·ci/cd·容器·kubernetes·gitlab·argocd
PC2005-cloud6 小时前
KubeSphere 安装到插件管理实战:本地 K8s 搭建可视化容器平台
云原生·容器·kubernetes