docker自建GitLab倉(cāng)庫(kù)的實(shí)現(xiàn)
Harbor是一個(gè)用于存儲(chǔ)和分發(fā)Docker鏡像的企業(yè)級(jí)Registry服務(wù)器,雖然Docker官方也提供了公共的鏡像倉(cāng)庫(kù),但是從安全和效率等方面考慮,
部署企業(yè)內(nèi)部的私有環(huán)境Registry是非常必要的,Harbor和docker中央倉(cāng)庫(kù)的關(guān)系,就類(lèi)似于nexus和Maven中央倉(cāng)庫(kù)的關(guān)系,Harbor除了存儲(chǔ)和分發(fā)鏡像外還具有用戶管理,項(xiàng)目管理,配置管理和日志查詢(xún),高可用部署等主要功能。
準(zhǔn)備內(nèi)容
為了方便理解,使用的機(jī)器內(nèi)網(wǎng)IP為1.1.1.1,外網(wǎng)IP為2.2.2.2
1. 獲取Harbor離線安裝包
通過(guò)github獲取離線安裝包,地址:https://github.com/goharbor/harbor/releases
可以根據(jù)自己的需要下載自己需要的release版本,這里使用的是v2.10.0,下載對(duì)應(yīng)的離線安裝包harbor-offline-installer-v2.10.0.tgz
2. 下載docker-compose并安裝
參考網(wǎng)址:http://chabaoo.cn/server/320623e4s.htm
部署docker環(huán)境,為了方便采用命令安裝 pip3的方式安裝docker-compose
安裝Harbor
本篇的安裝目錄在/data/harbor目錄下,docker卷映射宿主機(jī)位置在/data/volumes/下
解壓harbor離線文件
如果目錄不存在,則創(chuàng)建目錄 mkdir -p /data/harbor cd /data/harbor # 上傳包 # 解壓 tar -zxvf harbor-offline-installer-v2.10.0.tgz # 復(fù)制一份配置文件 cd harbor cp harbor.yml.tmpl harbor.yml # 編輯配置文件 vim harbor.yml
1. 部署http訪問(wèn)模式
編輯配置文件的以下內(nèi)容
# 修改成你的ip,填寫(xiě)外網(wǎng)ip地址或者域名 # 填寫(xiě)內(nèi)網(wǎng)ip有個(gè)問(wèn)題就是頁(yè)面能通過(guò)外網(wǎng)ip進(jìn)入管理控制臺(tái),但是無(wú)法通過(guò)外網(wǎng)ip使用docker login或者docker push等操作 hostname: 2.2.2.2 # 修改端口號(hào),由于端口限制,不建議使用80端口 http: port: 7080 # 如果不需要https,請(qǐng)注釋掉https相關(guān) #https: # port: 443 # certificate: /your/certificate/path # private_key: /your/private/key/path # 配置密碼,將 Harbor12345換成你自己的密碼,建議使用復(fù)雜一點(diǎn)的密碼 harbor_admin_password: Harbor12345 # 數(shù)據(jù)映射到宿主機(jī)的位置 data_volume: /data/volumes/harbor/ log: local: # 日志存放到宿主機(jī)的位置 location: /data/logs/harbor
啟動(dòng)harbor
./install.sh
可以通過(guò)docker ps查看各個(gè)組件是否啟動(dòng)完成,啟動(dòng)完成后,就可以通過(guò)你配置的IP + PORT訪問(wèn)Harbor了,這里有個(gè)小坑,因?yàn)閔arbor本身依賴(lài)redis和nginx,如果你本機(jī)已經(jīng)跑著名稱(chēng)為nginx和redis的容器,啟動(dòng)會(huì)報(bào)錯(cuò),需要先將自己的redis或者nginx容器重命名才能啟動(dòng)成功。如果不需要開(kāi)啟https的話,可以宣布游戲結(jié)束了。
Harbor常用命令
# 啟動(dòng)harbor docker-compose up -d # 關(guān)閉harbor docker-compose down
2. 部署支持https協(xié)議訪問(wèn)
因?yàn)镠arbor要配合天翼云或者K8S一起使用,集群訪問(wèn)Harbor只支持https,所以要重新配置一下。
2.1 修改openss的配置(可先跳過(guò))
這配置可以先跳過(guò),遇到問(wèn)題之后再回來(lái)配置。因?yàn)槲疫@兒配置的是內(nèi)網(wǎng)ip,但是v3.ext文件配置的外網(wǎng)ip,所以可以先跳過(guò)。
可能遇到問(wèn)題點(diǎn):制作證書(shū)前需要設(shè)置openss的配置文件,在[ v3_ca ] 下添加subjectAltName = IP:1.1.1.1,否則做出來(lái)的證書(shū)使用docker登錄會(huì)報(bào):x509: cannot validate certificate for 1.1.1.1 because it doesn’t contain any IP SANs 錯(cuò)誤。這里1.1.1.1需要替換成harbor所在機(jī)器的ip
vim /etc/pki/tls/openssl.cnf
在[ v3_ca ]下添加以下內(nèi)容,ip替換成harbor機(jī)器所在ip
subjectAltName = IP:1.1.1.1
2.2 制作證書(shū)
生成CA證書(shū)私鑰和CA證書(shū)
# 切換到harbor證書(shū)所在的目錄,可以自己創(chuàng)建目錄,和后面配置對(duì)上就好 mkdir -p /data/harbor/cert cd /data/harbor/cert # 執(zhí)行證書(shū)命令 openssl req \ -newkey rsa:4096 -nodes -sha256 -keyout ca.key \ -x509 -days 3650 -out ca.crt \ -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=CMIT/OU=JSZX/CN=2.2.2.2/emailAddress=guyougao@****.com"
說(shuō)明:C=CN(國(guó)家),ST=Guangdong(省份),L=Shenzhen(城市),O=NETSION(公司),OU=IT(部門(mén)),CN=2.2.2.2(IP,harbor的ip),emailAddress=XXX@XXX.com(換成你自己的郵箱,或者隨便填)
執(zhí)行完后,會(huì)得到兩個(gè)文件ca.crt和ca.key
生成服務(wù)器證書(shū)
# 私鑰 openssl genrsa -out 2.2.2.2.key 4096 openssl req -sha512 -new -subj "/C=CN/ST=Guangdong/L=Shenzhen/O=CMIT/OU=JSZX/CN=2.2.2.2/emailAddress=guyougao@****.com" -key 2.2.2.2.key -out 2.2.2.2.csr
生成一個(gè)使用ip進(jìn)行訪問(wèn)的x509 v3擴(kuò)展文件
cat > v3.ext <<-EOF authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment extendedKeyUsage = serverAuth subjectAltName = IP:2.2.2.2 EOF
使用剛才生成的v3.ext生成Harbor主機(jī)證書(shū)
openssl x509 -req -sha512 -days 3650 \ -extfile v3.ext \ -CA ca.crt -CAkey ca.key -CAcreateserial \ -in 2.2.2.2.csr \ -out 2.2.2.2.crt
轉(zhuǎn)換2.2.2.2.crt為2.2.2.2.cert,供Docker使用,Docker守護(hù)程序?qū)?crt文件解釋為CA證書(shū),并將.cert文件解釋為客戶端證書(shū)
openssl x509 -inform PEM -in 2.2.2.2.crt -out 2.2.2.2.cert
到這里我們已經(jīng)生成了一堆證書(shū)了
[root@ecs-debug-service cert]# ls 2.2.2.2.cert 2.2.2.2.crt 2.2.2.2.csr 2.2.2.2.key ca.crt ca.key ca.srl v3.ext
2.3 使用證書(shū)
# 編輯配置文件 cd /data/harbor/harbor vim harbor.yml
主要修改以下內(nèi)容,端口默認(rèn)443,certificate和private_key替換成你自己的證書(shū)路徑
# 修改成你的ip,填寫(xiě)外網(wǎng)ip地址或者域名 # 填寫(xiě)內(nèi)網(wǎng)ip有個(gè)問(wèn)題就是頁(yè)面能通過(guò)外網(wǎng)ip進(jìn)入管理控制臺(tái),但是無(wú)法通過(guò)外網(wǎng)ip使用docker login或者docker push等操作 hostname: 2.2.2.2 # 修改端口號(hào),由于端口限制,不建議使用80端口 http: port: 7080 # 如果不需要https,請(qǐng)注釋掉https相關(guān) https: # 修改端口號(hào),由于端口限制,不建議使用443端口 port: 7443 certificate: /data/harbor/cert/2.2.2.2.crt private_key: /data/harbor/cert/2.2.2.2.key # 配置密碼,將 Harbor12345換成你自己的密碼,建議使用復(fù)雜一點(diǎn)的密碼 harbor_admin_password: Harbor12345 # 數(shù)據(jù)映射到宿主機(jī)的位置 data_volume: /data/volumes/harbor/ log: local: # 日志存放到宿主機(jī)的位置 location: /data/logs/harbor
將服務(wù)器證書(shū),密鑰和CA文件復(fù)制到Harbor主機(jī)上的Docker證書(shū)文件夾中
mkdir -p /etc/docker/certs.d/2.2.2.2:7443 cp 2.2.2.2.cert 2.2.2.2.key ca.crt /etc/docker/certs.d/2.2.2.2:7443
這里文件夾的命名是有規(guī)則限定的,/etc/docker/certs.d/yourdomain.com:port或/etc/docker/certs.d/harbor_IP:port,yourdomain.com,harbor_IP根據(jù)自己的情況填寫(xiě)harbor域名或者ip,因?yàn)槲疫@里使用的時(shí)ip訪問(wèn),所以配置的是ip,port為你配置的https端口,如果是默認(rèn)的443可以不填寫(xiě)端口,如果你使用的是非默認(rèn)值,文件夾名稱(chēng)請(qǐng)加上端口號(hào)且需要和harbor.yml配置的https端口對(duì)應(yīng)上
2.4 重啟docker與harbor
# 關(guān)閉harbor docker-compose down -v # 重啟docker service docker restart # 重新配置 ./prepare # 啟動(dòng) ./install.sh
ps:我看到網(wǎng)上有些教程在執(zhí)行./prepare之后直接docker-compose -d就可以了。但是我發(fā)現(xiàn)我執(zhí)行的時(shí)候報(bào)錯(cuò)了,docker ps -a發(fā)現(xiàn)之前相關(guān)的容器全部沒(méi)有了,所以就直接在./install了一次
2.5 驗(yàn)證https
頁(yè)面訪問(wèn)我們的http端口7080,發(fā)現(xiàn)已經(jīng)可以自動(dòng)跳轉(zhuǎn)到https端口7443了
訪問(wèn)地址:2.2.2.2:7443
使用admin,密碼使用之前在配置文件中配置的密碼,默認(rèn)Harbor12345,登錄成功后便看到了harbor清爽的界面
本機(jī)docker推送鏡像到harbor中
# 隨后輸入密碼 docker login https://2.2.2.2:7443 -u admin # 拉一個(gè)鏡像 docker pull mongo # tag鏡像 docker tag mongo:latest 2.2.2.2:7443/library/mongo:latest # 推送鏡像 docker psuh 2.2.2.2:7443/library/mongo:latest
問(wèn)題點(diǎn)總結(jié)
通過(guò)測(cè)試發(fā)現(xiàn)有如下問(wèn)題,暫時(shí)沒(méi)解決內(nèi)網(wǎng)和外網(wǎng)無(wú)差別訪問(wèn)的問(wèn)題點(diǎn)。有經(jīng)驗(yàn)的可以一起交流一下,解決當(dāng)前存在的問(wèn)題
1. docker login報(bào)錯(cuò)
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://2.2.2.2:7443/v2/": tls: failed to verify certificate: x509: certificate signed by unknown authority
需要daemon.json文件配置
"insecure-registries":["2.2.2.2:7443"]
2. 內(nèi)網(wǎng)ip推送鏡像
docker push 1.1.1.1:7443/ctos-dev/mongo
Using default tag: latest The push refers to repository [1.1.1.1:7443/ctos-dev/mongo] 1434daed1bc0: Retrying in 1 second 725f3f03e847: Retrying in 1 second
會(huì)一直重試,無(wú)法push到harbor倉(cāng)庫(kù)
3. 通過(guò)外ip,http協(xié)議端口推送
[root@ecs-debug-service harbor]# docker push 2.2.2.2:7080/ctos-dev/mongo:latest The push refers to repository [2.2.2.2:7080/ctos-dev/mongo] Get "https://2.2.2.2:7080/v2/": http: server gave HTTP response to HTTPS client
也是無(wú)法推送
4. 為了方便使用,所以hostname配置外網(wǎng)或者域名地址
到此這篇關(guān)于docker自建GitLab倉(cāng)庫(kù)的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)docker自建GitLab倉(cāng)庫(kù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Docker快速部署gitlab+gitlab-runner實(shí)例
- 使用docker搭建gitlab并且開(kāi)放到公網(wǎng)
- 如何修改Docker部署gitlab的外部訪問(wèn)地址和端口
- windows使用docker部署gitlab方式
- docker部署gitlab以及修改初始密碼方式
- ubuntu服務(wù)器部署gitlab docker并配置nginx反向代理https訪問(wèn)的過(guò)程解析
- docker?machine安裝極狐gitlab的過(guò)程詳解
- 解決docker搭建gitlab時(shí)容器不停重啟的問(wèn)題
- Gitlab-runner+Docker實(shí)現(xiàn)自動(dòng)部署SpringBoot項(xiàng)目
- 教你Docker安裝GitLab功能
- 基于CentOS8系統(tǒng)使用Docker搭建Gitlab的詳細(xì)教程
- 使用Docker搭建私有GitLab的兩種方案
相關(guān)文章
Docker Alpine鏡像時(shí)區(qū)問(wèn)題完美解決方案
這篇文章主要介紹了Docker Alpine鏡像時(shí)區(qū)問(wèn)題完美解決方案,本文給大家分享兩種解決方案供大家參考,需要的朋友可以參考下2021-04-04使用portainer連接遠(yuǎn)程docker的教程
Portainer是一個(gè)輕量級(jí)的docker環(huán)境管理UI,可以用來(lái)管理docker宿主機(jī)和docker swarm集群,這篇文章主要介紹了使用portainer連接遠(yuǎn)程docker的方法,需要的朋友可以參考下2020-03-03docker沒(méi)有錯(cuò)誤日志,鏡像服務(wù)卻啟動(dòng)不成功的問(wèn)題以及排查方式
這篇文章主要介紹了docker沒(méi)有錯(cuò)誤日志,鏡像服務(wù)卻啟動(dòng)不成功的問(wèn)題以及排查方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-05-05Linux 離線安裝docker的過(guò)程(一鍵式安裝)
這篇文章主要介紹了Linux 離線安裝docker(一鍵式安裝)的方法,非常簡(jiǎn)單,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08使用Docker Compose搭建 Confluence的教程
本文將介紹如何使用 Docker Compose 快速搭建 Confluence 、以及如何和 Traefik 一同使用,如果你看過(guò)之前的內(nèi)容,跟隨本文應(yīng)該能在十分鐘內(nèi)解決戰(zhàn)斗,感興趣的朋友快來(lái)看看吧2021-06-06docker start啟動(dòng)容器后仍然exit狀態(tài)的解決
這篇文章主要介紹了docker start啟動(dòng)容器后仍然exit狀態(tài)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06