如何备份Docker数据

如何备份Docker数据?

1.备份容器数据卷

由于我们用Docker搭建的时候,把需要的目录都挂载到本地了,Docker的镜像是可以直接下载的,所以其实我们只要备份这些挂载到本地的数据就好了。

1
docker run --rm --volumes-from <container_name> -v $(pwd):/backup busybox tar cvf /backup/backup.tar /path/to/volume

这条命令的含义是:

  • --volumes-from <container_name>:从容器挂载数据卷。
  • -v $(pwd):/backup:把当前目录挂载到容器的 /backup 目录。
  • busybox tar cvf /backup/backup.tar /path/to/volume:使用 busybox 容器,将数据卷的内容打包成一个 tar 文件并保存到本地。

以Bitwarden为例:

Bitwarden安装

1
docker run -d --name bitwarden -v /root/data/docker-data/bitwarden/bw-data/:/data/ -p 8000:80 bitwardenrs/server:latest

Docker挂载目录打包

1
docker inspect 容器名

查看Mounts,可以看到映射到本地的目录。

或者直接使用命令:

1
docker run --rm --volumes-from bitwarden -v $(pwd):/backup busybox tar cvfz /backup/backup.tar /data

SCP传输文件到另一台服务器

1
scp /root/backup/backup.tar [email protected]:/root/data/docker-data/bitwarden

解压、重名命

1
2
tar -zxvf /root/data/docker-data/bitwarden/backup.tar
mv data bw-data #把data重命名成bw-data

2.备份镜像

使用 docker save 命令来保存镜像:

1
docker save -o <backup_image.tar> <image_name>

这样你可以将镜像保存为一个 tar 文件。之后你可以通过 docker load 命令将该镜像重新导入:

1
docker load -i <backup_image.tar>

3.备份所有容器、镜像和卷

你可以使用以下命令备份所有内容:

  • 备份所有镜像:
1
docker save $(docker images -q) -o all_images_backup.tar
  • 导出所有运行容器的配置(包括数据卷信息)
1
docker ps --format '{{.Names}}' | xargs -I {} docker inspect {} > containers_backup.json

4.恢复

  • 恢复镜像:使用 docker load 加载备份的镜像。
  • 恢复数据卷:使用 tar 工具将数据卷内容解压缩并恢复到指定路径。