天天看點

GitLab Docker鏡像GitLab Docker鏡像的說明将GitLab更新到較新版本

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更新到新版本,您必須:

  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.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與四個跑步者作為一個堆棧部署的示例:

  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鏡像也可以部署到各種容器排程平台。

  • 使用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.的正式支援,并且應該始終是最新的。

  1. docker是預設組,如果已更改,請相應地更新指令。