在docker中安装gitlab

https://www.cnblogs.com/diaomina/p/12830449.html

拉取gitlab docker镜像

1
docker pull gitlab/gitlab-ce:latest

配置存储

在运行GitLab前,需要先配置本地存储,留给GitLab使用。

可配置一个新的环境变量,$GITLAB_HOME 指向配置、日志和数据文件所在的目录。确保目录存在并且已授予适当的权限。

1
2
export GITLAB_HOME=/srv/gitlab
# 如果嫌麻烦直接使用绝对路径也行,后续我将直接使用绝对路径

主要是以下三个目录需要透出来存储

Local location Container location Usage
$GITLAB_HOME/data /var/opt/gitlab For storing application data.
$GITLAB_HOME/logs /var/log/gitlab For storing logs.
$GITLAB_HOME/config /etc/gitlab For storing the GitLab configuration files.

在相应位置创建好/data,/logs,/config

运行GitLab并运行容器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sudo docker run \
--hostname git.alfredty.com \
-itd \
-p 9980:80 \
-p 9922:22 \
-v /data/gitlab/data:/var/opt/gitlab \
-v /data/gitlab/config:/etc/gitlab \
-v /data/gitlab/logs:/var/log/gitlab \
--restart always \
--shm-size 256m \
--name mygitlab \
gitlab/gitlab-ee

sudo docker run \
-itd \
-p 9980:80 \
-p 9922:22 \
--restart always \
--privileged=true -u root \
--name mygitlab \
gitlab/gitlab-ce

命令解释:
-i 以交互模式运行容器,通常与 -t 同时使用命令解释:

-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用

-d 后台运行容器,并返回容器ID

-p 9980:80 将容器内80端口映射至宿主机9980端口,这是访问gitlab的端口

-p 9922:22 将容器内22端口映射至宿主机9922端口,这是访问ssh的端口

-v /data/gitlab/etc:/etc/gitlab 将容器/etc/gitlab目录挂载到宿主机/data/gitlab/etc:/etc/gitlab目录下,若宿主机内此目录不存在将会自动创建,其他两个挂载同这个一样

–restart always 容器自启动

–privileged=true 让容器获取宿主机root权限

–name gitlab 设置容器名称为gitlab

gitlab/gitlab-ce 镜像的名称,这里也可以写镜像ID

配置修改

进入容器内

1
docker exec -it mygitlab /bin/bash

修改gitlab.rb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 修改gitlab.rb
vi /etc/gitlab/gitlab.rb
## 加入如下
# gitlab访问地址,可以写域名。如果端口不写的话默认为80端口
external_url 'http://git.alfredty.com'
# ssh主机ip
gitlab_rails['gitlab_ssh_host'] = 'git.alfredty.com'
# ssh连接端口
gitlab_rails['gitlab_shell_ssh_port'] = 10088

# 让配置生效
gitlab-ctl reconfigure

# 重启
gitlab-ctl restart
# 退出容器
exit

Root密码

配置好后访问自己的gitlab页面,可以用以下命令获取登陆密码,密码文件将在 24 小时后的第一次重新配置运行中自动删除。

1
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

gitlab-runner

启动

想要使用gitlab的CI/CD功能还需要有一个RUNNER,此为一个单独的docker

注意 -v /var/run/docker.sock:/var/run/docker.sock 不可或缺 这样在容器中装载/var/run/docker.sock,使构建的容器保存在宿主机本身的镜像存储中。

1
2
3
4
docker run -d --name gitlab-runner --restart always \
-v /data/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest

注册

启动一个临时docker注册,配置内容会写入/data/gitlab-runner/config

1
docker run --rm -it -v /data/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register

执行后会要求输入gitlab中的url和令牌

截屏2021-10-15 上午12.15.55

  1. 输入您的 GitLab 实例 URL(也称为gitlab-ci coordinator URL)。
  2. 输入您获得的令牌以注册Runner。
  3. 输入Runner的描述。您可以稍后在 GitLab 用户界面中更改此值。
  4. 输入与 runner 关联标签,用逗号分隔。您可以稍后在 GitLab 用户界面中更改此值。
  5. 提供runner executor。对于大多数用例,请输入 docker
  6. 如果您docker作为执行人输入,系统会要求您提供默认image用于未在.gitlab-ci.yml配置.

注册结束后就可以在管理页面看到Runner了

截屏2021-10-15 上午12.18.57

修改配置

进入/data/gitlab-runner/config,修改config.toml,将volumes改为如下,这样在容器中装载/var/run/docker.sock,使构建的容器保存在宿主机本身的镜像存储中。

1
volumes = ["/var/run/docker.sock:/var/run/docker.sock", "/cache"]

否则可能会报错 gitlab runner Cannot connect to the Docker daemon at unix ///var/run/docker.sock. Is the docker daemon running?