使用CI構建docker鏡像進行發佈極大促進了你們的版本發佈效率,因而鏡像倉庫也就急速膨脹。爲了緩解磁盤壓力,咱們須要設置一些清理策略。linux
對於不一樣docker鏡像的清理策略應該是不一樣的。好比,默認保留最近5個版本的鏡像,對於工具類的image保留所有,對於業務類的image保留一個月之類的。nginx
簡單保留5個image的方式以下:git
下載https://github.com/mlabouardy/nexus-cli, 使用cli來執行刪除。github
wget https://s3.eu-west-2.amazonaws.com/nexus-cli/1.0.0-beta/linux/nexus-cli chmod +x nexus-cli
./nexus-cli configure
最終會在本目錄下建立.credentials 文件docker
# Nexus Credentials nexus_host = "http://nexus.demo.com" nexus_username = "admin" nexus_password = "adminpass" nexus_repository = "your-docker-private-repo"
注意,host填寫的nexus的host和端口,不是docker對應的repo的端口。
nexus_repository就是docker對應的repo。工具
./nexus-cli image ls
./nexus-cli image delete -name mlabouardy/nginx -keep 5
clean.sh3d
image_file=image.txt CLI_HOME=/data/nexus3 KEEP_VERSION_NUM=5 $CLI_HOME/nexus-cli image ls > $image_file sed -i '$d' $image_file cat $image_file | while read line do echo "清理$line" $CLI_HOME/nexus-cli image delete -name $line -keep $KEEP_VERSION_NUM done
定時任務code
crontab -e 0 2 * * * sh /data/nexus3/clean.sh
前面提到,對應不一樣的image,應該選擇不一樣的保留策略的。固然不能直接保留5個。好比某個工具鏡像,雖然開發很勤快,但應用的也許仍是老版本。對於業務鏡像,一天發佈了n次,添加了n個鏡像。怎麼維護這些版本呢?blog
一個粗略的想法是,規範image名稱,好比tools-, biz-之類添加前綴。crontab
分不一樣的repo。 對於工具類,單獨一個repo,業務本身一個repo,對不一樣的repo執行不一樣的保留策略。