我使用Docker Community Edition(CE)并在我的centos 7.4上运行
我只想问一下我是否要备份Docker容器。
现在,我已经备份了与docker相关的完整目录。
我也在网络上找到了它,有很多方法可以导出容器进行备份,但是它需要更新容器的备份列表(因为将有新的docker,容器将不断创建),否则,新容器,不会备份docker。
因此,我想问一下备份完整目录的好方法吗?
答案 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
映射到备份。