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