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升级到新版本,您必须:
- 停止正在运行的容器:
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/gitlab-ce:latest
。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:
此URL中指定的端口必须与Docker发布到主机的端口匹配。此外,请注意,除非在中显式设置了NGINX侦听端口,否则nginx[‘listen_port’]将从该URL中提取该端口。有关更多信息,请参见NGINX文档。# For HTTP external_url "http://gitlab.example.com:8929" or # For HTTPS (notice the https) external_url "https://gitlab.example.com:8929"
- 设置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群
- 创建一个
文件:docker-compose.yml
为了简单起见,省略了network配置。可以在正式的Compose文件参考中找到更多信息。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
- 创建一个
文件: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是默认组,如果已更改,请相应地更新命令。