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