为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 export
或docker 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”是您要在容器中备份的数据的位置。
- 使用gitlab-ci和gitlab-runner的Docker端口绑定
- 当docker-volume或服务器数据被重新创build时,如何再一次推入gitlab?
- 为什么主机总是响应`RST`虽然服务器正在监听端口?
- 无法为gitlab-ci运行构build
- 为什么没有使用“docker run image command”启动容器的日志?
- gitlab-ci-runnerselect执行者“请input执行者:”
- 你如何configurationGitlab CIdockertesting不同的需求(语言环境,数据库等)?
- 我如何让gitlab-ci-runner的DinD图像caching中间图像?
- 无法访问docker中的gitlab存储库