如何 export/save 整个 Docker container/image

How to export/save an entire Docker container/image

我在我的系统上安装了一个 MySQL Docker 图像,配置并启动了一个容器,并将一个 2+ GB(bz2 压缩大小)的数据库导入其中。我想打包整个容器并转移到另一个系统上。

如果我停止 运行 容器并执行导出,它只会生成一个 118MB tar.bz 文件。

如果我将我的容器提交到一个图像中并保存它,那也只会产生一个 118MB tar.bz 文件。

export/save 包含 MySQL 数据的整个容器的方法是什么? MySQL图片是383.4MB,我修改后的图片也是一样。


我找到了一些踪迹:How can I backup a Docker-container with its data-volumes?


补充:目前我正在使用 Ubuntu Linux 口味。

  1. 查找与您的容器匹配的数据存储位置(作为 sudo 用户,您可以访问 /var/lib/docker/volumes/{container_id},/var/lib/docker/vfs/dir/{ container_id})

  2. 将数据与您的容器一起移动到您想要的位置运行。

  3. 启动容器时使用卷映射,这样您可以更好地控制它。

以下知识可能对您有所帮助:

Docker 卷允许将数据存储在引导卷之外的容器中(但在根文件系统中)

通过提供传递给“-v”开关参数的共享名称(例如 /dockerdata),可以使用一个或多个卷创建容器。这具有在代表卷内容的 Docker 配置文件夹 (/var/lib/docker) 中创建实体的效果。

卷的配置数据存储在/var/lib/docker/volumes文件夹中,每个子目录代表一个基于UUID的卷名。数据本身存储在 /var/lib/docker/vfs/dir 文件夹中(同样基于 UUID 名称)。

主机操作系统可以自由浏览和编辑任何卷中的数据,并且标准 Unix 权限适用。

卷的使用有利也有弊。由于数据存储在标准文件系统中,因此可以通过操作系统进行备份、复制或移入移出。

这里的缺点是卷名称是 UUID 格式,这使得与容器名称关联起来很棘手。 Docker 通过提供 "docker cp" 命令使事情变得更容易,该命令允许通过指定容器名称将文件和文件夹从主机目录复制到容器目录路径。

Docker 卷也可以与主机目录相关联。这再次在“-v”开关上指定,使用以冒号分隔主机和容器路径的格式,如下所示:“-v /host:/container”。此方法允许容器访问主机上的持久数据。

因此,可以通过使用卷选项访问在外部存储上创建的主机共享来提供对 NFS 共享或 LUN 上的外部共享存储的访问。此方法也可用于备份容器访问的数据。