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:tagvolumes:- my_data_volume:/path/in/containerbackup:image: offen/docker-volume-backup:v2.43.2environment:BACKUP_FILENAME: backup-%Y-%m-%dT%H-%M-%S.tar.gzBACKUP_LATEST_SYMLINK: backup-latest.tar.gzvolumes:- my_data_volume:/backup/my-app-backup:ro- /var/run/docker.sock:/var/run/docker.sock:ro- C:/path/to/local_backups:/archivevolumes:my_data_volume:
備份到 AWS S3
version: '3'services:my_service:image: some_image:tagvolumes:- my_data_volume:/path/in/containerbackup:image: offen/docker-volume-backup:v2.43.2environment:AWS_S3_BUCKET_NAME: your_bucket_nameAWS_ACCESS_KEY_ID: your_access_key_idAWS_SECRET_ACCESS_KEY: your_secret_access_keyvolumes:- my_data_volume:/backup/my-app-backup:ro- /var/run/docker.sock:/var/run/docker.sock:rovolumes:my_data_volume:
備份到 Azure Blob Storage
version: '3'services:my_service:image: some_image:tagvolumes:- my_data_volume:/path/in/containerbackup:image: offen/docker-volume-backup:v2.43.2environment:AZURE_STORAGE_CONTAINER_NAME: your_container_nameAZURE_STORAGE_ACCOUNT_NAME: your_account_nameAZURE_STORAGE_PRIMARY_ACCOUNT_KEY: your_primary_account_keyvolumes:- my_data_volume:/backup/my-app-backup:ro- /var/run/docker.sock:/var/run/docker.sock:rovolumes: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:14volumes:- db-data:/var/lib/postgresql/datalabels:- docker-volume-backup.stop-during-backup=trueenvironment:POSTGRES_PASSWORD: example# 應用服務 2:Web 服務web:image: nginx:alpinevolumes:- web-data:/usr/share/nginx/htmlports:- "80:80"# 應用服務 3:Redis 緩存redis:image: redis:alpinevolumes:- redis-data:/data# 備份服務backup:image: offen/docker-volume-backup:v2.43.2restart: alwaysenvironment:# 全局配置:備份文件命名規則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:/archivevolumes: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:latestvolumes:- app-data:/app/data- app-logs:/app/logs# 數據庫服務db:image: mysql:8.0volumes:- db-data:/var/lib/mysqllabels:- docker-volume-backup.stop-during-backup=true# 數據庫備份服務(每天備份)db-backup:image: offen/docker-volume-backup:v2.43.2restart: alwaysenvironment:BACKUP_CRON_SCHEDULE: "0 2 * * *" # 每天凌晨 2 點BACKUP_KEEP_DAYS: 14BACKUP_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.2restart: alwaysenvironment:BACKUP_CRON_SCHEDULE: "0 4 * * 0" # 每周日凌晨 4 點BACKUP_KEEP_DAYS: 30BACKUP_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.2restart: alwaysenvironment:BACKUP_CRON_SCHEDULE: "0 6 1 * *" # 每月 1 日凌晨 6 點BACKUP_KEEP_MONTHS: 6BACKUP_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:/archivevolumes:app-data:app-logs:db-data:
這個優化后的方案允許你:
- 為不同類型的數據設置不同的備份頻率
- 對關鍵數據(如數據庫)設置更頻繁的備份
- 對不太重要的數據(如日志)設置更長的保留期
- 獨立管理每個備份任務的狀態和日志