Harbor管理docker镜像(1.7.5版本-主从复制)
harbor簡介
Harbor是一個用于存儲和分發Docker鏡像的企業級Registry服務器,通過添加一些企業必需的功能特性,例如安全、標識和管理等,擴展了開源Docker Distribution。作為一個企業級私有Registry服務器,Harbor提供了更好的性能和安全。提升用戶使用Registry構建和運行環境傳輸鏡像的效率。Harbor支持安裝在多個Registry節點的鏡像資源復制,鏡像全部保存在私有Registry中, 確保數據和知識產權在公司內部網絡中管控。另外,Harbor也提供了高級的安全特性,諸如用戶管理,訪問控制和活動審計等。
harbor組件
Harbor在架構上主要由6個組件構成:
Proxy:Harbor的registry,?UI,?token等服務,通過一個前置的反向代理統一接收瀏覽器、Docker客戶端的請求,并將請求轉發給后端不同的服務。 Registry:?負責儲存Docker鏡像,并處理docker?push/pull?命令。由于我們要對用戶進行訪問控制,即不同用戶對Docker?image有不同的讀寫權限,Registry會指向一個token服務,強制用戶的每次docker? pull/push請求都要攜帶一個合法的token,?Registry會通過公鑰對token?進行解密驗證。 Core?services:?這是Harbor的核心功能,主要提供以下服務: UI:提供圖形化界面,幫助用戶管理registry上的鏡像(image),?并對用戶進行授權。 webhook:為了及時獲取registry?上image狀態變化的情況,?在Registry上配置webhook,把狀態變化傳遞給UI模塊。 token?服務:負責根據用戶權限給每個docker?push/pull命令簽發token.?Docker?客戶端向Regi?stry服務發起的請求,如果不包含token,會被重定向到這里,獲得token后再重新向Registry進行請求。 Database:為core?services提供數據庫服務,負責儲存用戶權限、審計日志、Docker?image分組信息等數據。 Job?Services:提供鏡像遠程復制功能,可以把本地鏡像同步到其他Harbor實例中。 Log?collector:為了幫助監控Harbor運行,負責收集其他組件的log,供日后進行分析Harbor實現組成
[root@localhost?harbor]#?docker-compose?psName?????????????????????Command??????????????????State????????????????????????????????????Ports?????????????????????????????? ------------------------------------------------------------------------------------------------------------------------------------- harbor-adminserver???/harbor/start.sh?????????????????Up?(healthy)??????????????????????????????????????????????????????????????????? harbor-core??????????/harbor/start.sh?????????????????Up?(healthy)??????????????????????????????????????????????????????????????????? harbor-db????????????/entrypoint.sh?postgres??????????Up?(healthy)???5432/tcp???????????????????????????????????????????????????????? harbor-jobservice????/harbor/start.sh?????????????????Up????????????????????????????????????????????????????????????????????????????? harbor-log???????????/bin/sh?-c?/usr/local/bin/?...???Up?(healthy)???127.0.0.1:1514->10514/tcp??????????????????????????????????????? harbor-portal????????nginx?-g?daemon?off;?????????????Up?(healthy)???80/tcp?????????????????????????????????????????????????????????? nginx????????????????nginx?-g?daemon?off;?????????????Up?(healthy)???0.0.0.0:443->443/tcp,?0.0.0.0:4443->4443/tcp,?0.0.0.0:80->80/tcp redis????????????????docker-entrypoint.sh?redis?...???Up?????????????6379/tcp???????????????????????????????????????????????????????? registry?????????????/entrypoint.sh?/etc/regist?...???Up?(healthy)???5000/tcp???????????????????????????????????????????????????????? registryctl??????????/harbor/start.sh?????????????????Up?(healthy)每個組件都是以Docker容器的形式構建的,官方也是使用Docker Compose來對它進行部署。用于部署Harbor的Docker Compose模板位于 harbor/docker-compose.yml,這個模板文件寫明,Harbor是由7個容器組成的;
nginx:nginx負責流量轉發和安全驗證,對外提供的流量都是從nginx中轉,所以開放https的443端口,它將流量分發到后端的ui和正在docker鏡像存儲的docker?registry。 harbor-jobservice:harbor-jobservice?是harbor的job管理模塊,job在harbor里面主要是為了鏡像倉庫之前同步使用的; harbor-ui:harbor-ui是web管理頁面,主要是前端的頁面和后端CURD的接口; registry:registry就是docker原生的倉庫,負責保存鏡像。 harbor-adminserver:harbor-adminserver是harbor系統管理接口,可以修改系統配置以及獲取系統信息。 這幾個容器通過Docker?link的形式連接在一起,在容器之間通過容器名字互相訪問。對終端用戶而言,只需要暴露proxy?(即Nginx)的服務端口。 harbor-db:harbor-db是harbor的數據庫,這里保存了系統的job以及項目、人員權限管理。由于本harbor的認證也是通過數據,在生產環節大多對接到企業的ldap中; harbor-log:harbor-log是harbor的日志服務,統一管理harbor的日志。通過inspect可以看出容器統一將日志輸出的syslog。服務器準備
| 主機 | 系統及配置 | docker版本 | docker-compose版本 | harbor版本 |
| 192.168.0.201(主) | centos7.2?? 2核2G 30G盤 | 18.09.5 | 1.24.0 | 1.7.5 |
| 192.168.0.202(從) | centos7.2?? 2核2G 30G盤 | 18.09.5 | 1.24.0 | 1.7.5 |
安裝centos7.2系統,最小化安裝
設置好網絡和防火墻? 網絡需要能訪問外網,
ip 192.168.0.201(主)? 192.168.0.202(從)
下面關閉防火墻
setenforce 0
systemctl stop firewalld
systemctl disable firewalld
sed -i 's/enforcing/disabled/g' /etc/sysconfig/selinux
設置yum源
cd /etc/yum.repos.d/
yum install vim unzip lrzsz wget net-tools -y
wget?http://mirrors.aliyun.com/repo/Centos-7.repo
wget?http://mirrors.aliyun.com/repo/epel-7.repo
yum -y install epel-release
安裝docker
yum clean all ?&& yum makecache fast
yum install docker-ce -y
systemctl enable docker && systemctl restart docker
修改docker啟動文件并重啟docker
vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.0.201 ? ?#修改此處增加橙色內容(后面ip可換成域名)
systemctl daemon-reload
systemctl restart docker
[root@localhost?harbor]#?docker?version Client:Version:???????????18.09.5API?version:???????1.39Go?version:????????go1.10.8Git?commit:????????e8ff056Built:?????????????Thu?Apr?11?04:43:34?2019OS/Arch:???????????linux/amd64Experimental:??????false
安裝docker-compose
yum install python-pip -y
pip install --upgrade pip
pip install docker-compose #默認最新版本,可以使用 docker-compose==version指定安裝版本
docker-compose -version
安裝Harbor
harbor有offline和online兩種,這里選offline,下載地址https://github.com/goharbor/harbor/releases
wget方式無法正常下載或者速度超慢,建議先用瀏覽器下載? 然后上傳到兩個機器,
wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.5.tgz
cd /home
tar xf harbor-offline-installer-v1.7.5.tgz.tar
cd harbor/
修改配置文件
多數信息無需更改,把hostname變成自己的域名或者ip即可,其他可以保持不變,/data/cert 目錄自行需要創建。
mkdir -p /data/cert
vim harbor.cfg
[root@localhost harbor]# cat harbor.cfg |grep -v "^#"|grep -v "^$"
執行安裝
./install
執行命令,Harbor服務就會根據當期目錄下的docker-compose.yml開始下載依賴的鏡像,檢測并按照順序依次啟動各個服務
用docker-compose ps 命令查看
[root@localhost?harbor]#?docker-compose?psName?????????????????????Command??????????????????State????????????????????????????????????Ports?????????????????????????????? ------------------------------------------------------------------------------------------------------------------------------------- harbor-adminserver???/harbor/start.sh?????????????????Up?(healthy)??????????????????????????????????????????????????????????????????? harbor-core??????????/harbor/start.sh?????????????????Up?(healthy)??????????????????????????????????????????????????????????????????? harbor-db????????????/entrypoint.sh?postgres??????????Up?(healthy)???5432/tcp???????????????????????????????????????????????????????? harbor-jobservice????/harbor/start.sh?????????????????Up????????????????????????????????????????????????????????????????????????????? harbor-log???????????/bin/sh?-c?/usr/local/bin/?...???Up?(healthy)???127.0.0.1:1514->10514/tcp??????????????????????????????????????? harbor-portal????????nginx?-g?daemon?off;?????????????Up?(healthy)???80/tcp?????????????????????????????????????????????????????????? nginx????????????????nginx?-g?daemon?off;?????????????Up?(healthy)???0.0.0.0:443->443/tcp,?0.0.0.0:4443->4443/tcp,?0.0.0.0:80->80/tcp redis????????????????docker-entrypoint.sh?redis?...???Up?????????????6379/tcp???????????????????????????????????????????????????????? registry?????????????/entrypoint.sh?/etc/regist?...???Up?(healthy)???5000/tcp???????????????????????????????????????????????????????? registryctl??????????/harbor/start.sh?????????????????Up?(healthy)Harbor的啟動和停止命令:
啟動Harbor #?docker-compose?start 停止Harbor #?docker-comose?stop 重啟Harbor #?docker-compose?restart================================
以上步驟兩個機器都做
================================
然后瀏覽器登陸http://192.168.0.201/
賬戶密碼是默認admin / Harbor12345
創建test01項目,非公開
如果是非公開模式,要使用docker login 192.168.0.201 登陸? 才能上傳下載鏡像;
如果想其他機器直接訪問拉取,可以設置為公開,docker pull 192.168.0.201/test01/busybox:latest? 命令才不會出login的錯誤。
項目創建完成后,回到201服務器上,用命令操作鏡像
下載nginx和busybox原始鏡像
docker pull nginx
docker pull busybox
給鏡像打test01項目標簽
docker tag busybox:latest 192.168.0.201/test01/busybox:latest
docker tag nginx:latest 192.168.0.201/test01/nginx:latest
接著登錄? ? docker login 192.168.0.201
登陸后將鏡像push到倉庫
docker push 192.168.0.201/test01/nginx
docker push 192.168.0.201/test01/busybox
測試本地倉庫中拉取鏡像
docker pull 192.168.0.201/test01/nginx:latest
本機可以直接拉取
其他機器需要修改docker的配置 ,增加 --insecure-registry 192.168.0.201? 然后重啟docker才行
并且要求test01項目是設置為公開的,才能直接拉取,否則必須用docker login 192.168.0.201登錄后才能拉取。
下面設置主從復制
從機器啟動后,無需配置界面
主要在主機界面進行配置
倉庫管理--新建目標--設置從倉庫
然后 復制管理--新建規則
源項目是指主機器上要同步的項目,比如之前創建的test01
目標指的是 從機器
設置完成后 可以看到同步狀態
然后打開從機器的web界面查看是否成功,這里看到已經成功同步
可參考文章:
https://www.cnblogs.com/panwenbin-logs/p/10218099.html
https://www.jianshu.com/p/4f9474081c8a
https://www.cnblogs.com/pangguoping/p/7650014.html
https://blog.51cto.com/10950710/2301257
?
Harbor配置TLS證書
上面對Harbor的配置都是使用的http協議訪問,但是我們工作中一般都是配置https訪問。
下面演示一下怎么配置Harbor可以使用https訪問,以及配置TLS證書都需要做哪些工作。
下面是簡要步驟,詳細請結合自己項目調整。
1 修改harbor配置
hostname?=?docker-hub.vonechain.com ui_url_protocol?=?https customize_crt?=?on ssl_cert?=?/data/cert/server.crt ssl_cert_key?=?/data/cert/server.key2 增加hosts解析
?cat?/etc/hosts 127.0.0.1???localhost?localhost.localdomain?localhost4?localhost4.localdomain4 ::1?????????localhost?localhost.localdomain?localhost6?localhost6.localdomain6 192.168.0.201??docker-hub.vonechain.com3 生成自簽名證書
mkdir -p /data/cert
cd /data/cert/
生成key文件
openssl genrsa -out /data/cert/server.key 2048
生成crt文件?? ##注意CN
openssl req -x509 -new -nodes -key /data/cert/server.key -subj "/CN=docker-hub.vonechain.com" -days 5000 -out /data/cert/server.crt
4 執行安裝harbor??
cd /home/harbor
./install???? ##就會生成 https 連接了,https://docker-hub.vonechain.com.
然后,windows訪問https://docker-hub.vonechain.com
需要添加本地hosts,界面配置test01項目并設置公開??? 然后在本機上作一些鏡像上傳??
docker pull busybox
docker tag busybox:latest docker-hub.vonechain.com/test01/busybox:latest
docker login -u admin -p 'Harbor12345' docker-hub.vonechain.com
docker push docker-hub.vonechain.com/test01/busybox:latest
5 配置客戶端 192.168.0.88
安裝docker
yum install docker -y
增加hosts解析
192.168.0.201??docker-hub.vonechain.com
創建證書目錄
mkdir -p /etc/docker/certs.d/docker-hub.vonechain.com
回到harbor主機上把crt文件復制過去
scp server.crt root@192.168.0.88:/etc/docker/certs.d/docker-hub.vonechain.com/
重啟客戶端docker
vim?/usr/lib/systemd/system/docker.service ExecStart=/usr/bin/dockerd?--insecure-registry?docker-hub.vonechain.comsystemctl restart docker
執行拉取鏡像
docker pull docker-hub.vonechain.com/test01/busybox:latest
[root@localhost?~]#?docker?pull?docker-hub.vonechain.com/test01/busybox:latest Trying?to?pull?repository?docker-hub.vonechain.com/test01/busybox?...? latest:?Pulling?from?docker-hub.vonechain.com/test01/busybox fc1a6b909f82:?Pull?complete? Digest:?sha256:f79f7a10302c402c052973e3fa42be0344ae6453245669783a9e16da3d56d5b4 Status:?Downloaded?newer?image?for?docker-hub.vonechain.com/test01/busybox:latest [root@localhost?~]#?docker?images REPOSITORY????????TAG?????IMAGE?ID???????CREATED?????????????SIZE docker-hub.vonechain.com/test01/busybox???latest?????af2f74c517aa?????3?weeks?ago?????1.2?MB到此https模式可用了,所有客戶端機器必須用ssl證書才能訪問harbor
可參考:https://www.cnblogs.com/pangguoping/p/7650014.html
轉載于:https://blog.51cto.com/superleedo/2387925
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Harbor管理docker镜像(1.7.5版本-主从复制)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2019春第十周作业
- 下一篇: scrapy-redis