Backup dei volumi Docker e caricamento su S3
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.