如何导出/保存整个Docker容器/图像

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

如果我停止正在运行的容器并执行导出,则只产生一个118MB的tar.bz文件。

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

如何导出/保存整个容器,包括MySQL数据? MySQL的图像是383.4MB,我的修改后的图像也是一样的。


我find了一些线索: 我如何备份一个Docker-container与它的数据卷?


另外:目前我正在使用Ubuntu Linux风格。

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

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

  3. 启动容器时使用卷映射,因此可以对其进行更多的控制。

以下是可能对您有用的知识:

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

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

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

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

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

这里的缺点是卷名是UUID格式的,这使得与容器名称关联变得非常棘手。 通过提供“docker cp”命令,Docker通过指定容器名称允许将文件和文件夹从主机目录复制到容器目录path,从而使事情变得更加简单。

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

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