环境
Docker version 23.0.3
GitLab Community Edition 15.10.2
Gitlab安装教程

安装GitLab官方推荐至少4G的内存,否则可能会卡顿或者运行非常慢,建议采用4G以上的云服务进行测试,或者本地搭建虚拟机的方式来做。

搜索Gitlab镜像
docker search gitlab
下载Gitlab社区免费版最新镜像

说明:ce 表示社区免费版 ,ee 表示企业付费版

docker pull gitlab/gitlab-ce
运行Gitlab镜像
docker run -d \
--name gitlab \
--restart always \
-p 8443:443 -p 8080:80 -p 8022:22 \
-v /home/gitlab/config:/etc/gitlab \
-v /home/gitlab/logs:/var/log/gitlab \
-v /home/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce

参数说明

  • -d 指定后台运行
  • –hostname 指定主机名
  • –name 指定容器名
  • -p 端口映射;https端口:443;http端口:80;ssh端口:22
  • –restart always 容器停止后的重启策略: 容器退出时总是重启
  • -v 指定挂载存储卷首先在宿主主机创建对应的目录
配置

按上面的方式,gitlab容器运行没问题,但在gitlab上创建项目的时候,生成项目的URL访问地址是按容器的hostname来生成的,也就是容器的id。作为gitlab服务器,我们需要一个固定的URL访问地址,于是需要配置gitlab.rb。
接下来的配置请在容器内进行修改,不要在挂载到宿主机的文件上进行修改。否则可能出现配置更新不到容器内,或者是不能即时更新到容器内,导致gitlab启动成功,但是无法访问


#进容器内部
docker exec -it gitlab /bin/bash
 
#修改gitlab.rb
vi /etc/gitlab/gitlab.rb
 
#加入如下
#gitlab访问地址,可以写域名。如果端口不写的话默认为80端口,这里的端口号要与启动容器时的端口映射相对应
external_url 'http://192.168.124.194'
#ssh主机ip
gitlab_rails['gitlab_ssh_host'] = '192.168.124.194'
#ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 8022
 
# 让配置生效
gitlab-ctl reconfigure
#重启gitlab 
gitlab-ctl restart
#退出容器 
exit

有些博主说还需要修改/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml这个文件中的端口,其实没必要,gitlab-ctl reconfigure这一步已经跟新过来了。

浏览器访问

浏览器访问http://192.168.124.194:8080就可以看到了
在这里插入图片描述
第一次访问,账号是root,密码在容器中/etc/gitlab/initial_root_password或主机/home/gitlab/config/initial_root_password,这个文件24小时后会删除。

修改外部访问端口

修改外部访问端口其实就是修改docker对gitlab容器的端口映射。

方法一: 删除原有容器,重新建新容器

这个解决方案最为简单,把原来的容器删掉,重新建一个。当然这次不要忘记加上端口映射。

# 删除容器
docker rm gitlab
# 构建容器,命令参考上面,注意修改端口号

优缺点:优点是简单快捷,在测试环境使用较多。缺点是如果是数据库镜像,那重新建一个又要重新配置一次,就会比较麻烦。

方法二:修改容器配置文件,重启docker服务

我们需要新增一个端口,就是通过这个方式处理的,亲测有效。
首先关闭docker服务

systemctl stop docker

关闭之后,找到容器的配置文件路径,通常都是安装在这个路径下方

cd /var/lib/docker/containers

然后我们在ls查看一下容器,找我们想要修改的容器ID
进入后有个 hostconfig.json 文件
在这里插入图片描述
如上图所示,文件中其中有一项是PortBindings:

  • 80/tcp对应的是容器内部的80端口,
  • HostPort对应的是映射到宿主机的端口8080。

按需修改端口,然后重启docker服务,再启动容器服务就可以了

systemctl restart docker

优缺点:这个方法的优点是没有副作用,操作简单。缺点是需要重启整个docker服务,如果在同一个宿主机上运行着多个容器服务的话,就会影响其他容器服务。
注意:一定要先停掉docker修改配置才能成功。

方法三:利用docker commit新构镜像

docker commit:把一个容器的文件改动和配置信息commit到一个新的镜像。这个在测试的时候会非常有用,把容器所有的文件改动和配置信息导入成一个新的docker镜像,然后用这个新的镜像重起一个容器,这对之前的容器不会有任何影响。
停止docker容器

docker stop gitlab

commit该docker容器

docker commit gitlab new_gitlab:tag

重新起一个容器

docker run ...

优缺点:这种方式的优点是不会影响统一宿主机上的其他容器,缺点是管理起来显得比较乱,没有第二种方法那么直观

修改root密码
# 进入容器内
gitlab-rails console -e production #等待ruby控制台出来,时间还是挺长的,我等了有十多分钟!

在这里插入图片描述

user = User.where(id: 1).first
user.password="bnadiidphq" #修改密码为bnadiidphq, 密码太简单等下保存不了
user.password_confirmation="bnadiidphq" #确认密码
user.save! #保存,!不能少
quit #退出
注意点

主要是要注意docker跟容器内的端口映射,我们外面访问的端口号,并不是容器中的端口号,通过映射关系才能访问到,如上面的8080端口,映射到容器内的80端口一样。
如果按上面的方式还没成功,建议查看下端口占用情况

netstat -nultp

在这里插入图片描述
还有就是防火墙是否开着,如果开着,就得配置防火墙开放服务器的端口
相关命令如下:

systemctl status firewalld #查看防火墙状态
systemctl start firewalld #开启防火墙
systemctl stop firewalld #关闭防火墙
firewall-cmd --list-ports #查看开放端口
#设置8082-8084端口开放
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --list-ports #再次查看是否开放
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐