shell脚本清理打包成功后的镜像并通过以下命令释放磁盘空间

1,957次阅读
一条评论

共计 1143 个字符,预计需要花费 3 分钟才能阅读完成。

需求背景:
项目打包成功后上传到私服,本地就没有存在的必要了,进行镜像清理,节约磁盘空间,
shell 脚本如下:

#!/bin/bash

prefix="reg.g6k.cn/bt/"

# 明确保留的 repository:tag
whitelist=(
    "reg.g6k.cn/bt/openjdk:11-base"
    "reg.g6k.cn/bt/go:base-v2"
)

# 创建 whitelist 的映射表
declare -A whitelist_map
for item in "${whitelist[@]}"; do
    whitelist_map["$item"]=1
done

# 收集所有待删除项
mapfile -t image_lines < <(docker images --format '{{.Repository}}:{{.Tag}} {{.ID}}' | grep "^$prefix")

declare -A image_ids_to_delete

for line in "${image_lines[@]}"; do
    repo_tag=$(echo "$line" | awk '{print $1}')
    image_id=$(echo "$line" | awk '{print $2}')

    if [[ -n "${whitelist_map[$repo_tag]}" ]]; then
        echo "✅ 保留白名单镜像: $repo_tag"
    else
        echo "🗑️  标记删除镜像: $repo_tag ($image_id)"
        image_ids_to_delete["$image_id"]=1
    fi
done

# 执行删除
echo
echo "🚀 开始删除镜像..."
for id in "${!image_ids_to_delete[@]}"; do
    echo "→ 删除镜像 ID: $id"
    docker rmi -f "$id" || echo "⚠️  删除失败,可能该镜像被容器引用: $id"
done

echo
echo "✅ 脚本执行完毕,总计尝试删除 ${#image_ids_to_delete[@]} 个镜像 ID。"
 清理镜像后有时候可能磁盘并不会释放空间。可以使用下面命令查看具体情况。
[root@ops-jenkins-01 ]$docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          12        0         4.919GB   4.919GB (100%)
Containers      0         0         0B        0B
Local Volumes   0         0         0B        0B
Build Cache     44        0         0B        0B

不释放的情况下 Build Cache 会占用大量的空间,需要执行下面的命令来进行缓存清理

docker builder prune

用于清理这些不再使用的构建器资源,以释放磁盘空间。它会删除不再使用的构建器、
构建器缓存和构建日志等资源,但会保留正在使用的构建器

微信扫描下方的二维码阅读本文

正文完
 0
yx
版权声明:本站原创文章,由 yx 于2023-08-17发表,共计1143字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(一条评论)
验证码
2024-06-12 17:06:44 回复

666

     中国广东省深圳市电信