docker自建GitLab倉庫的實現(xiàn)
Harbor是一個用于存儲和分發(fā)Docker鏡像的企業(yè)級Registry服務器,雖然Docker官方也提供了公共的鏡像倉庫,但是從安全和效率等方面考慮,
部署企業(yè)內部的私有環(huán)境Registry是非常必要的,Harbor和docker中央倉庫的關系,就類似于nexus和Maven中央倉庫的關系,Harbor除了存儲和分發(fā)鏡像外還具有用戶管理,項目管理,配置管理和日志查詢,高可用部署等主要功能。
準備內容
為了方便理解,使用的機器內網(wǎng)IP為1.1.1.1,外網(wǎng)IP為2.2.2.2
1. 獲取Harbor離線安裝包
通過github獲取離線安裝包,地址:https://github.com/goharbor/harbor/releases
可以根據(jù)自己的需要下載自己需要的release版本,這里使用的是v2.10.0,下載對應的離線安裝包harbor-offline-installer-v2.10.0.tgz
2. 下載docker-compose并安裝
參考網(wǎng)址:http://www.dbjr.com.cn/server/320623e4s.htm
部署docker環(huán)境,為了方便采用命令安裝 pip3的方式安裝docker-compose
安裝Harbor
本篇的安裝目錄在/data/harbor目錄下,docker卷映射宿主機位置在/data/volumes/下
解壓harbor離線文件
如果目錄不存在,則創(chuàng)建目錄 mkdir -p /data/harbor cd /data/harbor # 上傳包 # 解壓 tar -zxvf harbor-offline-installer-v2.10.0.tgz # 復制一份配置文件 cd harbor cp harbor.yml.tmpl harbor.yml # 編輯配置文件 vim harbor.yml
1. 部署http訪問模式
編輯配置文件的以下內容
# 修改成你的ip,填寫外網(wǎng)ip地址或者域名 # 填寫內網(wǎng)ip有個問題就是頁面能通過外網(wǎng)ip進入管理控制臺,但是無法通過外網(wǎng)ip使用docker login或者docker push等操作 hostname: 2.2.2.2 # 修改端口號,由于端口限制,不建議使用80端口 http: port: 7080 # 如果不需要https,請注釋掉https相關 #https: # port: 443 # certificate: /your/certificate/path # private_key: /your/private/key/path # 配置密碼,將 Harbor12345換成你自己的密碼,建議使用復雜一點的密碼 harbor_admin_password: Harbor12345 # 數(shù)據(jù)映射到宿主機的位置 data_volume: /data/volumes/harbor/ log: local: # 日志存放到宿主機的位置 location: /data/logs/harbor
啟動harbor
./install.sh
可以通過docker ps查看各個組件是否啟動完成,啟動完成后,就可以通過你配置的IP + PORT訪問Harbor了,這里有個小坑,因為harbor本身依賴redis和nginx,如果你本機已經(jīng)跑著名稱為nginx和redis的容器,啟動會報錯,需要先將自己的redis或者nginx容器重命名才能啟動成功。如果不需要開啟https的話,可以宣布游戲結束了。
Harbor常用命令
# 啟動harbor docker-compose up -d # 關閉harbor docker-compose down
2. 部署支持https協(xié)議訪問
因為Harbor要配合天翼云或者K8S一起使用,集群訪問Harbor只支持https,所以要重新配置一下。
2.1 修改openss的配置(可先跳過)
這配置可以先跳過,遇到問題之后再回來配置。因為我這兒配置的是內網(wǎng)ip,但是v3.ext文件配置的外網(wǎng)ip,所以可以先跳過。
可能遇到問題點:制作證書前需要設置openss的配置文件,在[ v3_ca ] 下添加subjectAltName = IP:1.1.1.1,否則做出來的證書使用docker登錄會報:x509: cannot validate certificate for 1.1.1.1 because it doesn’t contain any IP SANs 錯誤。這里1.1.1.1需要替換成harbor所在機器的ip
vim /etc/pki/tls/openssl.cnf
在[ v3_ca ]下添加以下內容,ip替換成harbor機器所在ip
subjectAltName = IP:1.1.1.1
2.2 制作證書
生成CA證書私鑰和CA證書
# 切換到harbor證書所在的目錄,可以自己創(chuàng)建目錄,和后面配置對上就好 mkdir -p /data/harbor/cert cd /data/harbor/cert # 執(zhí)行證書命令 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"
說明:C=CN(國家),ST=Guangdong(省份),L=Shenzhen(城市),O=NETSION(公司),OU=IT(部門),CN=2.2.2.2(IP,harbor的ip),emailAddress=XXX@XXX.com(換成你自己的郵箱,或者隨便填)
執(zhí)行完后,會得到兩個文件ca.crt和ca.key
生成服務器證書
# 私鑰 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
生成一個使用ip進行訪問的x509 v3擴展文件
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主機證書
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
轉換2.2.2.2.crt為2.2.2.2.cert,供Docker使用,Docker守護程序將.crt文件解釋為CA證書,并將.cert文件解釋為客戶端證書
openssl x509 -inform PEM -in 2.2.2.2.crt -out 2.2.2.2.cert
到這里我們已經(jīng)生成了一堆證書了
[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 使用證書
# 編輯配置文件 cd /data/harbor/harbor vim harbor.yml
主要修改以下內容,端口默認443,certificate和private_key替換成你自己的證書路徑
# 修改成你的ip,填寫外網(wǎng)ip地址或者域名 # 填寫內網(wǎng)ip有個問題就是頁面能通過外網(wǎng)ip進入管理控制臺,但是無法通過外網(wǎng)ip使用docker login或者docker push等操作 hostname: 2.2.2.2 # 修改端口號,由于端口限制,不建議使用80端口 http: port: 7080 # 如果不需要https,請注釋掉https相關 https: # 修改端口號,由于端口限制,不建議使用443端口 port: 7443 certificate: /data/harbor/cert/2.2.2.2.crt private_key: /data/harbor/cert/2.2.2.2.key # 配置密碼,將 Harbor12345換成你自己的密碼,建議使用復雜一點的密碼 harbor_admin_password: Harbor12345 # 數(shù)據(jù)映射到宿主機的位置 data_volume: /data/volumes/harbor/ log: local: # 日志存放到宿主機的位置 location: /data/logs/harbor
將服務器證書,密鑰和CA文件復制到Harbor主機上的Docker證書文件夾中
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ù)自己的情況填寫harbor域名或者ip,因為我這里使用的時ip訪問,所以配置的是ip,port為你配置的https端口,如果是默認的443可以不填寫端口,如果你使用的是非默認值,文件夾名稱請加上端口號且需要和harbor.yml配置的https端口對應上
2.4 重啟docker與harbor
# 關閉harbor docker-compose down -v # 重啟docker service docker restart # 重新配置 ./prepare # 啟動 ./install.sh
ps:我看到網(wǎng)上有些教程在執(zhí)行./prepare之后直接docker-compose -d就可以了。但是我發(fā)現(xiàn)我執(zhí)行的時候報錯了,docker ps -a發(fā)現(xiàn)之前相關的容器全部沒有了,所以就直接在./install了一次
2.5 驗證https
頁面訪問我們的http端口7080,發(fā)現(xiàn)已經(jīng)可以自動跳轉到https端口7443了
訪問地址:2.2.2.2:7443
使用admin,密碼使用之前在配置文件中配置的密碼,默認Harbor12345,登錄成功后便看到了harbor清爽的界面
本機docker推送鏡像到harbor中
# 隨后輸入密碼 docker login https://2.2.2.2:7443 -u admin # 拉一個鏡像 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
問題點總結
通過測試發(fā)現(xiàn)有如下問題,暫時沒解決內網(wǎng)和外網(wǎng)無差別訪問的問題點。有經(jīng)驗的可以一起交流一下,解決當前存在的問題
1. docker login報錯
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. 內網(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
會一直重試,無法push到harbor倉庫
3. 通過外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
也是無法推送
4. 為了方便使用,所以hostname配置外網(wǎng)或者域名地址
到此這篇關于docker自建GitLab倉庫的實現(xiàn)的文章就介紹到這了,更多相關docker自建GitLab倉庫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- Docker快速部署gitlab+gitlab-runner實例
- 使用docker搭建gitlab并且開放到公網(wǎng)
- 如何修改Docker部署gitlab的外部訪問地址和端口
- windows使用docker部署gitlab方式
- docker部署gitlab以及修改初始密碼方式
- ubuntu服務器部署gitlab docker并配置nginx反向代理https訪問的過程解析
- docker?machine安裝極狐gitlab的過程詳解
- 解決docker搭建gitlab時容器不停重啟的問題
- Gitlab-runner+Docker實現(xiàn)自動部署SpringBoot項目
- 教你Docker安裝GitLab功能
- 基于CentOS8系統(tǒng)使用Docker搭建Gitlab的詳細教程
- 使用Docker搭建私有GitLab的兩種方案
相關文章
docker沒有錯誤日志,鏡像服務卻啟動不成功的問題以及排查方式
這篇文章主要介紹了docker沒有錯誤日志,鏡像服務卻啟動不成功的問題以及排查方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-05-05使用Docker Compose搭建 Confluence的教程
本文將介紹如何使用 Docker Compose 快速搭建 Confluence 、以及如何和 Traefik 一同使用,如果你看過之前的內容,跟隨本文應該能在十分鐘內解決戰(zhàn)斗,感興趣的朋友快來看看吧2021-06-06docker start啟動容器后仍然exit狀態(tài)的解決
這篇文章主要介紹了docker start啟動容器后仍然exit狀態(tài)的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06