Manajemen Build Cache

Adi Purnama

Adi Purnama

Dokku melakukan build image di server kita. Jika kita sering melakukan deployment, storage server kita akan bertambah dengan cepat. Kita harus rajin-rajin clean build cache ini.

Kalau manual clean rasanya repot juga. Apalagi kalau kita lagi AFK, atau koneksi internet lagi nggak mumpuni.

Akhirnya, terbesitlah ide untuk buat script auto clean cache. Logicnya, script ini akan auto-clean cache setelah build cache sudah melebihi threshold yang ditentukan. Script ini akan dijalankan oleh cronjob, sehingga kita nggak perlu repot-repot clean cache secara manual.

Ini script yang saya pakai. Special thanks to Claude 3.5 Sonnet atas scriptnya 🤣

#!/bin/bash

# Set the threshold in GB
THRESHOLD=30

# Get the current disk usage of Docker
USAGE=$(docker system df -v | awk '/Build cache/ {print $4}' | sed 's/GB//')
echo "============================" >> ./clean_build_cache.log
date +'%d-%m-%Y %H:%M:%S' >> ./clean_build_cache.log

# Check if usage exceeds threshold
if (( $(echo "$USAGE > $THRESHOLD" | bc -l) )); then
echo "Docker build cache exceeds ${THRESHOLD}GB. Current usage: ${USAGE}GB" | tee -a ./clean_build_cache.log
echo "Cleaning Docker build cache..." | tee -a ./clean_build_cache.log
# Prune unused build cache
docker builder prune -f
# Get the new usage after cleaning
NEW_USAGE=$(docker system df -v | awk '/Build Cache/ {print $4}' | sed 's/GB//')
echo "Cleaned. New usage: ${NEW_USAGE}GB" | tee -a ./clean_build_cache.log
else
echo "Docker build cache is within limits. Current usage: ${USAGE}GB" | tee -a ./clean_build_cache.log
fi

echo "============================" >> ./clean_build_cache.log
echo "" >> ./clean_build_cache.log

Script dari Claude saya modif sedikit untuk menambahkan logging, supaya gampang debugnya kalau ada sesuatu.

Selanjutnya, kita perlu tambahkan ini ke crontab. Edit crontab di server dengan command `crontab -e`, kemudian isi dengan line berikut:

0 17 * * * bash /path/to/clean_build_cache.sh

Silahkan ganti jadwal `0 17 * * *` sesuai dengan kebutuhan masing-masing.