Ubuntu下Docker数据备份指南
在Ubuntu系统中,Docker数据的备份需覆盖镜像、容器、卷、配置及网络等核心元素,以下是具体操作步骤及注意事项:
sudo systemctl stop docker
Docker的所有核心数据默认存储在/var/lib/docker目录,可通过tar命令打包备份:
sudo tar -czvf /path/to/backup/docker-system-$(date +%Y%m%d).tar.gz /var/lib/docker
-c:创建新压缩包;-z:使用gzip压缩;-v:显示进度;-f:指定文件名。docker-system-20250921.tar.gz),便于区分备份版本。Docker的配置文件(如daemon.json)存储在/etc/docker目录,备份命令:
sudo tar -czvf /path/to/backup/docker-config-$(date +%Y%m%d).tar.gz /etc/docker
配置文件包含Docker守护进程的设置(如日志驱动、存储驱动),恢复时需此文件。
卷(Volume)是Docker中持久化存储的核心组件(即使容器删除,数据仍保留)。备份步骤如下:
docker volume ls
myvolume为例):sudo tar -czvf /path/to/backup/myvolume-$(date +%Y%m%d).tar.gz /var/lib/docker/volumes/myvolume/_data
卷的实际数据存储在/var/lib/docker/volumes/<卷名>/_data目录。for volume in $(docker volume ls -q); do
sudo tar -czvf "/path/to/backup/${volume}-$(date +%Y%m%d).tar.gz" "/var/lib/docker/volumes/${volume}/_data"
done
此脚本会自动备份所有卷的数据。若容器数据未通过卷持久化,可通过docker commit将容器状态保存为镜像,再导出为文件:
docker ps -a | grep -v "CONTAINER ID" | awk '{print $1}' | while read container_id; do
docker commit "$container_id" "backup-$(date +%Y%m%d)-$container_id"
docker save -o "/path/to/backup/backup-$(date +%Y%m%d)-$container_id.tar" "backup-$(date +%Y%m%d)-$container_id"
done
此命令会将所有容器的当前状态保存为镜像,并导出为.tar文件。若自定义了网络(如桥接、overlay网络),可备份网络配置信息:
mkdir -p /path/to/backup/networks
docker network ls | awk '/^([0-9a-f]{12})$/ {print $1}' | xargs -I {} sh -c 'docker network inspect {} > /path/to/backup/networks/{}.json'
此命令会将每个网络的配置(如子网、网关)保存为JSON文件,恢复时可重新创建网络。
sudo tar -xzvf /path/to/backup/docker-system-$(date +%Y%m%d).tar.gz -C /
sudo tar -xzvf /path/to/backup/docker-config-$(date +%Y%m%d).tar.gz -C /
sudo tar -xzvf /path/to/backup/myvolume-$(date +%Y%m%d).tar.gz -C /var/lib/docker/volumes/myvolume/_data
docker load -i /path/to/backup/backup-$(date +%Y%m%d)-<container_id>.tar
cat /path/to/backup/networks/*.json | docker network create -d <驱动类型> --opt <参数> <网络名>
需根据JSON文件中的配置调整驱动类型(如bridge)和参数(如subnet)。
gpg等工具加密(如gpg -c backup.tar.gz)。通过以上步骤,可全面备份Ubuntu系统下的Docker数据,确保在系统故障或数据丢失时快速恢复。