从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

posted @ 2019-11-14 11:50  哈喽哈喽111111  阅读(1080)  评论(0编辑  收藏  举报