这个是标题
- shell脚本学习
-
- 1)拉取镜像根据镜像名和tag保存在本地
- [2) 删除Linux机器本机的镜像](#2) 删除Linux机器本机的镜像)
- 3) docker load并且修改镜像的域名和项目名push到新的harbor docker load并且修改镜像的域名和项目名push到新的harbor)
shell脚本学习
1)拉取镜像根据镜像名和tag保存在本地
docker_pull_save.sh
.
shell
#!/bin/bash
# 定义镜像列表
images_list=$(cat "image_list.txt")
# 遍历镜像列表
for image in $images_list
do
# 提取镜像名和标签
image_name=$(echo $image | awk -F ':|/' '{print $3}')
image_tag=$(echo $image | awk -F ':|/' '{print $4}')
# 拉取镜像
docker pull "$image"
# 保存镜像到本地目录
docker save -o "$image_name-$image_tag.tar" "$image"
docker rmi "$image"
done
其中 image_list示例如下:
txt
harbor.io/project/images_name1:tag1
harbor.io/project/images_name2:tag2
2) 删除Linux机器本机的镜像
shell
#!/bin/bash
# 获取所有Docker镜像列表
images=$(docker images)
# 对每个镜像进行处理
for image in ${images[@]}; do
# 分割镜像名和标签
name=$(echo "$image" | awk '{print $1}')
tag=$(echo "$image" | awk '{print $2}')
# 删除该镜像的全部标签
docker rmi -f $name:$tag || true
# 删除无标签镜像
if [ -z "$tag" ]; then
docker rmi -f $name || true
fi
done
3) docker load并且修改镜像的域名和项目名push到新的harbor
shell
#!/bin/bash
# 获取save的镜像包名称
images_tar_list=$(ls -h |grep tar.gz)
# 遍历镜像列表
for image in $images_tar_list
do
docker load -i $image
done
# 定义新的镜像harbor和项目
new_harbor="new_harbor.io/new_project/"
# 获取镜像名和tag
images_tag_push_list=($(docker images |grep tag | awk '{print $1":"$2'}))
# 遍历镜像列表
for image in "${images_tag_push_list[@]}"
do
# 提取镜像名和标签
image_name=$(echo $image | awk -F ':|/' '{print $3}')
image_tag=$(echo $image | awk -F ':|/' '{print $4}')
new_image=$new_harbor$image_name:$image_tag
# 打tag
docker tag "$image" $new_image
# 推送镜像
docker push $new_image
# 删除拉取的镜像
docker rmi $new_image
docker rmi "$image"
done