Harbor
一、背景
Docker中要使用映象,我們一般都會從本地、Docker Hub公共倉庫或者其它第三方的公共倉庫中下載映象,但是出於安全和一些內外網的原因考慮,企業級上不會輕易使用。普通的Docker Registry又不滿足需求,所以一般可以利用Harbor搭建一個企業級的私有映象倉庫。
二、簡介
Harbor是構建企業級私有docker映象倉庫的開源解決方案,它是Docker Registry的更高階封裝,它除了提供友好的Web UI介面,角色和使用者許可權管理,使用者操作審計等功能外,它還整合了K8s的外掛(Add-ons)倉庫,即Helm通過chart方式下載,管理,安裝K8s外掛,而chartmuseum可以提供儲存chart資料的倉庫(helm就相當於k8s的yum)。另外它還整合了兩個開源的安全元件,一個是Notary,另一個是Clair,Notary類似於私有CA中心,而Clair則是容器安全掃描工具,它通過各大廠商提供的CVE漏洞庫來獲取最新漏洞資訊,並掃描使用者上傳的容器是否存在已知的漏洞資訊,這兩個安全功能對於企業級私有倉庫來說是非常具有意義的。
Harbor安裝有3種方式:
- 線上安裝:從Docker Hub下載Harbor相關映象,因此安裝軟體包非常小
- 離線安裝:安裝包包含部署的相關映象,因此安裝包比較大
- OVA安裝程式:當使用者具有vCenter環境時,使用此安裝程式,在部署OVA後啟動Harbor
本文記錄通過離線安裝的方式部署
前提條件:安裝企業倉庫不能有registry,否則衝突
1、下載一個docker-compse工具
離線安裝docker-compse工具 [root@docker01 ~]# ls docker-compose.1.25.0.tar.gz harbor-offline-installer-v2.0.2.tgz [root@docker01 ~]# tar zxpf docker-compose.1.25.0.tar.gz -C /usr/local/bin/ [root@docker01 ~]# cd /usr/local/bin/ [root@docker01 bin]# ls docker-compose-Linux-x86_64 [root@docker01 bin]# mv docker-compose-Linux-x86_64 docker-compose [root@docker01 bin]# chmod +x /usr/local/bin/docker-compose [root@docker01 bin]# docker-compose -v docker-compose version 1.25.0, build 0a186604 //下載依賴包 [root@docker bin]# yum -y install yum-utils device-mapper-persistentdata lvm2
2、harbor離線模式
直接在百度搜 harbor進官網 harbor的部署方式,有線上和離線兩種方式,考慮到網速原因,這裡我們採用離線下載方式。
wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.4.tgz
[root@docker01 ~]# tar -zxf harbor-offline-installer-v2.0.2.tgz -C /usr/local/ [root@docker01 ~]# cd /usr/local/harbor/ [root@docker harbor]# ls common.sh harbor.v2.0.2.tar.gz harbor.yml.tmpl install.sh LICENSE prepare [root@docker01 harbor]# cp harbor.yml.tmpl harbor.yml [root@docker01 harbor]# vim harbor.yml
修改hostname=IP
註釋掉https,我們就用http就可以了。如果要用https需要開啟nginx sll為on
// 修改完配置檔案後,在的當前目錄執行./install.sh,Harbor服務就會根據當期目錄下的docker-compose.yml開始下載依賴的映象,檢測並按照順序依次啟動,並且注意,harbor預設使用的是80埠,最好確認是否有衝突,或者也可以在docker-compose.yml中修改對應的埠
[root@docker01 harbor]# systemctl daemon-reload [root@docker01 harbor]# systemctl restart docker [root@docker01 harbor]# ./install.sh
[root@docker01 harbor]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES af0d3f823c92 goharbor/registry-photon:v2.0.2 "/home/harbor/entryp…" About a minute ago Up 2 seconds (health: starting) 5000/tcp registry ce229f6b7e37 goharbor/harbor-db:v2.0.2 "/docker-entrypoint.…" About a minute ago Up 2 seconds (health: starting) 5432/tcp harbor-db a357025287c1 goharbor/harbor-log:v2.0.2 "/bin/sh -c /usr/loc…" About a minute ago Up 2 seconds (health: starting) 127.0.0.1:1514->10514/tcp harbor-log harbor-log
harbor使用
//在執行此命令是一定要在模板目錄下!
[root@docker01 harbor]# pwd /usr/local/harbor [root@docker harbor]# docker-compose start Starting log ... done Starting registry ... done Starting registryctl ... done Starting postgresql ... done Starting portal ... done Starting redis ... done Starting core ... done Starting jobservice ... done Starting proxy ... done [root@docker01 harbor]# netstat -anput | grep 80 tcp 0 0 127.0.0.1:51580 127.0.0.1:1514 ESTABLISHED 6286/dockerd tcp 0 0 127.0.0.1:1514 127.0.0.1:51580 ESTABLISHED 6474/docker-proxy tcp6 0 0 :::80 :::* LISTEN 8355/docker-proxy
docker client的設定
//因為docker不支援https的原因,我們也需要將docker的配置檔案進 行更改。
[root@docker02 /]# vim /usr/lib/systemd/system/docker.service ..... ExecStart=/usr/bin/dockerd --insecure-registry 192.168.1.10 .... [root@docker02 /]# systemctl daemon-reload [root@docker02 /]# systemctl restart docker
客戶端登入與上傳映象
[root@docker02 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE centos7 latest 7e6257c9f8d8 5 months ago 203MB [root@docker02 ~]# docker tag centos7:latest 192.168.1.10/test/centos:7 //重新打個標籤 [root@docker02 ~]# docker login -u admin -p Harbor12345 192.168.1.10 //登入 WARNING! Using --password via the CLI is insecure. Use --password-stdin. WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded [root@docker02 ~]# docker push 192.168.1.10/test/centos //上傳 The push refers to repository [192.168.1.10/test/centos] 613be09ab3c0: Pushed 7: digest: sha256:fe2347002c630d5d61bf2f28f21246ad1c21cc6fd343e70b4cf1e5102f8711a9 size: 529 [root@docker ~]# docker images //檢視harbor倉庫所有映象 REPOSITORY TAG IMAGE ID CREATED SIZE 192.168.1.10:5000/httpd-iso latest 740e9757f71d 4 hours ago 567MB
命令總結
#推送之前先登入Harbor docker login docker login registry.test.myop.com -u admin -p Harbor12345 提示success登入成功 檢視自己有哪些映象;docker images 把需要上傳到Harbor的映象執行如下命令就可以了 #映象打標籤 docker tag 映象名:標籤 私服地址/倉庫專案名/映象名:標籤 #推送到私服 docker push 私服地址/倉庫專案名/映象名:標籤 #從私服拉取映象 docker pull 私服地址/倉庫專案名/映象名:標籤 也可以在web介面複製下載路徑 #通過compose關閉harbor容器服務 docker-compose down