2017-03-23 50 views

回答

1

我的解決方案是在構建新圖像後刪除以前版本的圖像。這可確保緩存的圖像可加速構建,但可避免舊圖像堆積並佔用磁盤空間。該方法依賴於具有唯一標籤的圖像的每個版本。

這是我的劇本(梗概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 
1

我們用它來處理這方面的一個工具是docker custodian(dcgc)。

建議您保留一張您想要保留的圖像列表,並且永不清理並將其傳遞給--exclude-image(如果您使用的是puppet或其他資源管理系統,則編寫文件到磁盤,其中包含圖像模式,而不是使用--exclude-image-file

相關問題