没有图像的备份 /var/lib/docker?

Backup /var/lib/docker without images?

我想备份我的所有容器和卷,所以最简单的方法是将 /var/lib/docker 复制到另一个位置。

但是这个目录也包含所有图片,我不想包含它们,因为它们都可以很容易地从 public 来源重新下载。

那么如何在复制这个目录的同时排除图片呢?

你必须区分容器备份和卷备份:

备份容器,即它的配置,如标签、环境等

您可以通过将容器作为图像提交来做到这一点:

$ docker container commit <container-name/id> <name-of-new-image>

最好也给它一些元信息:

$ docker container ...  -m "very important container config state" -a "John Doe"

正在备份卷

假设感兴趣的体积 <my-vol> 绑定到一个容器 <other-container> - 它可能是这样创建的:docker container run -v /my-vol other-container ...

因此,首先您还必须使用 --volumes-from 标志将卷绑定到新创建的临时容器。使用 -v 选项,您可以将本地路径(host)挂载到容器中:

$ docker container run -rm --volumes-from <other-container> \
-v <dir/on/host>:<mountpath/in/container> \
<ubuntu/centos/whatever-base-image> tar cvf <mountpath/in/container>/backup.tar /<my-vol>

完成命令后,容器停止,并且由于 -rm 选项,它也将被删除。

所有的步骤是:

  • 将卷绑定到临时容器
  • 将 host 路径挂载到容器中
  • 制作压缩包(或任何类型的备份) 容器中的体积
  • 容器在备份命令完成后停止并被删除
  • 备份 tarbal 留在容器 host 的挂载目录中。

另请参阅:https://docs.docker.com/storage/volumes/


Shell 命令

.. 另一种 - 不推荐 - 方法是仅使用 os 级命令:

shopt -s extglob
cp -r var/lib/docker/!(image) your/path/backup

为此,您必须停止所有涉及的容器以防止 read/write 问题。