在 Docker 中使用 GitLab

“LOST TIME IS NEVER FOUND AGAIN.”BENJAMIN FRANKLIN

“岁月既往,一去不回。”本杰明·富兰克林

小引

上一篇中,我介绍了如何在 Docker 中使用 MySQL,最近我们的项目版本管理也逐渐从 SVN 迁移到 Git 上,所以本文我将介绍如何利用 Docker 来快速搭建企业内部的 GitLab。

简介

大家都知道 GitHub 是利用 Git 做的一个线上代码版本管理工具,该工具免费版的代码库全部都是公开的,如果想要使用私有库,那只有付费才行。而 GitLab 的初衷则是提供给企业或者个人搭建内部的代码版本管理工具,并且具有与 GitHub 相似的功能。虽然我们有多种方法来搭建自己的 Git 库,但是这里我推荐大家借助 GitLab 来搭建。GitLab 有很丰富的功能(Git 版本管理、文件浏览、WIKI、Code Review、Issue 管理、Code Snippets、Web Hooks、CI、CD等)。

下面的内容假设大家已经安装好了 DockerDocker Compose。Docker Compose 是用来定义并运行多个 Docker 容器的 – Docker 集群管理。有了 Docker Compose,我们就不用手动执行多条命令来启动一个一个的容器,并建立容器间的关系,只需要一条命令就完成所有服务的创建和运行。

下面就开始吧!

1. 下载 Compose 文件并修改配置

Docker hub 中有许多 GitLab 镜像,比如 GitLab 官方提供的 gitlab/gitlab-ce,该镜像包含了运行 GitLab 所需的所有内容,只需要这一个镜像就能使用 GitLab。而由 sameersbn 提供的 sameersbn/gitlab 则将 GitLab 分成了三个不同的镜像:数据库、日志、GitLab 服务,这样做的好处便于解耦,以及符合 Docker 的设计原理:轻量级、单一的镜像功能。在此,我们使用 sameersbn/gitlab,并结合提供的 Docker Compose 文件来启动 GitLab。

首先是将docker-compose.yml文件下载到本机,如下代码所示:

wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml

下载完成之后,在文件中,我们可以看到 GitLab 的很多配置都已经参数化了,包数据卷的配置、服务的端口、备份时机和邮件配置等。

在这里我利用 vi 将其中的 volumes 做适当的修改,存储至如下路径:

1
/Users/BeyondVincent/docker/gitlab/

我修改后的完整代码可以来这里参考

2. 启动 GitLab

下一步,修改完 docker-compose.yml,我们就可以利用如下一行命令来启动 GitLab 了。

docker-compose up

上面的这行命令,首先会下载相关的镜像,然后依次创建并启动容器。如下图所示:

当启动完成之后,我们就可以在浏览器中输入http://localhost:10080,如果能正确打开,那么说明 GitLab 创建启动成功。如下图所示:

3. 停止 GitLab

执行下面这条命令就可以将 GitLab 停止。

docker-compose stop

4. 备份

数据的备份历来都是很重要,平时如果不注重备份,服务器不出问题还好,要是服务器挂了,后果很严重。sameersbn/gitlab 的备份使用如下命令即可完成:

docker-compose run gitlab app:rake gitlab:backup:create

该命令执行完之后,会在 gitlab 的 backups 目录生成一个以当前时间戳为前缀的压缩文件(例如 1474228372_gitlab_backup.tar),这个文件就是备份文件(整个库都已经备份在这个文件中)。完成备份文件的创建之后,记得将该文件备份至另外一个地方。

5. 从备份中还原

docker-compose run –rm gitlab app:rake gitlab:backup:restore BACKUP=1474228372

在上面的命令中,1474228372 为备份文件的时间戳前缀,该文件位于 gitlab 的 backups 目录中。同样,一条命令就可以完成还原。

6. 加速器

由于网络问题,如果你的镜像下载很慢,超出忍受范围,那么建议使用 DaoCloud 提供的加速器

7. 小结

如果说 GitLab 让我们感受到了世界上有真正免费的午餐,那么 Docker 则让我们的生命得以延续。让我们尽情享受这一切美好的世界吧!