Gitlab Docker 镜像是在单个容器上运行全部必需服务的GitLab的总体镜像。若是你想用最新的RC镜像,能够分别用gitlab/gitlab-ce:rc
or gitlab/gitlab-ee:rc
。
下面实例中咱们主要用社区版镜像。html
docker 命令拉取 gitlab 镜像linux
docker pull gitlab/gitlab-ce
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
若是您使用的是SELinux,请改成运行如下命令:nginx
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
启动一个GitLab CE容器,并发布访问SSH,HTTP和HTTPS所需的端口。全部的GitLab数据都将存储为/srv/gitlab/
的子目录。系统重启后,容器将自动重启。git
命令解释:web
--detach
-> -d
此时容器会在后台运行并不会把输出的结果 (STDOUT) 打印到宿主机上面(能够经过 docker container logs [container ID or NAMES]
获取容器的输出信息)docker
--hostname
-> -h
配置容器主机名shell
--publish
-> -p
映射容器端口到宿主机端口 宿主机Port:容器Port
浏览器
--name
-> 容器名称ruby
--restart
-> 重启配置,always
:系统重启时,容器也会自动重启。no
:默认策略,容器退出时不重启;no-failue:n
:在容器非正常退出时重启容器,最大重启n次;unless-stopped
:在容器退出时老是重启容器,但不考虑在Docker守护进程启动时就已经中止了的容器。bash
--volume
-> -v
数据卷映射 宿主机目录:容器目录
gitlab/gitlab-ce:latest
-> gitlab 镜像
本地目录 | 容器目录 | 做用 |
---|---|---|
/srv/gitlab/data |
/var/opt/gitlab |
存储应用数据 |
/srv/gitlab/logs |
/var/log/gitlab |
存储日志数据 |
/srv/gitlab/config |
/etc/gitlab |
存储 gitlab 配置文件 |
该容器使用官方的Omnibus GitLab软件包,所以全部配置都在惟一的配置文件 /etc/gitlab/gitlab.rb
中完成。
能够进入容器进行修改配置文件
// 1.进入容器 sudo docker exec -it gitlab /bin/bash // 2.修改配置文件 sudo vi /etc/gitlab/gitlab.rb // 或者一步操做 sudo docker exec -it gitlab editor /etc/gitlab/gitlab.rb
修改配置完成后,须要重启容器以从新配置 gitlab
sudo docker restart gitlab
注:每当容器启动时,GitLab都会从新配置自身。
了解配置的更多信息,请查看 Omnibus GitLab documentation。
初始化进程可能须要一段时间,能够经过如下命令查看进程状态:
// 经过查看容器日志 sudo docker logs -f gitlab // 或者经过查看容器状态(当 STATUS 显示为 healthy 时即正常启动完成) sudo docker container ls --all
http://localhost
,重置 root 密码后再登陆。升级新版本须要从新构建容器,因此要先中止、删除须要升级的 gitlab 容器服务
中止 gitlab 容器服务
sudo docker stop gitlab
移除 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
经过修改 --publish
标志使 Docker 使用您的IP地址并将全部流量转发到 GitLab CE 容器。
例如将 gitlab 映射到某个IP如 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 /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 访问服务了。
若是要使用与80(HTTP)或443(HTTPS)不一样的主机端口,则须要向 docker run
命令添加单独的 --publish
指令。
例如要暴露 web 界面服务端口在8829
,暴露SSH 服务端口到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
配置 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 ['listen_port']
中显式设置了NGINX侦听端口,不然将从该URL中提取该端口。有关更多信息,请参考NGINX文档。
设置 gitlab_shell_ssh_port
(git仓库地址显示的端口,实际仍是工做于22端口):
gitlab_rails['gitlab_shell_ssh_port'] = 2289
按照上面的示例,能够经过Web浏览器在<hostIP>:8929
下访问GitLab,并在端口2289
下使用SSH进行访问。
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 -d
去构建 gitlab 容器。HTTP
和 SSH
端口: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 pull
和 docker-compose up -d
便可下载新版本并升级您的GitLab实例。
更新Docker镜像时,可能会遇到全部路径都显示臭名昭著的500
错误页。若是发生这种状况,请尝试运行sudo docker restart gitlab
来从新启动容器并解决问题。
从较早的GitLab Docker镜像进行更新时,可能会遇到权限问题。发生这种状况的缘由是之前的镜像中的用户没有正确保留。该脚本可修复全部文件的权限。
要修复您的容器,只需执行更新权限,而后重启容器:
sudo docker exec gitlab update-permissions sudo docker restart 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共享。
若是您在Docker主机上使用文件ACL,则docker组须要对卷具备彻底访问权限才能使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
文中内容若有错误或纰漏,请指正!有兴趣的小伙伴能够一块儿相互讨论交流学习!