我一直在使用这个Docker-image Tutum/Wordpress来演示一个Wordpress网站。最近,我发现该映像使用了mysql数据的卷。
所以问题是这样的:如果我想备份和恢复容器,我可以尝试提交一个映像,然后删除容器,并从提交的映像创建一个新的容器。但如果我这样做了,卷就会被删除,我的所有数据都没有了。
一定有一些简单的方法来备份我的容器加上它的卷数据,但我在任何地方都找不到。
如果我想还原容器,我可以尝试提交一个映像,然后删除容器,并从提交的映像创建一个新容器。但如果我这样做了,卷就会被删除,我的所有数据都消失了
正如docker用户指南所解释的那样,数据卷意味着将数据持久化到容器文件系统之外。这也简化了多个容器之间的数据共享。
虽然Docker永远不会删除卷中的数据(除非使用Docker rm-v
删除关联的容器),但未被任何Docker容器引用的卷称为悬空卷。那些悬空的卷很难摆脱,也很难访问。
这意味着,一旦删除了使用卷的最后一个容器,数据卷就会变得悬空,并且难以访问其内容。
为了防止这些悬空卷,诀窍是使用您想要持久化的数据卷创建一个附加的docker容器,以便始终至少有那个docker容器引用该卷。这样,您就可以删除运行wordpress应用程序的docker容器,而不会失去访问该数据量内容的便利性。
这样的容器称为数据量容器。
一定有一些简单的方法来备份我的容器加上卷数据,但我在任何地方都找不到。
要备份docker映像,请使用docker save命令,该命令将生成一个tar存档文件,以后可以使用docker load命令创建一个新的docker映像。
您可以通过不同的方法备份docker容器
请注意,这些命令将只备份docker容器分层文件系统。这不包括数据卷。
要备份数据卷,可以使用要备份的卷运行新容器,并执行tar命令以生成卷内容的存档,如docker用户指南中所述。
在您的特定情况下,数据卷用于存储MySQL服务器的数据。因此,如果您想为这个卷导出一个tar存档,您将需要首先停止MySQL服务器。为此,您必须停止wordpress容器。
另一种方法是远程连接到MySQL服务器,使用mysqldump命令生成数据库转储。但是,为了使其正常工作,您的MySQL服务器必须配置为接受远程连接,并且还必须有一个允许远程连接的用户。您正在使用的wordpress docker图像可能不是这种情况。
Docker最近推出了Docker卷插件,允许将卷的处理委托给供应商实现的插件。
Docker run
命令具有-v
选项的新行为。现在可以向它传递卷名。以这种方式创建的卷被命名,便于以后引用,从而缓解了卷悬空的问题。
Docker引入了Docker volume Prune
命令来轻松删除所有悬空卷。