Docker Backup and Restore
Backing up and restoring Docker data for data safety.
Backing Up Volumes
# Back up PostgreSQL
docker exec myapp-db pg_dump -U admin myapp > backup.sql
# Back up Redis
docker exec myapp-redis redis-cli BGSAVE
docker cp myapp-redis:/data/dump.rdb ./backup_redis.rdb
# Back up using tar
docker run --rm \
-v db-data:/source:ro \
-v $(pwd):/backup \
alpine tar czf /backup/db_backup.tar.gz -C /source .
Restoring Volumes
# Restore PostgreSQL
cat backup.sql | docker exec -i myapp-db psql -U admin myapp
# Restore Redis
docker cp ./backup_redis.rdb myapp-redis:/data/dump.rdb
docker restart myapp-redis
# Restore using tar
docker run --rm \
-v db-data:/target \
-v $(pwd):/backup \
alpine tar xzf /backup/db_backup.tar.gz -C /target
Automated Backup
#!/bin/bash
# backup.sh
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup"
# Back up PostgreSQL
docker exec myapp-db pg_dump -U admin myapp | \
gzip > $BACKUP_DIR/db_$DATE.sql.gz
# Back up volumes
docker run --rm \
-v db-data:/source:ro \
-v $BACKUP_DIR:/backup \
alpine tar czf /backup/volumes_$DATE.tar.gz -C /source .
# Clean up old backups
find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete
Use Case: Application Backup
# Back up all services
docker exec myapp-db pg_dump -U admin myapp > db_backup.sql
docker exec myapp-redis redis-cli BGSAVE
docker cp myapp-redis:/data/dump.rdb redis_backup.rdb
# Back up to the cloud
aws s3 cp db_backup.sql s3://myapp-backup/db/
aws s3 cp redis_backup.rdb s3://myapp-backup/redis/
Everyday Use Case
Case: An admin needs to back up before an update.
# Back up before the update
./backup.sh
# Update the application
docker-compose pull
docker-compose up -d
# If there is a problem, restore
cat db_backup.sql | docker exec -i myapp-db psql -U admin myapp
Best Practices
- Back up regularly: Schedule daily backups
- Back up to the cloud: For extra safety
- Test the restore: Make sure the backup can be restored
- Clean up old backups: Save storage
- Monitor backups: Make sure the backup succeeds
Conclusion
Backups are an important part of operations. For applications, regular backups of the database and volumes are critical.