GitLab Docker鏡像的說明
GitLab CE和EE都在Docker Hub中:
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,請參閱官方安裝文檔。
注意: 爲了使用持久化的卷,建議使用本機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-ce:latest
爲要運行的GitLab版本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:
# For HTTP external_url "http://gitlab.example.com:8929" or # For HTTPS (notice the https) external_url "https://gitlab.example.com:8929"
此URL中指定的端口必須與Docker發佈到主機的端口匹配。此外,請注意,除非在中顯式設置了NGINX偵聽端口,否則nginx[‘listen_port’]將從該URL中提取該端口。有關更多信息,請參見NGINX文檔。
-
設置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-compose.yml
文件: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
爲了簡單起見,省略了network配置。可以在正式的Compose文件參考中找到更多信息。
-
創建一個
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是默認組,如果已更改,請相應地更新命令。