分享一个批量导入 docker 镜像和导入并运行镜像的脚本

在生产环境下,一般不允许连接外网,那么就需要把镜像导出拷贝到生产环境下。如果一个项目的中间件比较多,并且微服务架构下的服务镜像也很多,那么这个步骤就会显得比较麻烦。

并且,服务镜像是可以导入并直接启动的,因为他们运行的命令都类似,除了镜像名称不同以外,所有阿蛮君写了如下脚本:

#!/bin/bash
shell_dir=$(pwd)
loadStartDir="load_and_start"
loadOnlyDir="load_only"
loadedDir="loaded"

if [ ! -d $loadedDir ]; then
  mkdir $loadedDir
fi

if [ -d $loadStartDir ]; then
  echo "======导入并启动镜像开始======"
  for file in $shell_dir/$loadStartDir/*.tar
  do
    if [ -f $file ]; then
      result=$(docker load < $file)
      ## 将文件移动到已导入文件夹
      mv $file $shell_dir/$loadedDir
      repo=$(echo "$result" | awk -F: '{print $2}')
      ## 容器名不能带 /
      serverName=$(echo "$repo" | sed 's/\//_/g')
      ## 删除以前的容器
      docker rm -f $serverName > /dev/null 2>&1
      echo "server $serverName is starting"
      tag=$(echo $result | awk -F: '{print $3}')
      docker run -d --net host --restart=unless-stopped -e ACTIVE=pro --name $serverName $repo:$tag > /dev/null 2>&1;
    fi
  done
  echo "======导入并启动镜像结束======"
fi

if [ -d $loadOnlyDir ]; then
  echo "======仅导入镜像开始======"
  for file in $shell_dir/$loadOnlyDir/*.tar
  do
    if [ -f $file ]; then
      echo "$(docker load < $file)"
      mv $file $shell_dir/$loadedDir
    fi
  done
  echo "======仅导入镜像结束======"
fi

这里的 docker run 命令根据实际情况进行修改。

阅读剩余
THE END