获取 docker 镜像
docker pull gitlab/gitlab-ce:latest
宿主机上准备 3 个目录,和 docker 容器共享,用于存放 gitlab 的数据
mkdir /home/tanrui/gitlab-server/config
mkdir /home/tanrui/gitlab-server/logs
mkdir /home/tanrui/gitlab-server/data
创建容器:
docker run \
-itd \
-p 9980:80 \
-p 9922:22 \
-v /home/tanrui/gitlab-server/config:/etc/gitlab \
-v /home/tanrui/gitlab-server/logs:/var/log/gitlab \
-v /home/tanrui/gitlab-server/data:/var/opt/gitlab \
--restart always \
--privileged=true \
--name gitlab3 \
gitlab/gitlab-ce:latest
# -p 9980:80 宿主机的 9980 端口映射到 docker 的 80 端口
# -v /home/tanrui/gitlab-server/config:/etc/gitlab
# 宿主机的 /home/tanrui/gitlab-server/config 目录映射到 docker 的 /etc/gitlab
# --restart always 容器自启动
# --privileged=true 让容器获取宿主机root权限
# --name gitlab 设置容器名称为gitlab
# gitlab/gitlab-ce:latest 镜像的名称,这里也可以写镜像ID
进入容器:
docker exec -it gitlab /bin/bash
修改 gitlab 配置文件 /etc/gitlab/gitlab.rb:
external_url 'http://192.168.3.4' # 宿主机的 ip,默认 80 端口
## ssh 默认22端口,可以用后文方法更改,主要是解决克隆工程
#gitlab_rails['gitlab_ssh_host'] = '192.168.3.4'
#gitlab_rails['gitlab_shell_ssh_port'] = 9922
执行:
gitlab-ctl reconfigure
网页上即可访问:http://192.168.3.4:9980
修改 root 密码:
# 进入容器内部
docker exec -it gitlab /bin/bash
# 进入控制台
gitlab-rails console -e production
# 查询id为1的用户,id为1的用户是超级管理员
u = User.where(id:1).first
# 修改密码为tr123456
u.password='tr123456'
# 保存
u.save! # !!!这里有感叹号
# 退出
exit
在页面中,克隆工程有 SSH 和 HTTP,克隆失败主要时端口映射的问题:例如 SSH,显示的 clone 地址是:git@192.168.3.4:root/first.git,默认是访问 22 端口,由于创建 docker 容器的时候指定了端口映射:主机 9922 >>> docker 22,所以要更改访问的端口:ssh://git@192.168.3.4:9922/root/first.git。HTTP 的 clone 一样会有问题。解决这个问题可以修改文件:/opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml:
gitlab:
## Web server settings (note: host is the FQDN, do not include http://)
host: 192.168.3.4
port: 9980 # http 的端口(和 docker 映射一致)
https: false
# ....
ssh_port: 9922 # ssh 的端口(和 docker 映射一致)
修改后重启 gitlab-ctl restart,然后在页面上就可看见 clone 地址的变化。
注意:不要 gitlab-ctl reconfigure !因为重新配置之后上面修改的会被冲掉!