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.tar.gz -C /usr/local/bin/ [root@docker01 ~]# cd /usr/local/bin/ [root@docker01 bin]# 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 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]# 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
[root@docker01 harbor]# systemctl daemon-reload [root@docker01 harbor]# systemctl restart docker [root@docker01 harbor]# ./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.…5432/tcp harbor-db a357025287c1 goharbor/harbor-log:v2.0.2 /bin/sh -c /usr/loc…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 ... Starting registryctl ... Starting postgresql ... Starting portal ... Starting redis ... Starting core ... Starting jobservice ... Starting proxy ... [root@docker01 harbor]# netstat -anput | grep 80 tcp 0 0 51580 1514 ESTABLISHED 6286/dockerd tcp 1514 51580 ESTABLISHED 6474/docker-proxy tcp6 0 :::80 :::* LISTEN 8355/docker-proxy
docker client的设置
[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 1.10/test/centos:7 重新打个标签 [root@docker02 ~]# docker login -u admin -p Harbor12345 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 1.10/test/centos 上传 The push refers to repository [centos] 613be09ab3c0: Pushed 7: digest: sha256:fe2347002c630d5d61bf2f28f21246ad1c21cc6fd343e70b4cf1e5102f8711a9 size: 529 [root@docker ~]# docker images 查看harbor仓库所有镜像 REPOSITORY TAG IMAGE ID CREATED SIZE 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