帮我写一个shell脚本,当镜像名一样的进行判断,如果大于3个,就把旧的镜像删除,只保留两个最近的镜像,基于全部查看
时间: 2024-04-15 15:30:40 浏览: 215
以下是基于 `docker image ls` 查看全部镜像的脚本,用于判断镜像名是否一样并删除旧的镜像,只保留最近的两个镜像:
```bash
#!/bin/bash
image_name="your_image_name"
# 获取所有镜像列表,并按照创建时间排序
image_list=$(docker image ls --format "{{.Repository}}:{{.Tag}}|{{.CreatedAt}}" | sort -t "|" -k2,2)
# 根据镜像名进行筛选
filtered_images=$(echo "$image_list" | grep "$image_name")
# 获取镜像数量
image_count=$(echo "$filtered_images" | wc -l)
# 如果镜像数量超过3个,则删除旧的镜像,只保留最近的两个
if [ $image_count -gt 3 ]; then
images_to_delete=$((image_count - 2))
images_to_delete_list=$(echo "$filtered_images" | head -n $images_to_delete | cut -d "|" -f 1)
for image in $images_to_delete_list; do
docker image rm $image
done
echo "旧的镜像已删除,只保留最近的两个镜像。"
else
echo "无需删除镜像,数量未超过3个。"
fi
```
请将 `your_image_name` 替换为你需要操作的镜像名。该脚本会使用 `docker image ls` 命令获取全部镜像列表,并按照创建时间排序。然后,根据镜像名进行筛选,获取与指定镜像名相同的镜像列表。接下来,根据镜像数量判断是否需要删除旧的镜像,并使用 `docker image rm` 命令删除旧的镜像,只保留最近的两个镜像。最后,会输出相应的操作结果。
请确保在执行脚本之前已经安装了 Docker,并且具有执行脚本的权限。
阅读全文