进行docker备份的方法是什么?

时间:2018-07-30 09:05:55

标签: docker dockerfile

我使用Docker Community Edition(CE)并在我的centos 7.4上运行

我只想问一下我是否要备份Docker容器。

现在,我已经备份了与docker相关的完整目录。

我也在网络上找到了它,有很多方法可以导出容器进行备份,但是它需要更新容器的备份列表(因为将有新的docker,容器将不断创建),否则,新容器,不会备份docker。

因此,我想问一下备份完整目录的好方法吗?

2 个答案:

答案 0 :(得分:1)

最好的方法是确保正在运行的容器中没有任何实际重要性,并且没有任何内容仅存在于/var/lib/docker中。这意味着:

  • 启动容器时,请确保将实际命令记录在某处(例如shell脚本或Docker Compose YAML文件)并检入源代码管理。

  • 切勿“执行到容器中并安装软件”。了解Dockerfile系统,使用docker build创建自定义图像,并将Dockerfile检查到源代码管理中。如果可以,请将实际映像推送到某个存储库服务器(Docker Hub,AWS ECR,您自己运行的东西)。

  • 设计您的应用程序,使其尽可能不存储在容器中。常见的是“远程”数据库(可以在另一个容器中;可以在专用服务器上)。这不仅有助于备份情况,而且使运行一个容器的多个副本变得更加容易。

  • 如果您的容器确实具有持久性存储(也许是数据库),请使用docker run -v在Docker树之外的主机系统上为其指定位置。

  • 请勿使用docker commit;如果需要更改图像,请更新Dockerfile,签入并重建图像。

如果所有这些都有效,那么您可能会丢失所有/var/lib/docker,这无关紧要。您应该能够通过启动新的VM并在那里重新创建系统状态来进行测试。已经为您自己证明了这一点,请从备份中排除/var/lib/docker,因为它很大并且仅包含您可以复制和重新加载的数据。

答案 1 :(得分:0)

一种方法是commit Containers并从其中创建Docker Images,然后使用docker save命令为Docker Images检索tar文件。之后,您可以使用docker load命令重新加载保存的Docker Images。这样,您从Containers创建的所有Docker Image都是原始Containers的备份。

但是我认为更优雅的方法是在创建Container时使用Volumes。这样,您可以从Volumes创建备份,以后在需要时可以创建Containers,其中Volumes映射到备份。