I volumi Docker sono una parte essenziale dell'architettura containerizzata, spesso utilizzati per rendere persistenti i dati attraverso i cicli di vita del container. Per proteggersi dalla perdita di dati, è fondamentale eseguire regolarmente il backup di questi volumi. Questo articolo fornisce uno script di shell per automatizzare il processo di backup giornalieri dei volumi Docker, caricandoli su AWS S3 e ripulindo i vecchi backup.
Prerequisiti
- Docker installato e funzionante.
- AWS Command Line Interface (CLI) installato e configurato con le autorizzazioni appropriate.
- IL "jq". strumento installato per elaborare il contenuto JSON (spesso utilizzato per analizzare gli output dei comandi Docker)
Panoramica dello script
Lo script farà quanto segue:
- Effettua il loop su ciascun volume Docker.
- Crea un backup del volume utilizzando docker cp.
- Comprimi il backup.
- Carica il backup compresso su un bucket S3.
- Rimuovi i backup locali più vecchi di 30 giorni.
- Rimuovi i backup S3 più vecchi di 30 giorni.
Il copione
#!/bin/bash
# Set variables
BACKUP_DIR="/path/to/backup/dir" # Local backup directory
S3_BUCKET="s3://your-bucket-name" # Your S3 bucket name
DAYS_TO_KEEP=30
# 1. Loop over each Docker volume
for VOLUME in $(docker volume ls -q); do
TIMESTAMP=$(date +%Y%m%d%H%M%S)
BACKUP_NAME="${VOLUME}_${TIMESTAMP}.tar.gz"
# 2. Create a backup of the volume
CONTAINER_ID=$(docker run -d -v ${VOLUME}:/volume busybox true)
docker cp ${CONTAINER_ID}:/volume ${BACKUP_DIR}/${VOLUME}
docker rm -v ${CONTAINER_ID}
# 3. Compress the backup
tar -czf ${BACKUP_DIR}/${BACKUP_NAME} -C ${BACKUP_DIR} ${VOLUME}
rm -rf ${BACKUP_DIR}/${VOLUME}
# 4. Upload the compressed backup to an S3 bucket
aws s3 cp ${BACKUP_DIR}/${BACKUP_NAME} ${S3_BUCKET}/${BACKUP_NAME}
done
# 5. Remove local backups older than 30 days
find ${BACKUP_DIR} -name "*.tar.gz" -mtime +${DAYS_TO_KEEP} -exec rm {} ;
# 6. Remove S3 backups older than 30 days
OLDER_THAN_DATE=$(date -d "-${DAYS_TO_KEEP} days" +%Y%m%d)
aws s3 ls ${S3_BUCKET}/ | awk '{print $4}' | while read BACKUP; do
BACKUP_DATE=$(echo ${BACKUP} | awk -F_ '{print $2}' | awk -F. '{print $1}')
if (( ${BACKUP_DATE} -lt ${OLDER_THAN_DATE} )); then
aws s3 rm ${S3_BUCKET}/${BACKUP}
fi
done
Esecuzione
Salvare lo script in un file, ad esempio "docker_vol_backup.sh"..
- Rendi eseguibile lo script:
chmod +x docker_vol_backup.sh - Pianifica l'esecuzione quotidiana dello script utilizzando cron:
0 2 * * * /path/to/docker_vol_backup.sh >> /path/to/logfile.log 2>&1
Questa configurazione cron eseguirà lo script ogni giorno alle 2 del mattino e registrerà l'output in un file di registro specificato.
Conclusione
L'automazione del processo di backup dei volumi Docker garantisce la sicurezza dei dati e riduce al minimo l'intervento umano. Sfruttando AWS S3, i dati possono essere archiviati in un ambiente scalabile, sicuro e accessibile. La pulizia periodica dei vecchi backup sia localmente che in S3 aiuta a gestire i costi di storage e a prevenire inutili disordine. Assicurati sempre di testare le procedure di backup e ripristino in un ambiente sicuro prima di fare affidamento su di esse per i dati di produzione.
