📅  最后修改于: 2023-12-03 15:23:46.434000             🧑  作者: Mango
在 Docker Hub 上,我们可以存储和分享 Docker 镜像,但是过多的镜像占用了我们宝贵的存储空间。本文将介绍如何使用 Shell/Bash 脚本来删除 Docker Hub 上超过 X 天的镜像,以保持 Docker Hub 干净整洁。
在开始之前,您需要满足以下前置要求:
使用以下命令登录 Docker Hub:
docker login
其中,您需要输入您的 Docker Hub 帐户名和密码。
在 Bash 终端输入以下命令,获取您的 Docker Hub API Token:
curl -H "Content-Type: application/json" -X POST -d '{"username": "YOUR_USERNAME", "password": "YOUR_PASSWORD"}' https://hub.docker.com/v2/users/login/ | jq -r .token
这里需要替换 YOUR_USERNAME 和 YOUR_PASSWORD 为您的 Docker Hub 帐户名和密码。如果您没有安装 jq 工具,请使用以下命令安装:sudo apt install jq -y
。(本命令在 Ubuntu 下测试通过)
您将收到一个长长的字符序列(API Token)。复制它以备后用。
使用您喜欢的编辑器,创建一个新的 Shell/Bash 脚本:
#!/bin/bash
TOKEN=YOUR_TOKEN # 将 YOUR_TOKEN 替换为您的 Docker Hub API Token
THRESHOLD_DAYS=X # 将 X 替换为您的阈值天数
for image in $(curl -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/YOUR_USERNAME/?page_size=10000 | jq -r '.results|.[]|.name'); do
for tag in $(curl -H "Authorization: JWT ${TOKEN}" https://hub.docker.com/v2/repositories/YOUR_USERNAME/$image/tags/?page_size=10000 | jq -r '.results|.[]|.name'); do
manifest=$(curl -s -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -H "Authorization: JWT $TOKEN" "https://hub.docker.com/v2/repositories/YOUR_USERNAME/$image/manifests/$tag")
created=$(echo "$manifest" | jq -r '.history[0].v1Compatibility' | jq -r '.created')
created_timestamp=$(date -d "${created}" "+%s") # 转换日期为时间戳
current_timestamp=$(date '+%s')
diff_days=$(( (current_timestamp - created_timestamp) / 86400 )) # 计算时间差,单位:天
if [ "${diff_days}" -gt "${THRESHOLD_DAYS}" ]; then # 如果镜像超过阈值天数,则删除
echo "Deleting image ${image}:${tag} created ${created} (${diff_days} days old)..."
curl -H "Authorization: JWT ${TOKEN}" -X DELETE "https://hub.docker.com/v2/repositories/YOUR_USERNAME/${image}/tags/${tag}/"
else
echo "Skipping image ${image}:${tag} created ${created} (${diff_days} days old)..."
fi
done
done
将 YOUR_TOKEN 替换为您的 API Token,将 X 替换为阈值天数。接下来,将 YOUR_USERNAME 替换为您的 Docker Hub 用户名。
该脚本将遍历您的 Docker Hub 仓库中的所有镜像,并计算它们的创建时间。如果镜像超过 X 天,则将其删除。
使用以下命令运行脚本:
bash script.sh
脚本将开始运行,并显示每个处理的镜像及其创建时间。如果镜像被删除,将显示“Deleting image…”;如果镜像未被删除,则将显示“Skipping image…”。
使用 Shell/Bash 脚本删除 Docker Hub 上超过 X 天的镜像是一项重要的任务,以保持 Docker Hub 干净整洁,确保您拥有足够的存储空间来存储更多的镜像。感谢您阅读本文,希望它对您有所帮助!