分享一个批量导入 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