Docker之Harbor

Posted hello-tomcat

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker之Harbor相关的知识,希望对你有一定的参考价值。

Docker之Harbor

 

接着上1、2、3、4章继续研究docker

 

 

一:简介

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器。

镜像的存储harbor使用的是官方的docker registry(v2命名是distribution)服务去完成。harbor在docker distribution的基础上增加了一些安全、访问控制、管理的功能以满足企业对于镜像仓库的需求。harbor以docker-compose的规范形式组织各个组件,并通过docker-compose工具进行启停。

docker的registry是用本地存储或者s3都是可以的,harbor的功能是在此之上提供用户权限管理、镜像复制等功能,提高使用的registry的效率。Harbor的镜像拷贝功能是通过docker registry的API去拷贝,这种做法屏蔽了繁琐的底层文件操作、不仅可以利用现有docker registry功能不必重复造轮子,而且可以解决冲突和一致性的问题。

二:Harbor架构

技术图片

 

 

 


三:主要组件

Proxy:对应启动组件nginx。它是一个nginx反向代理,代理Notary client(镜像认证)、Docker client(镜像上传下载等)和浏览器的访问请求(Core Service)给后端的各服务; 
UI(Core Service):对应启动组件harbor-ui。底层数据存储使用mysql数据库,主要提供了四个子功能: 
UI:一个web管理页面ui; 
API:Harbor暴露的API服务; 
Auth:用户认证服务,decode后的token中的用户信息在这里进行认证;auth后端可以接db、ldap、uaa三种认证实现; 
Token服务(上图中未体现):负责根据用户在每个project中的role来为每一个docker push/pull命令issuing一个token,如果从docker client发送给registry的请求没有带token,registry会重定向请求到token服务创建token。 
Registry:对应启动组件registry。负责存储镜像文件,和处理镜像的pull/push命令。Harbor对镜像进行强制的访问控制,Registry会将客户端的每个pull、push请求转发到token服务来获取有效的token。 
Admin Service:对应启动组件harbor-adminserver。是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候需要加载adminserver的配置; 
Job Sevice:对应启动组件harbor-jobservice。负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log; 
Log Collector:对应启动组件harbor-log。日志汇总组件,通过docker的log-driver把日志汇总到一起; 
Volnerability Scanning:对应启动组件clair。负责镜像扫描 
Notary:对应启动组件notary。负责镜像认证 
DB:对应启动组件harbor-db,负责存储project、 user、 role、replication、image_scan、access等的metadata数据。 
 

四:安装

部署环境(一台主机即可):

centos-7.2

docker-engine-1.12.5

docker-compose-1.9.0

harbor-0.5.0

 

修改主机名和hosts文件

# hostnamectl --static set-hostname  docker-node1.com

# echo “192.168.91.134  docker-node1.com” > /etc/hosts

#sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/‘ /etc/selinux/config

#systemctl stop firewalld.service

#systemctl disable firewalld.service

如果没按docker安装

 

4.1、下载所需的软件包(以下需要-翻-墙-下载的地方你们自己解决吧......):

(1)下载docker-compose:

[root@docker-node1 ~]# curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current

                                 Dload  Upload   Total   Spent    Left  Speed

100   617    0   617    0     0    188      0 --:--:--  0:00:03 --:--:--   188

100 8280k  100 8280k    0     0   123k      0  0:01:07  0:01:07 --:--:-- 86789

[root@docker-node1 ~]# ll /usr/local/bin/docker-compose

-rw-r--r-- 1 root root 8479184 Aug  2 00:11 /usr/local/bin/docker-compose

[root@docker-node1 ~]# chmod +x /usr/local/bin/docker-compose

[root@docker-node1 ~]# docker-compose --version

docker-compose version 1.18.0, build 8dd22a9

 技术图片

 

 

 

 

(2)下载harbor:

[root@docker-node1 ~]# wget https://github.com/vmware/harbor/releases/download/0.5.0/harbor-offline-installer-0.5.0.tgz
#我下载的是offline离线包,这样在后续的部署及安装都会比较快,总共有300M左右的大小!

[root@docker-node1 ~]# tar zxvf harbor-offline-installer-0.5.0.tgz

 

(3)解压,配置harbor:

[root@docker-node1 ~]# tar zxvf harbor-offline-installer-0.5.0.tgz

[root@docker-node1 ~]# cd harbor/

 

[root@docker-node1 harbor]#  #vim harbor.cfg

修改hostname = harbor (启动harbor为主机名)
否则会报异常:
? Please set hostname and other necessary attributes in harbor.cfg first. DO NOT use localhost or 127.0.0.1 for hostname, because Harbor needs to be accessed by external clients.
Please set --with-notary if needs enable Notary in Harbor, and set ui_url_protocol/ssl_cert/ssl_cert_key in harbor.cfg bacause notary must run under https.
Please set --with-clair if needs enable Clair in Harbor

#这里只是简单的测试,所以只编辑这一行为本虚拟机的ip,其他的默认不做修改;当然也可以根据你自己的实际情况做修改!

 

(4)执行安装脚本:

#会拉取好几个镜像下来,及检查环境:

[root@docker-node1 harbor]# ./install.sh

 

 

 技术图片

 

 

 

 

 

(5)配置docker:

 

#因为docker默认使用的是https连接,而harbor默认使用http连接,所以需要修改docker配置标志insecure registry不安全仓库的主机!
#当然,harbor也可以设置为https,这个后续文章中再列出操作方法吧!

修改 /usr/lib/systemd/system/docker.service即可,三者选其一即可.

ExecStart=/usr/bin/dockerd-current

          --add-registry=192.168.91.134 --insecure-registry=192.168.91.134

#在ExecStart=/usr/bin/dockerd-current出添加-add-registry和--insecure-registry参数.

 

#只加上--insecure-registry这个参数即可。


#重启docker:
[root@docker-node1 harbor]# systemctl daemon-reload

[root@docker-node1 harbor]# systemctl restart docker.service

 

使用docker info验证:

[root@docker-node1 harbor]# docker info

输出最后一行有:

Registries: 192.168.91.134 (insecure), docker.io (secure)

 

 技术图片

 

 

 

 

 

 

Harbor容器的stop与start:

进入Harbor目录执行如下命令即可:

[root@docker-node1 harbor]# docker-compose stop

[root@docker-node1 harbor]# docker-compose start

Starting log        ... done

Starting ui         ... done

Starting mysql      ... done

Starting jobservice ... done

Starting registry   ... done

Starting proxy      ... done

[root@docker-node1 harbor]#

安装完成后会生成如下6个容器:

[root@docker-node1 harbor]# docker ps

 

 技术图片

 

 

 

 

 

 

 

到此便安装完成了,直接打开浏览器登陆即可:

默认用户密码是:admin/Harbor12345

 技术图片

 

 

 

 

 

五、推送测试:将本地镜像推送到docker私有仓库:

1、向Harbor推一个镜像:

首先登录Harbor的web界面并创建一个项目common.org

需要把项目设为公开

然后把需要上传的镜像命名为 ip:端口/项目名/镜像名:版本号 必须谨记。

 技术图片

 

 

 

 

 

 技术图片

 

 

 

2.查看本地的镜像:

 

先pull一个centos镜像:

[root@docker-node1 harbor]# docker pull docker.io/centos:latest

 

[root@docker-node1 harbor]# docker images

 技术图片

 

 

 

 

3.给centos镜像打tag:

[root@docker-node1 harbor]# docker tag docker.io/centos:latest 192.168.91.134/common.org/centos7:latest

4、推送至Harbor:

[root@docker-node1 harbor]# docker push 192.168.91.134/common.org/centos7:latest

 

 

登录Harbor web页面查看common.org项目下的镜像,如果common.org目录下存在centos7镜像,则说明推送成功.
 

 

三、从Harbor私有仓库上拉取一个镜像到客户机.

如果其他主机要拉取harbor仓库的镜像,也需要修改docker的配置文件,添加如下参数即可,并重启服务,其中ip为harbor仓库的地址.

# vim /etc/sysconfig/docker

 

OPTIONS=‘--insecure-registry=10.20.9.223‘

在客户端机器登陆harbor服务器,如果认证成功,即可以上传下载.

[root@dockr-client~]# docker login 10.20.9.223

Username (admin): admin

Password:

Login Succeeded

[root@dockr-client~]#

执行拉取镜像命令:

[root@docker-node ~]# docker pull 10.20.9.223/common.org/centos7:latest

Trying to pull repository 10.20.9.223/common.org/centos7 ...

latest: Pulling from 10.20.9.223/common.org/centos7

Digest: sha256:191c883e479a7da2362b2d54c0840b2e8981e5ab62e11ab925abf8808d3d5d44

Status: Image is up to date for 10.20.9.223/common.org/centos7:latest

[root@docker-node ~]#

如果想查看harbor仓库的有哪些镜像,直接在http://10.20.9.223/harbor 界面就可以搜索到镜像列表.

 

 

 

 

 

 

总结:

自己不小心使用docker rmi centos,等到想使用后发现没有这个镜像了(生产环境千万不要用,用也要小心)。

技术图片

 

 

 


解决:

就是从新pull一个呗。

 

 技术图片

 

 

 

 

如果遇到服务器重启后,docker-compose无法启动。

技术图片

 

 


解决方法:

重新初始化呗。(可能会出现传输关闭可能是网络不好,再多执行一个就可以了。)

[root@docker-node1 harbor]# ./install.sh 

 技术图片


————————————————
版权声明:本文为CSDN博主「yongbang_yan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_41515615/java/article/details/81370084

技术图片

 

以上是关于Docker之Harbor的主要内容,如果未能解决你的问题,请参考以下文章

14-docker系列-docker之harbor仓库的使用

docker之harbor仓库注意事项

docker搭建私有仓库之harbor

Docker仓库之Harbor

docker 之 registry私有仓库(harbor)

13-docker系列-docker之harbor仓库的搭建