数据持久化策略

Docker 容器数据持久化的策略和最佳实践


📋 目录


数据卷生命周期

数据卷创建

# 创建数据卷
docker volume create my-volume
 
# 使用数据卷
docker run -d -v my-volume:/data nginx:latest

数据卷删除

# 删除数据卷
docker volume rm my-volume
 
# 删除所有未使用的数据卷
docker volume prune

数据卷备份

备份方法

# 方法 1:使用临时容器
docker run --rm \
  -v my-volume:/data \
  -v $(pwd):/backup \
  ubuntu:20.04 \
  tar czf /backup/backup.tar.gz /data
 
# 方法 2:直接备份
docker run --rm \
  -v my-volume:/data \
  ubuntu:20.04 \
  tar czf - /data > backup.tar.gz

定时备份

# 使用 cron 定时备份
0 2 * * * docker run --rm -v my-volume:/data -v /backup:/backup ubuntu:20.04 tar czf /backup/backup-$(date +\%Y\%m\%d).tar.gz /data

数据卷恢复

恢复方法

# 恢复数据卷
docker run --rm \
  -v my-volume:/data \
  -v $(pwd):/backup \
  ubuntu:20.04 \
  tar xzf /backup/backup.tar.gz -C /

数据迁移

迁移到新主机

# 1. 备份数据卷
docker run --rm -v my-volume:/data ubuntu:20.04 tar czf - /data > backup.tar.gz
 
# 2. 传输到新主机
scp backup.tar.gz user@new-host:/path/
 
# 3. 在新主机恢复
docker volume create my-volume
docker run --rm -v my-volume:/data -v /path:/backup ubuntu:20.04 tar xzf /backup/backup.tar.gz -C /

数据卷驱动

使用不同驱动

# 使用本地驱动
docker volume create --driver local my-volume
 
# 使用 NFS 驱动
docker volume create \
  --driver local \
  --opt type=nfs \
  --opt device=:/path/to/nfs \
  my-volume

最佳实践

1. 使用命名数据卷

# 生产环境使用命名数据卷
docker run -d -v db-data:/var/lib/postgresql/data postgres:13

2. 定期备份

# 设置定时备份任务

3. 数据卷命名规范

# 使用有意义的名称
docker volume create app-db-data
docker volume create app-uploads

4. 监控数据卷使用

# 查看数据卷使用情况
docker system df -v

📚 参考资源


相关笔记