数据卷是Docker推荐的持久化存储方式,独立于容器生命周期。
# 创建数据卷
docker volume create my_volume
# 使用数据卷运行容器
docker run -d -v my_volume:/container/path image_name
# 查看所有数据卷
docker volume ls
# 检查数据卷详情
docker volume inspect my_volume
将主机目录直接挂载到容器中:
docker run -d -v /host/path:/container/path image_name
适用于临时数据,容器停止后数据消失:
docker run -d --tmpfs /container/path image_name
# 创建备份容器
docker run --rm -v my_volume:/volume -v /backup:/backup alpine \
tar cvf /backup/backup.tar /volume
# 恢复数据卷
docker run --rm -v my_volume:/volume -v /backup:/backup alpine \
tar xvf /backup/backup.tar -C /volume --strip 1
version: '3'
services:
app:
image: your_app_image
volumes:
- data_volume:/data
backup:
image: alpine
depends_on:
- app
volumes:
- data_volume:/data
- ./backups:/backups
command: sh -c "tar cvf /backups/backup-$(date +'%Y%m%d%H%M').tar /data"
restart: "no"
volumes:
data_volume:
#!/bin/bash
# 备份所有命名数据卷
for volume in $(docker volume ls -q); do
echo "Backing up volume $volume..."
docker run --rm -v $volume:/volume -v $(pwd)/backups:/backup alpine \
tar cvf /backup/$volume-$(date +'%Y%m%d%H%M').tar /volume
done
# 安装云存储插件(如Azure)
docker plugin install --alias azure --grant-all-permissions docker4x/cloudstor:azure-v17.03.0-ce \
CLOUD_PLATFORM=AZURE \
AZURE_STORAGE_ACCOUNT="your_account" \
AZURE_STORAGE_ACCOUNT_KEY="your_key"
# 使用云存储卷
docker volume create -d azure --name my_cloud_volume
docker run --rm -v data_volume:/data -v /backups:/backups restic/restic \
-r /backups/repo init
docker run --rm -v data_volume:/data -v /backups:/backups restic/restic \
-r /backups/repo backup /data
通过以上方法,您可以确保Docker容器中的数据得到妥善保存和备份,避免因容器故障导致数据丢失。