我在我的系统上安装了一个MySQL Docker镜像,配置并启动了一个容器并导入了一个2+ GB(bz2压缩大小)数据库。我想打包整个容器并将其转移到另一个系统上。
如果我停止正在运行的容器并执行导出,它只会生成一个118MB的tar.bz文件。
如果我将容器提交到图像并保存,那么它也只会生成一个118MB的tar.bz文件。
导出/保存整个容器(包括MySQL数据)的方法是什么? MySQL图像为383.4MB,我的修改后的图像也是一样。
我找到了一些追踪:How can I backup a Docker-container with its data-volumes?
另外:目前我使用的是Ubuntu Linux风格。
答案 0 :(得分:1)
查找与容器匹配的数据存储位置(作为sudo用户,您可以访问/ var / lib / docker / volumes / {container_id},/ var / lib / docker / vfs / dir / { CONTAINER_ID})
将数据与容器一起移动到您要运行的位置。
启动容器时使用卷映射,以便您可以对其进行更多控制。
以下知识可能对您有所帮助:
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”。此方法允许容器访问主机上的持久数据。
因此,可以使用volume选项访问在外部存储上创建的主机共享,从而提供对NFS共享或LUN上的外部共享存储的访问。此方法还可用于备份容器访问的数据。