GitLab Docker映像
GitLab Docker映像是在單個容器中運行所有必需服務的GitLab的整體映像。
GitLab CE和EE都在Docker Hub中:
在以下示例中,我們使用的是GitLab CE的圖像。要使用GitLab EE而不是GitLab CE,請將圖像名稱替換爲gitlab/gitlab-ee:latest
。
需要Docker安裝,請參閱官方安裝文檔。
設置卷掛載位置
在設置其他所有內容之前,請配置一個新的環境變量$GITLAB_HOME
,該變量指向配置,日誌和數據文件將駐留的目錄。確保目錄存在並且已授予適當的權限。
對於Linux用戶,將路徑設置爲/opt/gitlab
:
export GITLAB_HOME=/opt/gitlab
對於macOS用戶,請使用用戶$HOME/gitlab
目錄:
export GITLAB_HOME=$HOME/gitlab
GitLab容器使用主機安裝的捲來存儲持久數據:
當地位置 | 貨櫃位置 | 用法 |
---|---|---|
$GITLAB_HOME/data |
/var/opt/gitlab |
用於存儲應用程序數據 |
$GITLAB_HOME/logs |
/var/log/gitlab |
用於存儲日誌 |
$GITLAB_HOME/config |
/etc/gitlab |
用於存儲GitLab配置文件 |
安裝
GitLab Docker鏡像可以多種方式運行:
使用Docker Engine安裝GitLab
您可以微調這些目錄以滿足您的要求。設置GITLAB_HOME
變量後,即可運行圖像:
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 2222:22 \
--name gitlab \
--restart always \
--volume /etc/localtime:/etc/localtime \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
這將下載並啓動一個GitLab CE容器,併發布訪問SSH,HTTP和HTTPS所需的端口。所有的GitLab數據都將存儲爲的子目錄 $GITLAB_HOME
。restart
系統重啓後,容器將自動運行。
如果您使用的是SELinux,請改爲運行以下命令:
sudo docker run --detach \
--hostname gitlab.example.com \
--publish 443:443 --publish 80:80 --publish 2222:22 \
--name gitlab \
--restart always \
--volume /etc/localtime:/etc/localtime:z \
--volume $GITLAB_HOME/config:/etc/gitlab:Z \
--volume $GITLAB_HOME/logs:/var/log/gitlab:Z \
--volume $GITLAB_HOME/data:/var/opt/gitlab:Z \
gitlab/gitlab-ce:latest
這將確保Docker進程具有足夠的權限在已安裝的卷中創建配置文件。
--publish 8443:8443
如果您正在使用Kerberos集成 ,則還需要發佈Kerberos端口(例如)。 。否則,將阻止通過Kerberos進行Git操作。初始化過程可能需要很長時間。您可以使用以下方法跟蹤此過程:
sudo docker logs -f gitlab
啓動容器後,您可以訪問gitlab.example.com
(或者 http://192.168.59.103
如果您在macOS上使用了boot2docker)。Docker容器開始響應查詢可能需要一段時間。首次訪問GitLab時,系統會要求您設置管理員密碼。更改後,可以使用用戶名root
和設置的密碼登錄。
使用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: - '/etc/localtime:/etc/localtime' - '$GITLAB_HOME/config:/etc/gitlab' - '$GITLAB_HOME/logs:/var/log/gitlab' - '$GITLAB_HOME/data:/var/opt/gitlab'
-
確保您與以下目錄位於同一目錄中,
docker-compose.yml
然後啓動GitLab:docker-compose up -d
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:
- '/etc/localtime:/etc/localtime'
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
這與使用相同--publish 8929:8929 --publish 2224:22
。
使用Docker羣模式安裝GitLab
使用Docker羣集模式,您可以輕鬆地在羣集集羣中配置和部署基於Docker的GitLab安裝。
在集羣模式下,您可以利用Docker機密 和Docker配置有效而安全地部署您的GitLab實例。機密信息可用於安全地傳遞您的初始root密碼,而無需將其暴露爲環境變量。配置可以幫助您保持GitLab映像儘可能通用。
這是一個使用祕密和配置將GitLab與四個跑步者作爲一個堆棧部署的示例:
- 設置Docker集羣。
-
創建一個
docker-compose.yml
文件:version: "3.6" services: gitlab: image: gitlab/gitlab-ce:latest ports: - "22:22" - "80:80" - "443:443" volumes: - '/etc/localtime:/etc/localtime' - $GITLAB_HOME/data:/var/opt/gitlab - $GITLAB_HOME/logs:/var/log/gitlab - $GITLAB_HOME/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
組態
該容器使用官方的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的更多選項,請參閱 配置文檔。
預配置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 /etc/localtime:/etc/localtime \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
請注意,每次執行docker run
命令時,都需要提供該GITLAB_OMNIBUS_CONFIG
選項。的內容GITLAB_OMNIBUS_CONFIG
是 不保留後續運行之間。
使用標記版本的GitLab
還提供了GitLab Docker映像的標記版本。要查看所有可用標籤,請參閱:
要使用特定的標記版本,請替換gitlab/gitlab-ce:latest
爲要運行的GitLab版本gitlab/gitlab-ce:12.1.3-ce.0
。
在公共IP地址上運行GitLab
您可以通過修改--publish
標誌使Docker使用您的IP地址並將所有流量轉發到GitLab容器。
要在IP上公開GitLab CE 198.51.100.1
:
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 /etc/localtime:/etc/localtime \
--volume $GITLAB_HOME/config:/etc/gitlab \
--volume $GITLAB_HOME/logs:/var/log/gitlab \
--volume $GITLAB_HOME/data:/var/opt/gitlab \
gitlab/gitlab-ce:latest
然後,您可以在http://198.51.100.1/
和訪問您的GitLab實例https://198.51.100.1/
。
在不同的端口上暴露GitLab
GitLab將佔用 容器內的某些端口。
如果要使用與80
(HTTP)或443
(HTTPS)不同的主機端口,則需要--publish
在docker run
命令中添加單獨的指令。
例如,在主機的port上公開Web界面,在port上公開8929
SSH服務2289
:
-
使用以下
docker run
命令:sudo docker run --detach \ --hostname gitlab.example.com \ --publish 8929:8929 --publish 2289:22 \ --name gitlab \ --restart always \ --volume /etc/localtime:/etc/localtime \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
注意: 發佈端口的格式爲hostPort:containerPort
。在Docker的文檔中瞭解更多有關 公開傳入端口的信息。 -
輸入正在運行的容器:
sudo docker exec -it gitlab /bin/bash
-
/etc/gitlab/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']
,它將從中拉出external_url
。有關更多信息,請參見NGINX文檔。 -
設置
gitlab_shell_ssh_port及時區
:gitlab_rails['gitlab_shell_ssh_port'] = 2289 gitlab_rails['time_zone'] = 'Asia/Shanghai'
-
最後,重新配置GitLab:
gitlab-ctl reconfigure
按照上面的示例,您將能夠從Web瀏覽器下訪問GitLab,<hostIP>:8929
並在port下使用SSH進行推送2289
。
甲docker-compose.yml
使用不同的端口的例子可以在找到 多克爾撰寫部分。
更新資料
在大多數情況下,更新GitLab就像下載最新的Docker image標籤一樣容易 。
使用Docker Engine更新GitLab
要更新使用Docker Engine安裝的 GitLab :
- 進行備份。
-
停止正在運行的容器:
sudo docker stop gitlab
-
刪除現有容器:
sudo docker rm gitlab
-
拉新圖像。例如,最新的GitLab CE映像:
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 /etc/localtime:/etc/localtime \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest
在第一次運行時,GitLab將重新配置並自我更新。
使用Docker compose更新GitLab
要更新使用Docker Compose安裝的 GitLab :
- 進行備份。
-
下載最新版本並更新您的GitLab實例:
docker-compose pull docker-compose up -d
注意: 如果您改用標記,則需要先進行編輯docker-compose.yml
。
備份GitLab
您可以使用以下方法創建一個GitLab備份:
docker exec -t <container name> gitlab-backup create
閱讀更多有關如何備份和還原GitLab的信息。
故障排除
如果您在使用Omnibus GitLab和Docker時遇到問題,以下信息將有所幫助。
診斷潛在問題
讀取容器日誌:
sudo docker logs gitlab
輸入運行容器:
sudo docker exec -it gitlab /bin/bash
從容器內部,您可以像通常管理Omnibus安裝一樣管理GitLab容器
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家庭版或Windows 7/8),則另一種解決方案是爲Docker Toolbox的boot2docker設置NFS掛載而不是VirtualBox共享。
Linux ACL問題
如果您在Docker主機上使用文件ACL,則該docker
組需要對卷具有完全訪問權限才能使GitLab正常工作:
getfacl $GITLAB_HOME
# file: $GITLAB_HOME
# 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 $GITLAB_HOME
docker
是默認組,如果您更改了此組,請相應地更新命令。