GitLab Docker鏡像的說明
GitLab CE和EE都在Docker Hub中:
- GitLab CE Docker鏡像
- GitLab EE Docker鏡像
GitLab Docker鏡像是在單個容器上運作所有必需服務的GitLab的整體鏡像。
在以下示例中,我們使用的是GitLab CE的圖像。要使用GitLab EE而不是GitLab CE,請将圖像名稱替換為
gitlab/gitlab-ee:latest
。
如果要使用最新的RC鏡像,請分别對GitLab CE和GitLab EE 使用
gitlab/gitlab-ce:rc
或
gitlab/gitlab-ee:rc
。
GitLab Docker鏡像可以多種方式運作:
- 在Docker Engine中運作鏡像
- 将GitLab安裝到叢集中
- 使用docker-compose安裝GitLab
先決條件
需要安裝Docker,請參閱官方安裝文檔。
注意: 為了使用持久化的卷,建議使用本機Docker安裝而不是Docker Toolbox。
注意: 我們不正式支援在Windows版Docker上運作。卷權限存在已知問題,并且可能還有其他未知問題。如果您嘗試在Windows的Docker上運作,請參閱我們的“ 獲得幫助”頁面,以擷取指向社群資源(IRC,論壇等)的連結,以尋求其他使用者的幫助。
運作圖像
運作圖像:
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
這将下載下傳并啟動一個GitLab CE容器,并釋出通路SSH,HTTP和HTTPS所需的端口。所有的GitLab資料都将存儲為
/srv/gitlab/
的子目錄。系統重新開機後,容器将自動運作
restart
。
現在,您可以按照啟動容器後中所述登入Web界面 。
如果您使用的是SELinux,請改為運作以下指令:
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab:Z \
--volume /srv/gitlab/logs:/var/log/gitlab:Z \
--volume /srv/gitlab/data:/var/opt/gitlab:Z \
gitlab/gitlab-ce:latest
這将確定Docker程序具有足夠的權限在已安裝的卷中建立配置檔案。
如果您正在使用Kerberos內建,則還需要釋出Kerberos端口(例如
--publish 8443:8443
)。
否則将阻止通過Kerberos進行Git操作。
資料存儲在哪裡?
GitLab容器使用主機安裝的卷來存儲持久資料:
當地位置 | 容器位置 | 用法 |
---|---|---|
/srv/gitlab/data | /var/opt/gitlab | 用于存儲應用程式資料 |
/srv/gitlab/logs | /var/log/gitlab | 用于存儲日志 |
/srv/gitlab/config | /etc/gitlab | 用于存儲GitLab配置檔案 |
您可以微調這些目錄以滿足您的要求。
配置GitLab
該容器使用官方的Omnibus GitLab軟體包,是以所有配置都在唯一的配置檔案中完成
/etc/gitlab/gitlab.rb
。
要通路GitLab的配置檔案,可以在運作容器的上下文中啟動Shell會話。這将允許您浏覽所有目錄并使用您喜歡的文本編輯器:
sudo docker exec -it gitlab /bin/bash
您也可以編輯
/etc/gitlab/gitlab.rb
:
sudo docker exec -it gitlab editor /etc/gitlab/gitlab.rb
打開
/etc/gitlab/gitlab.rb
後,請確定将設定external_url為指向有效的URL。
要從GitLab接收電子郵件,您必須配置 SMTP設定,因為GitLab Docker鏡像未安裝SMTP伺服器。
您可能還對啟用HTTPS感興趣。
完成所需的所有更改後,您将需要重新啟動容器以重新配置GitLab:
sudo docker restart gitlab
注意: 每當容器啟動時,GitLab都會重新配置自身。
有關配置GitLab的更多選項,請檢視 Omnibus GitLab文檔。
預配置Docker容器
您可以通過将環境變量添加
GITLAB_OMNIBUS_CONFIG
到docker run指令來預配置GitLab Docker鏡像。此變量可以包含任何
gitlab.rb
設定,并且将在加載容器的gitlab.rb檔案之前進行評估。這樣,您可以輕松配置GitLab的外部URL,從Omnibus GitLab模闆進行任何資料庫配置或任何其他選項 。
注意:其中包含的設定
GITLAB_OMNIBUS_CONFIG
不會寫入
gitlab.rb
配置檔案,它們會在加載時進行評估。
這是一個在啟動容器時設定外部URL并啟用LFS的示例:
sudo docker run --detach \
--hostname gitlab.example.com \
--env GITLAB_OMNIBUS_CONFIG="external_url 'http://my.domain.com/'; gitlab_rails['lfs_enabled'] = true;" \
--publish 443:443 --publish 80:80 --publish 22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
請注意,每次執行docker run指令時,都需要提供該
GITLAB_OMNIBUS_CONFIG
選項。
GITLAB_OMNIBUS_CONFIG
的内容是 不保留後續運作之間。
啟動容器後
啟動容器後,您可以通路,http://localhost/或者 http://192.168.59.103使用boot2docker。Docker容器可能需要一段時間才能開始響應查詢。
注意: 初始化過程可能需要很長時間。您可以使用以下指令跟蹤此過程
sudo docker logs -f gitlab
首次通路GitLab時,将要求您設定管理者密碼。更改後,可以使用使用者名root和設定的密碼登入。
将GitLab更新到較新版本
要将GitLab更新到新版本,您必須:
- 停止正在運作的容器:
sudo docker stop gitlab
- 删除現有容器:
sudo docker rm gitlab
- 拉新圖像:
sudo docker pull gitlab/gitlab-ce:latest
- 使用先前指定的選項再次建立容器:
sudo docker run --detach \ --hostname gitlab.example.com \ --publish 443:443 --publish 80:80 --publish 22:22 \ --name gitlab \ --restart always \ --volume /srv/gitlab/config:/etc/gitlab \ --volume /srv/gitlab/logs:/var/log/gitlab \ --volume /srv/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
在第一次運作時,GitLab将重新配置并自我更新。
使用标記版本的GitLab
我們提供标記版本的GitLab Docker鏡像。
要檢視所有可用标簽,請檢查:
- GitLab-CE标簽和
-
GitLab-EE标簽
要使用特定的标記版本,請替換
為要運作的GitLab版本gitlab/gitlab-ce:latest
。gitlab/gitlab-ce:12.1.3-ce.0
在公共IP位址上運作GitLab CE
您可以通過修改
--publish
标志使Docker使用您的IP位址并将所有流量轉發到GitLab CE容器。
要在IP 198.51.100.1上公開GitLab CE:
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 198.51.100.1:443:443 \
--publish 198.51.100.1:80:80 \
--publish 198.51.100.1:22:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
然後,您可以在http://198.51.100.1/和https://198.51.100.1/通路GitLab執行個體。
在不同的端口上暴露GitLab
GitLab将占用 容器内的某些端口。
如果要使用與80(HTTP)或443(HTTPS)不同的主機端口,則需要在
docker run
指令中添加單獨的
--publish
指令。
例如,要在port上公開Web界面,在port上公開8929SSH服務2289,請使用以下docker run指令:
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 8929:8929 --publish 2289:22 \
--name gitlab \
--restart always \
--volume /srv/gitlab/config:/etc/gitlab \
--volume /srv/gitlab/logs:/var/log/gitlab \
--volume /srv/gitlab/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
注意: 釋出端口的格式為 hostPort:containerPort
。在Docker文檔中閱讀更多有關公開傳入端口的資訊。
然後,您需要适當地配置gitlab.rb:
- 設定external_url:
此URL中指定的端口必須與Docker釋出到主機的端口比對。此外,請注意,除非在中顯式設定了NGINX偵聽端口,否則nginx[‘listen_port’]将從該URL中提取該端口。有關更多資訊,請參見NGINX文檔。# For HTTP external_url "http://gitlab.example.com:8929" or # For HTTPS (notice the https) external_url "https://gitlab.example.com:8929"
- 設定gitlab_shell_ssh_port:
gitlab_rails['gitlab_shell_ssh_port'] = 2289
按照上面的示例,您将能夠從Web浏覽器下通路GitLab,:8929并在端口下使用SSH進行推送2289。
在docker-compose節,有使用不同的端口的例子
docker-compose.yml
。
診斷潛在問題
讀取容器日志:
sudo docker logs gitlab
輸入運作容器:
sudo docker exec -it gitlab /bin/bash
在容器内,您可以像通常管理Omnibus安裝一樣管理GitLab容器
使用docker-compose安裝GitLab
使用Docker compose,您可以輕松配置,安裝和更新基于Docker的GitLab安裝。
- 安裝 Docker Compose
- 建立一個
檔案(或下載下傳一個示例):docker-compose.yml
web: image: 'gitlab/gitlab-ce:latest' restart: always hostname: 'gitlab.example.com' environment: GITLAB_OMNIBUS_CONFIG: | external_url 'https://gitlab.example.com' # Add any other gitlab.rb configuration here, each on its own line ports: - '80:80' - '443:443' - '22:22' volumes: - '/srv/gitlab/config:/etc/gitlab' - '/srv/gitlab/logs:/var/log/gitlab' - '/srv/gitlab/data:/var/opt/gitlab'
- 確定您
與docker-compose.yml
位于同一目錄并運作 以啟動它docker-compose up -dGitLab
閱讀“預配置Docker容器”以了解GITLAB_OMNIBUS_CONFIG變量的工作方式。
下面是
docker-compose.yml
在自定義HTTP和SSH端口上運作GitLab的另一個示例。注意
GITLAB_OMNIBUS_CONFIG
變量如何比對該 ports部分:
web:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'gitlab.example.com'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://gitlab.example.com:8929'
gitlab_rails['gitlab_shell_ssh_port'] = 2224
ports:
- '8929:8929'
- '2224:22'
volumes:
- '/srv/gitlab/config:/etc/gitlab'
- '/srv/gitlab/logs:/var/log/gitlab'
- '/srv/gitlab/data:/var/opt/gitlab'
這與使用
--publish 8929:8929 --publish 2224:22
相同。
使用Docker compose更新GitLab
假設您使用
docker-compose
安裝了GitLab,則隻需運作
docker-compose pull
并
docker-compose up -d
下載下傳新版本并更新GitLab執行個體即可。
在Docker群中部署GitLab
借助Docker swarm,您可以輕松地在群集叢集中配置和部署基于Docker的GitLab安裝。
在群模式下,您可以利用 Docker secrets 和Docker configs有效而安全地部署您的GitLab執行個體。機密資訊可用于安全地傳遞您的初始root密碼,而無需将其暴露為環境變量。配置可以幫助您保持GitLab鏡像盡可能通用。
這是一個使用秘密和配置将GitLab與四個跑步者作為一個堆棧部署的示例:
- 設定一個Docker群
- 建立一個
檔案:docker-compose.yml
為了簡單起見,省略了network配置。可以在正式的Compose檔案參考中找到更多資訊。version: "3.6" services: gitlab: image: gitlab/gitlab-ce:latest ports: - "22:22" - "80:80" - "443:443" volumes: - /srv/gitlab/data:/var/opt/gitlab - /srv/gitlab/logs:/var/log/gitlab - /srv/gitlab/config:/etc/gitlab environment: GITLAB_OMNIBUS_CONFIG: "from_file('/omnibus_config.rb')" configs: - source: gitlab target: /omnibus_config.rb secrets: - gitlab_root_password gitlab-runner: image: gitlab/gitlab-runner:alpine deploy: mode: replicated replicas: 4 configs: gitlab: file: ./gitlab.rb secrets: gitlab_root_password: file: ./root_password.txt
- 建立一個
檔案:gitlab.rb
external_url 'https://my.domain.com/' gitlab_rails['initial_root_password'] = File.read('/run/secrets/gitlab_root_password')
- 建立一個root_password.txt檔案:
MySuperSecretAndSecurePass0rd!
- 確定您與以下目錄位于同一目錄
并運作:docker-compose.yml
docker stack deploy --compose-file docker-compose.yml mystack
将GitLab安裝到叢集中
GitLab Docker鏡像也可以部署到各種容器排程平台。
- 使用GitLab Helm Charts的 Kubernetes 。
- 使用DC / OS軟體包的 Mesosphere DC / OS 。
- 使用docker-compose config的 Docker Cloud 。
故障排除
500内部錯誤
更新Docker鏡像時,您可能會遇到一個問題,即所有路徑都顯示臭名昭著的500頁。如果發生這種情況,請嘗試運作
sudo docker restart gitlab
以重新啟動容器并解決問題。
權限問題
從較早的GitLab Docker鏡像進行更新時,您可能會遇到權限問題。發生這種情況的原因是以前的圖像中的使用者沒有正確定留。有用于修複所有檔案權限的腳本。
要修複您的容器,隻需執行update-permissions然後重新開機容器即可:
sudo docker exec gitlab update-permissions
sudo docker restart gitlab
Windows / Mac的: Error executing action run on resource ruby_block[directory resource: /data/GitLab]
在Windows或Mac上将Docker Toolbox與VirtualBox一起使用并利用Docker卷時,會發生此錯誤。/ c / Users卷作為VirtualBox共享檔案夾安裝,并且不支援所有POSIX檔案系統功能。不重新安裝就無法更改目錄所有權和權限,并且GitLab失敗。
我們的建議是切換到使用适用于您的平台的本地Docker安裝,而不是使用Docker Toolbox。
如果您不能使用本地Docker安裝(Windows 10 Home Edition或Windows <10),那麼另一種解決方案是為Docker Toolbox的boot2docker設定NFS挂載,而不是VirtualBox共享。
Linux ACL問題
如果您在Docker主機上使用檔案ACL,則docker1組需要對卷具有完全通路權限才能使GitLab正常工作。
$ getfacl /srv/gitlab
# file: /srv/gitlab
# owner: XXXX
# group: XXXX
user::rwx
group::rwx
group:docker:rwx
mask::rwx
default:user::rwx
default:group::rwx
default:group:docker:rwx
default:mask::rwx
default:other::r-x
如果這些都不正确,請使用以下指令進行設定:
sudo setfacl -mR default:group:docker:rwx /srv/gitlab
獲得幫助
如果此處未列出您的問題,請參閱獲得支援管道的幫助。
這些docker鏡像得到GitLab Inc.的正式支援,并且應該始終是最新的。
- docker是預設組,如果已更改,請相應地更新指令。