我已经在一台主机上部署了一个genezys/gitlab扩展坞镜像:
docker run --name gitlab_data genezys/gitlab:7.5.2 /bin/true
docker run --detach --name gitlab --publish 8080:80 --publish 2222:22 --volumes-from gitlab_data genezys/gitlab:7.5.2
现在我想备份代码库,以防主机崩溃。
我对备份策略有点困惑:既然我已经创建了用于存储的gitlab_data
容器,我应该备份整个gitlab_data
docker镜像吗?或者我只是使用gitlab rake
来备份代码库?或者还有更好的方法吗?
发布于 2015-05-04 17:41:19
应该只需要official backup process。
镜像的备份不应该:您只需使用正确的参数再次停靠运行同一镜像即可恢复应用程序:
docker run --name=gitlab -it --rm [OPTIONS] \
sameersbn/gitlab:7.10.1 app:rake gitlab:backup:restore
备份图像没有实际意义:图像应该只是应用程序,可以使用docker save保存和导出。任何持久数据都应单独备份。
另外:
保存应用程序备份(如app:rake
任务)与“保存映像”(a image )不同(映像只是一个文件系统)。
在执行应用程序备份(此处为app:rake
)时,您可以执行其他工作,以确保要备份的数据的一致性和完整性。您并不是简单地压缩folders.
您不能通过将docker容器备份到docker镜像来备份您的git存储库...因为gitlab镜像为
/home/git/data
和/var/log/gitlab
定义了卷。
因此,写入停靠容器中这些路径的任何数据都不会写入停靠容器文件系统。因此,docker export
或docker commit
命令将不包含这些路径的内容
在数据容器的情况下,OP添加:
我使用
docker commit
将gitlab_data
容器保存为新镜像,然后使用新镜像作为卷重新启动gitlab容器,但发现所有以前的数据都不存在(包括代码库)。
您不能用“新的(数据)镜像”重启gitlab :您需要从提交的gitlab_data_image
创建一个容器,然后使用从提交的gitlab_data_image
创建的new_gitlab_data
容器重启gitlab。
docker create --name="new_gitlab_data" gitlab_data_image
docker run gitlab --volumes-from=new_gitlab_data
发布于 2015-05-07 09:43:47
其他信息:
从“数据容器”存储在卷上的数据实际上并不“在”容器中。它实际上位于主机上的一个不明显的目录中。因此,数据容器的docker commit
不包括存储在卷上的数据。
要备份Docker数据容器中的数据,应从主机装载卷,并使用--volumes-from your_data_container
访问数据容器数据。然后从数据容器复制到已装载的主机卷。该过程在Docker docs中有更详细的描述,但以下是一个速记版本:
docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdatadir
其中"dbdata“是您的数据容器,"dbdatadir”是要在容器中备份的数据的位置。
https://stackoverflow.com/questions/30026591
复制相似问题