目录

docker下升级gitlab

公司的gitlab容器使用的镜像版本为14.1.2,已经是一年前的了。我是个喜新厌旧的人,所以动起了把gitlab升级到最新的念头。从官网上了解到不同版本的gitlab之间有一个升级路径。不遵循这个升级路径,出问题自己后悔去吧。对照当前的版本,我的升级路径如下图:

镜像下载

首先把升级路径上相应版本的镜像都下载下来:

1
2
3
4
5
docker pull gitlab/gitlab-ce:14.3.6-ce.0
docker pull gitlab/gitlab-ce:14.9.5-ce.0
docker pull gitlab/gitlab-ce:14.10.5-ce.0
docker pull gitlab/gitlab-ce:15.0.4-ce.0
docker pull gitlab/gitlab-ce

备份

稳妥起见先做一个备份,万一升级失败可以还原回去,备份的步骤可以参考这里

版本升级

版本升级的原理是基于我的gitlab容器的数据目录独立于容器存在,也即通过映射将gitlab容器数据目录映射到宿主机器某个目录。这样在升级gitlab容器镜像版本的时候,数据可以共用。升级流程如下图:

14.1.2升级到14.3.6为例,首先停止原来的gitlab容器,并重命名为相应版本:

1
2
docker stop gitlab
docker rename gitlab gitlab_14.1.2

然后使用14.3.6版本的gitlab镜像重新运行一个容器,启动参数和原来的容器一样,只是容器名字和镜像版本不一样了:

1
docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab_14.3.6 --restart always -v /data/gitlab/config:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce:14.3.6-ce.0

稍微等待一下,待容器启动好,访问一下gitlab页面,如果功能都正常,说明升级成功。重复上图中的2个步骤,直到容器的镜像版本升级到最新为止。需要注意的是当镜像版本为latest时,用gitlab作为名字运行容器,这样容器名更简单:

1
docker run -d -p 443:443 -p 80:80 -p 222:22 --name gitlab --restart always -v /data/gitlab/config:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab gitlab/gitlab-ce

清理

当容器成功升级到最新版镜像后,可以把升级过程中创建的那些容器都删掉,如下所示:

1
2
3
4
5
docker rm gitlab_14.1.2
docker rm gitlab_14.3.6
docker rm gitlab_14.9.5
docker rm gitlab_14.10.5
docker rm gitlab_15.0.4

旧版本的镜像也可以删掉,首先查看已有的镜像列表:

1
docker image list

下图是我的镜像列表:

/images/2022/08/29/image-list.png

找到gitlab旧版本对应的镜像ID,使用docker rmi命令删除:

1
2
3
4
5
docker rmi 207ad871f9ef
docker rmi 7e6628afc6ac
docker rmi c99393c4ee7f
docker rmi 3d036870c870
docker rmi 7bb60c46d385

至此gitlab升级完毕。