2016-11-08 202 views
0

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

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

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

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


,我发现了一些线索:How can I backup a Docker-container with its data-volumes?


增加:目前我使用的是Ubuntu Linux操作系统的味道。

+0

您是否使用标准的MySQL映像?如果是这样,你是否碰巧将卷映射到容器外的任何东西? – R0MANARMY

+0

我从标准的MySQL包开始,只改变了mysqld.cnf中的一个设置,以便导入我保存的数据库。我没有对卷映射本身做任何配置,Hy L的答案看起来不错,我很快就会检查。 –

+0

我也会看看[cp](https://docs.docker.com/engine/reference/commandline/cp/)命令。我还没有试过看它是否会将数据复制出主机或不是 – R0MANARMY

回答

1
  1. 寻找到数据存储符合您的容器(如一个sudo的用户,您可以访问的/ var/lib中/泊坞窗/卷/ {CONTAINER_ID},在/ var/lib中/泊坞窗/ VFS/DIR/{container_id})

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

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

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

泊坞窗卷证数据启动卷(但根文件系统内)的外部存储在一个容器中。

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

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

在任何体积的数据可以是自由浏览和由主机操作系统编辑和标准的Unix权限适用。

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

缺点这里是卷名称是UUID格式,这使得与容器名称关联很棘手。通过提供“docker cp”命令,Docker可以让事情变得更轻松,通过指定容器名称,可以将文件和文件夹从主机目录复制到容器目录路径。

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

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