为gitlab docker镜像备份代码库的适当策略是什么?

我已经在主机上部署了一个genezys / gitlab docker镜像:

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 

现在我想备份代码库,以防主机崩溃。

我有点困惑的备份策略:因为我已经创build了gitlab_data容器的存储目的,我应该备份整个gitlab_data泊坞窗图像? 或者我只是使用gitlab rake来备份代码库? 还是有更好的方法?

只需要正式的备份过程 。

图像的备份不应该:只有docker再次运行相同的图像,用正确的参数来恢复应用程序:

 docker run --name=gitlab -it --rm [OPTIONS] \ sameersbn/gitlab:7.10.1 app:rake gitlab:backup:restore 

备份映像并不合理:映像只能是应用程序,可以通过docker save进行保存和导出。 任何持久数据都应该独立备份。
加:

  • 应用程序备份(如app:rake任务)与“保存图像”不同(图像只是一个文件系统)。
    当您执行应用程序备份( app:rake here)时,您可以执行额外的作业,以确保您要备份的数据的一致性和完整性。 你不是简单地压缩文件夹。
  • Thomasleveil补充说 :

你不能通过将docker容器备份到docker镜像来备份你的git仓库…因为gitlab镜像定义了/home/git/data/var/log/gitlab
因此,写入docker容器中的这些path的任何数据都不会写入泊坞窗容器文件系统中。 因此, docker exportdocker commit命令将不包含这些path的内容

在数据容器的情况下,OP增加:

我使用gitlab_data docker commit来保存gitlab_data容器作为一个新的图像,然后重新启动gitlab容器使用新的图像作为一个卷,但find所有以前的数据不存在(包括代码库)。

你不用“新的(数据)映像”来重启gitlab:你需要从你提交的gitlab_data_image创build一个容器,然后使用从提交的gitlab_data_image创build的new_gitlab_data容器重新启动gitlab_data_image

 docker create --name="new_gitlab_data" gitlab_data_image docker run gitlab --volumes-from=new_gitlab_data 

附加信息:

从“数据容器”存储在卷上的数据实际上不在容器中。 它实际上在主机上的一个不明显的目录中。 因此,数据容器的docker commit不包括存储在卷上的数据。

要备份来自Docker数据容器的数据,您应该从主机装入一个卷,并使用--volumes-from your_data_container来访问数据容器数据。 然后从数据容器复制到挂载的主机卷。 该过程在Docker文档中有更详细的描述,但是这里是一个简写版本:

 docker run --volumes-from dbdata -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdatadir 

其中“dbdata”是您的数据容器,“dbdatadir”是您要在容器中备份的数据的位置。