第一步創(chuàng)建3個(gè)掛載卷
mkdir -p /home/gitlab/etc/gitlab
mkdir -p /home/gitlab/var/log
mkdir -p /home/gitlab/var/opt
接著創(chuàng)建鏡像,注意,這里端口映射要一模一樣,不然克隆時(shí)候容器內(nèi)部還是用80端口,外面用的是8090,就會(huì)需要你自己手動(dòng)添加端口號(hào)到url上很麻煩。
docker run
-d #后臺(tái)運(yùn)行,全稱:detach
-p 8443:443 #將容器內(nèi)部端口向外映射
-p 8090:8090 #將容器內(nèi)8090端口映射至宿主機(jī)8090端口,這是訪問(wèn)gitlab的端口
-p 8022:8022 #這是訪問(wèn)ssh的端口
--restart always #容器自啟動(dòng)
--name gitlab #設(shè)置容器名稱為gitlab
-v /home/gitlab/etc/gitlab:/etc/gitlab #將容器/etc/gitlab目錄掛載到宿主機(jī)/usr/local/gitlab/etc目錄下,若宿主機(jī)內(nèi)此目錄不存在將會(huì)自動(dòng)創(chuàng)建
-v /home/gitlab/var/log:/var/log/gitlab #與上面一樣
-v /home/gitlab/var/opt:/var/opt/gitlab #與上面一樣
--privileged=true #讓容器獲取宿主機(jī)root權(quán)限
gitlab/gitlab-ce:15.9.1-ce.0 #鏡像的名稱,這里也可以寫(xiě)鏡像ID
docker run -d -p 8443:443 -p 8090:8090 -p 8022:8022 --restart always --name gitlab -v /home/gitlab/etc/gitlab:/etc/gitlab -v /home/gitlab/var/log:/var/log/gitlab -v /home/gitlab/var/opt:/var/opt/gitlab --privileged=true gitlab/gitlab-ce:15.9.3-ce.0
按上面的方式,gitlab容器運(yùn)行沒(méi)問(wèn)題,但是訪問(wèn)8090卻打不開(kāi),這是因?yàn)槲矣成涞氖?090=》8090
因?yàn)間itlab上創(chuàng)建項(xiàng)目的時(shí)候,生成項(xiàng)目的URL訪問(wèn)地址是按容器的hostname來(lái)生成的,也就是容器的id。
作為gitlab服務(wù)器,我們需要一個(gè)固定的URL訪問(wèn)地址,于是需要配置gitlab.rb(原路徑etc下,宿主機(jī)路徑:/home/gitlab/etc/gitlab/gitlab.rb)。
external_url 'http://12012.436.179.111:8090'
gitlab_rails['encoding'] = "utf-8"
gitlab_rails['gitlab_ssh_host'] ='http://12012.426.1759.1341'
gitlab_rails['gitlab_shell_ssh_port'] = 8022
這幾行就把原本的80端口改成了8090和8022,上文的同端口映射就是這個(gè)原因。這樣保證了容器內(nèi)外都是用的相同端口
修改賬號(hào)密碼
如果報(bào)錯(cuò)打不開(kāi),可以docker log gitlab進(jìn)去看看報(bào)什么錯(cuò)了,不同版本的gitlab.rb是不一樣的,經(jīng)常不兼容,注意關(guān)掉restart always不然看不到error在哪。
# 進(jìn)入容器內(nèi)部
docker exec -it gitlab /bin/bash
# 進(jìn)入控制臺(tái)
gitlab-rails console -e production
# 查詢id為1的用戶,id為1的用戶是超級(jí)管理員
user = User.where(id:1).first
# 修改密碼
user.password='!Aa123qweA?'
# 保存 如果報(bào)錯(cuò)就是密碼太簡(jiǎn)單搞復(fù)雜一點(diǎn)
user.save!
# 退出
exit;
docker restart gitlab