zoukankan      html  css  js  c++  java
  • 从Harbor仓库拉起镜像,创建容器并更新shell脚本

    注意:
    此shell脚本仅供基本使用,还有好多待完善的地方

    大致流程

    1. 使用Jenkins从Gogs拉取仓库代码,根据选择的参数和输入的标签,确定要编译打包jar的模块,以及要制作的docker镜像信息等
    2. 编译打包成jar包,然后根据代码目录里的Dockfile文件制作docker镜像
    3. 把docker镜像上传到Harbor镜像仓库
      4.最后远程连接容器主机,执行shell脚本,该脚本主要作用是登陆Harbor仓库,拉取第二步制作好的docker镜像,停用正在运行的相关容器,然后启动新容器

    关键点:

    1. shell脚本中第一次运行容器的命令
    2. 停止正在运行的容器所使用的标签,shell减法计算
    3. Jenkins所在主机运行远程主机的shell脚本,除了配置jenkins所在主机的jenkins用户免密登陆远程主机外,还要给远程主机的shell脚本增加可执行权限

    问题:
    每次停止一个容器,新运行一个容器后,eureka界面都会显示出来,初步怀疑是因为eureka界面注册使用的那个地址不固定有关,详看截图

    #!/bin/bash
    
    
    IMAGE=$1
    TAG=$2
    PULL_IMAGE=192.168.75.12/springcloud/${IMAGE}:${TAG}
    # 计算减法,并输出带有小数点前面的0, 比如 0.3-0.1=0.2
    CURRENT_IAMGE=`echo "$TAG - 0.1" | bc | awk '{printf "%.1f", $0}'`
    
    echo "登陆Harbor仓库"
    docker login http://192.168.75.12 -u admin -p harbor12345
    
    if [ $? -eq 0 ]; then
        echo "登陆Harbor仓库成功"
    else
        echo "登陆Harbor仓库失败"
        return 1
    fi
    
    echo "从Harbor仓库拉取指定镜像"
    docker pull ${PULL_IMAGE}
    
    # 启动命令
    # docker run -d --name spring-cloud-eureka-server-demo -p 9011:9011 192.168.75.12/springcloud/spring-cloud-eureka-server-demo:0.1
    
    # 更新容器操作
    
    echo "先停止现有的容器"
    docker stop ${IMAGE}_${CURRENT_IAMGE}
    
    echo "等待10秒"
    sleep 10
    
    echo "启动"
    if [ ${IMAGE} == "spring-cloud-eureka-server-demo" ]; then
        docker run -d --name ${IMAGE}_${TAG} -p 9011:9011 ${PULL_IMAGE}
    elif [ ${IMAGE} == "spring-cloud-eureka-client-demo" ]; then
        docker run -d --name ${IMAGE}_${TAG} -p 9012:9012 ${PULL_IMAGE}
    elif [ ${IMAGE} == "spring-cloud-eureka-consumer-demo" ]; then
        docker run -d --name ${IMAGE}_${TAG} -p 9013:9013 ${PULL_IMAGE}
    fi
    
    # docker run -d --name spring-cloud-eureka-server-demo -p 9011:9011 ${IMAGE}
    
    if [ $? -eq 0 ]; then
        echo "更新容器成功"
    else
        echo "更新容器失败"
        return 1
    fi
    
    
  • 相关阅读:
    20170822xlVBA ExportCellPhone
    【C/C++】C++ warning: control reaches end of non-void function return
    【C/C++】例题3-5 生成元/算法竞赛入门经典/数组与字符串
    对象类型的参数传递
    对象的创建和使用
    方法的重载
    构造方法
    方法
    修饰符
    类的一般形式
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/11856048.html
Copyright © 2011-2022 走看看