docker的企業級倉庫-harbor

林奮鬥的成長之路發表於2021-02-12
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

 

相關文章