docker的企業級倉庫-harbor

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 //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