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
文中內容若有錯誤或紕漏,請指正!有興趣的小夥伴能夠一塊兒相互討論交流學習!