docker-volume-backup
是一个用于备份 Docker 卷的工具,在 Windows 10 上使用它,你可以按照以下步骤操作:
1. 确保 Docker 环境已安装并正常运行
在 Windows 10 上,你需要安装 Docker Desktop for Windows。可以从 Docker 官方网站 下载并安装 Docker Desktop。安装完成后,启动 Docker Desktop 并确保 Docker 服务正常运行。
2. 准备要备份的 Docker 卷
假设你已经有一个或多个 Docker 卷需要备份,例如一个名为 my_data_volume
的卷。
3. 编写 Docker Compose 文件
根据你的需求,你可以参考以下示例编写 Docker Compose 文件。这里提供几个不同存储后端的示例:
本地备份
version: '3'
services:
# 定义使用数据卷的服务
my_service:
image: some_image:tag
volumes:
- my_data_volume:/path/in/container
backup:
image: offen/docker-volume-backup:v2.43.2
environment:
BACKUP_FILENAME: backup-%Y-%m-%dT%H-%M-%S.tar.gz
BACKUP_LATEST_SYMLINK: backup-latest.tar.gz
volumes:
- my_data_volume:/backup/my-app-backup:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- C:/path/to/local_backups:/archive
volumes:
my_data_volume:
备份到 AWS S3
version: '3'
services:
my_service:
image: some_image:tag
volumes:
- my_data_volume:/path/in/container
backup:
image: offen/docker-volume-backup:v2.43.2
environment:
AWS_S3_BUCKET_NAME: your_bucket_name
AWS_ACCESS_KEY_ID: your_access_key_id
AWS_SECRET_ACCESS_KEY: your_secret_access_key
volumes:
- my_data_volume:/backup/my-app-backup:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
my_data_volume:
备份到 Azure Blob Storage
version: '3'
services:
my_service:
image: some_image:tag
volumes:
- my_data_volume:/path/in/container
backup:
image: offen/docker-volume-backup:v2.43.2
environment:
AZURE_STORAGE_CONTAINER_NAME: your_container_name
AZURE_STORAGE_ACCOUNT_NAME: your_account_name
AZURE_STORAGE_PRIMARY_ACCOUNT_KEY: your_primary_account_key
volumes:
- my_data_volume:/backup/my-app-backup:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
volumes:
my_data_volume:
4. 运行 Docker Compose
将上述 Docker Compose 文件保存为 docker-compose.yml
,然后在包含该文件的目录下打开 PowerShell 或命令提示符,运行以下命令启动备份服务:
docker-compose up -d
这将在后台启动备份服务,按照配置的时间间隔(如果有配置)定期进行备份。
5. 手动触发备份(可选)
如果你想手动触发一次备份,可以使用 Docker CLI 运行以下命令:
docker run --rm \
-v my_data_volume:/backup/data \
--env AWS_ACCESS_KEY_ID="your_access_key_id" \
--env AWS_SECRET_ACCESS_KEY="your_secret_access_key" \
--env AWS_S3_BUCKET_NAME="your_bucket_name" \
--entrypoint backup \
offen/docker-volume-backup:v2.43.2
请根据你的实际情况替换相应的环境变量和卷名。
6. 查看备份结果
根据你配置的存储后端,你可以在本地目录、AWS S3 存储桶或 Azure Blob 存储容器中查看备份文件。
支持多个服务和多个数据卷的备份
以下是一个优化后的 docker-compose.yml
示例,支持多个服务和多个数据卷的备份。该方案提供了灵活的配置方式,可以针对不同数据卷设置不同的备份策略:
version: '3'
services:
# 应用服务 1:数据库
database:
image: postgres:14
volumes:
- db-data:/var/lib/postgresql/data
labels:
- docker-volume-backup.stop-during-backup=true
environment:
POSTGRES_PASSWORD: example
# 应用服务 2:Web 服务
web:
image: nginx:alpine
volumes:
- web-data:/usr/share/nginx/html
ports:
- "80:80"
# 应用服务 3:Redis 缓存
redis:
image: redis:alpine
volumes:
- redis-data:/data
# 备份服务
backup:
image: offen/docker-volume-backup:v2.43.2
restart: always
environment:
# 全局配置:备份文件命名规则
BACKUP_FILENAME: "%Y-%m-%dT%H-%M-%S.tar.gz"
# 全局配置:保留最近 7 天的备份
BACKUP_KEEP_DAYS: 7
# 全局配置:每周日凌晨 3 点执行备份
BACKUP_CRON_SCHEDULE: "0 3 * * 0"
# 启用详细日志
BACKUP_DEBUG: "true"
volumes:
- db-data:/backup/database:ro
- web-data:/backup/website:ro
- redis-data:/backup/redis:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./backups:/archive
volumes:
db-data:
web-data:
redis-data:
优化点说明
多数据卷支持:
- 同时备份
db-data
、web-data
和redis-data
三个数据卷 - 每个数据卷在备份容器中映射到独立的路径
- 同时备份
灵活的备份策略:
- 使用环境变量设置全局备份策略(如备份频率、保留时间)
- 可通过环境变量为不同卷设置独立策略(示例中使用全局配置)
容器停止控制:
- 对数据库服务添加
stop-during-backup=true
标签 - Web 和 Redis 服务不添加该标签,备份时不会停止
- 对数据库服务添加
本地备份管理:
- 备份文件按卷名分类存储在本地目录
- 自动清理旧备份,节省空间
增强可维护性:
- 使用命名卷替代匿名卷
- 分离不同类型的服务
- 添加必要的注释说明
扩展配置示例
如果你需要为不同数据卷设置不同的备份策略,可以通过创建多个备份服务实例实现:
version: '3'
services:
# 主应用服务
app:
image: my-app:latest
volumes:
- app-data:/app/data
- app-logs:/app/logs
# 数据库服务
db:
image: mysql:8.0
volumes:
- db-data:/var/lib/mysql
labels:
- docker-volume-backup.stop-during-backup=true
# 数据库备份服务(每天备份)
db-backup:
image: offen/docker-volume-backup:v2.43.2
restart: always
environment:
BACKUP_CRON_SCHEDULE: "0 2 * * *" # 每天凌晨 2 点
BACKUP_KEEP_DAYS: 14
BACKUP_FILENAME: "db-%Y-%m-%dT%H-%M-%S.tar.gz"
volumes:
- db-data:/backup/database:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./backups:/archive
# 应用数据备份服务(每周备份)
app-backup:
image: offen/docker-volume-backup:v2.43.2
restart: always
environment:
BACKUP_CRON_SCHEDULE: "0 4 * * 0" # 每周日凌晨 4 点
BACKUP_KEEP_DAYS: 30
BACKUP_FILENAME: "app-%Y-%m-%dT%H-%M-%S.tar.gz"
volumes:
- app-data:/backup/app:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./backups:/archive
# 日志备份服务(每月备份)
logs-backup:
image: offen/docker-volume-backup:v2.43.2
restart: always
environment:
BACKUP_CRON_SCHEDULE: "0 6 1 * *" # 每月 1 日凌晨 6 点
BACKUP_KEEP_MONTHS: 6
BACKUP_FILENAME: "logs-%Y-%m-%dT%H-%M-%S.tar.gz"
volumes:
- app-logs:/backup/logs:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./backups:/archive
volumes:
app-data:
app-logs:
db-data:
这个优化后的方案允许你:
- 为不同类型的数据设置不同的备份频率
- 对关键数据(如数据库)设置更频繁的备份
- 对不太重要的数据(如日志)设置更长的保留期
- 独立管理每个备份任务的状态和日志