GitLab Docker鏡像

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:rcgitlab/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升級到新版本,您必須:

  1. 停止正在運行的容器:

    sudo docker stop gitlab
    
  2. 刪除現有容器:

    sudo docker rm gitlab
    
  3. 拉新圖像:

    sudo docker pull gitlab/gitlab-ce:latest
    
  4. 使用先前指定的選項再次創建容器:

    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:

  1. 設置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文檔。

  2. 設置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安裝。

  1. 安裝 Docker Compose
  2. 創建一個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'
    
  3. 確保您docker-compose.ymldocker-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 pulldocker-compose up -d下載新版本並升級GitLab實例即可。

在Docker羣中部署GitLab

藉助Docker swarm,您可以輕鬆地在羣集集羣中配置和部署基於Docker的GitLab安裝。
在羣模式下,您可以利用 Docker secretsDocker configs有效而安全地部署您的GitLab實例。機密信息可用於安全地傳遞您的初始root密碼,而無需將其暴露爲環境變量。配置可以幫助您保持GitLab鏡像儘可能通用。
這是一個使用祕密和配置將GitLab與四個跑步者作爲一個堆棧部署的示例:

  1. 設置一個Docker羣

  2. 創建一個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文件參考中找到更多信息。

  3. 創建一個gitlab.rb文件:

    external_url 'https://my.domain.com/'
    gitlab_rails['initial_root_password'] = File.read('/run/secrets/gitlab_root_password')
    
  4. 創建一個root_password.txt文件:

    MySuperSecretAndSecurePass0rd!
    
  5. 確保您與以下目錄位於同一目錄docker-compose.yml並運行:

    docker stack deploy --compose-file docker-compose.yml mystack
    

將GitLab安裝到集羣中

GitLab Docker鏡像也可以部署到各種容器調度平臺。

故障排除

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.的正式支持,並且應該始終是最新的。

  1. docker是默認組,如果已更改,請相應地更新命令。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章