在持續集成環境中構建碼頭圖像時,您很快就會耗盡磁盤空間並需要移除舊圖像。但是,您不能刪除所有舊圖像,包括中間圖像,因爲這會破壞緩存。如何在持續集成中移除舊碼頭圖像以節省磁盤空間
如何避免構建代理程序中的磁盤空間不足,而又不會破壞緩存?
在持續集成環境中構建碼頭圖像時,您很快就會耗盡磁盤空間並需要移除舊圖像。但是,您不能刪除所有舊圖像,包括中間圖像,因爲這會破壞緩存。如何在持續集成中移除舊碼頭圖像以節省磁盤空間
如何避免構建代理程序中的磁盤空間不足,而又不會破壞緩存?
我的解決方案是在構建新圖像後刪除以前版本的圖像。這可確保緩存的圖像可加速構建,但可避免舊圖像堆積並佔用磁盤空間。該方法依賴於具有唯一標籤的圖像的每個版本。
這是我的劇本(梗概here):
#!/usr/bin/env bash
usage(){
# ============================================================
echo This script removes all images of the same repository and
echo older than the provided image from the docker instance.
echo
echo This cleans up older images, but retains layers from the
echo provided image, which makes them available for caching.
echo
echo Usage:
echo
echo '$ ./delete-images-before.sh <image-name>:<tag>'
exit 1
# ============================================================
}
[[ $# -ne 1 ]] && usage
IMAGE=$(echo $1 | awk -F: '{ print $1 }')
TAG=$(echo $1 | awk -F: '{ print $2 }')
FOUND=$(docker images --format '{{.Repository}}:{{.Tag}}' | grep ${IMAGE}:${TAG})
if ! [[ ${FOUND} ]]
then
echo The image ${IMAGE}:${TAG} does not exist
exit 2
fi
docker images --filter before=${IMAGE}:${TAG} \
| grep ${IMAGE} \
| awk '{ print $3 }' \
| xargs --no-run-if-empty \
docker --log-level=warn rmi --force || true
我們用它來處理這方面的一個工具是docker custodian(dcgc)。
建議您保留一張您想要保留的圖像列表,並且永不清理並將其傳遞給--exclude-image
(如果您使用的是puppet
或其他資源管理系統,則編寫文件到磁盤,其中包含圖像模式,而不是使用--exclude-image-file
)