Harbor是构建企业级私有docker镜像仓库的解决方案,它是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,他还整合了K8s的插件(Add-ons)仓库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum可以提供存储chart数据的仓库(注:helm就相当于k8s的yum)。另外它还整合了两个开源的安全组件,一个是Notary,另一个是Clair,Notary类似于私有CA中心,而Clair则是容器安全扫描工具,它通过各大厂商提供的CVE漏洞库来获取最新漏洞信息,并扫描用户上传的容器是否存在已知的漏洞信息,这两个安全功能对于企业级司有仓库来说是非常具有意义的。
Nexus是 Maven 仓库管理器,如果你使用Maven,你可以从Maven中央仓库下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地假设一个Maven仓库服务器,在代理远程仓库的同时维护本地仓库,以节省带宽和时间,Nexus就可以满足这样的需要。此外,他还提供了强大的仓库管理功能,构件搜索功能,它基于REST,友好的UI是一个extjs的REST客户端,它占用较少的内存,基于简单文件系统而非数据库。这些优点使其日趋成为最流行的Maven仓库管理器。
Notary是一个允许任何人信任任意数据集合的项目。Notary项目包括服务器和客户端,用于运行和可信集合交互。Notary旨在通过让人们轻松发布和验证内容,使互联网更加安全。我们经常依靠TLS来保护我们与WEB服务器的通信,这本身就存在缺陷,因为服务器被攻破时可使恶意内容替代合法内容。借助Notary,发布商可以使用保持高度安全的密钥离线签署其内容,一旦发布者准备好内容,他们可以将他们签名的可信集合推送到Notary服务器。消费者通过安全渠道获得了发布者的公钥,然后可以与任何Notary服务器或(不安全)镜像进行通信,仅依靠发布者的密钥来确定接收内容的有效性和完整性。Notary基于TUF项目,一个针对软件分发和更新问题的安全通用设计。
Clair:通过对容器的layer进行扫描,发现漏洞并进行预警,其使用数据是基于Common Vulnerabilities and Exposures数据库(简称CVE),各Linux发行版一般都有自己的CVE源,而Clair则是与其进行匹配以判断漏洞的存在与否,比如HeartBleed的CVE为:CVE-2014-0160。
Harbor:这是VMWare公司提供的一个docker私有仓库构建程序,功能非常强大 1、支持多租户签名和认证 2、支持安全扫描和风险分析 3、支持日志审计 4、基于角色的访问控制 5、支持可扩展的API和GUI 6、Image replication between instances 7、国际化做的很好(支持中文) 8、本身自带 docker 私有仓库Harbor部署 安装 前置条件
1、需要安装docker、docker-compose并运行docker
1、从GitHub上下载Harbor的二进制发行包。(GitHub地址:https://github.com/goharbor/harbor/releases)
2、下载成功、解压
tar xf harbor-offline-installer-v2.1.1.tgz cd harbor cp harbor.yml.tmpl harbor.yml
PS: 这里跟以前不一样,没有了harbor.cfg文件,我们需要手动复制harbor.yml.tmpl在做修改即可
3、修改harbor.yml
PS: harbor作为私有仓库作用在公司内网,一般都是信任关系,没多大必要做https,使用http即可!
所以 把https相关的已经注释掉
更改如下内容: hostname:192.168.1.22 port:81 注释https相关配置
PS:默认端口号为80,如机器80端口被占用的话后续安装harbor会报错,更改http配置port的值即可
4、安装harbor
./prepare ./install.sh
5、harbor的控制
docker-compose up -d 启动 docker-compose stop 停止 docker-compose restart 重新启动
6、访问Harbor
访问地址:http://192.168.1.22:81 默认的账号密码:admin/Harbor12345测试推送镜像
1、更改docker启动配置文件,添加私服指定配置项(添加在ExecStart行后) --insecure-registry 192.168.1.22:81
vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --graph=/data/docker-data --insecure-registry 192.168.1.22:81
重新加载配置并重启
systemctl daemon-reload systemctl restart docker.service
2、登陆harbor仓库
[root@Jenkins docker-data]# docker login -u admin -p Harbor12345 192.168.1.22:81 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@Jenkins docker-data]# ###上传镜像到私有库 docker pull nginx docker tag nginx:latest 192.168.1.22:81/lgh/nginx:v1.0 docker push 192.168.1.22:81/lgh/nginx:v1.0
刷新Harbor页面,nginx已上传到私服



