天天看点

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是默认组,如果已更改,请相应地更新命令。