一、安装底层需求
- Python应该是2.7或更高版本
- Docker引擎应为1.10或更高版本
- Docker Compose需要为1.6.0或更高版本
<1.>安装dokcer
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum update -y && yum install -y docker-ce ## 创建 /etc/docker 目录 mkdir /etc/docker # 配置 daemon. cat > /etc/docker/daemon.json <<EOF { "exec-opts": ["native.cgroupdriver=systemd"], "log-driver": "json-file", "log-opts": { "max-size": "100m" } "insecure-registries":["https://hub.atshooter.com"] } EOF #注意一定要加上 "insecure-registries":["https://hub.atshooter.com"] 这行授权地址 |
1 2 3 |
mkdir -p /etc/systemd/system/docker.service.d # 重启docker服务 加入开机启动 systemctl daemon-reload && systemctl restart docker && systemctl enable docker |

docker-compose安装:
1 2 3 4 5 |
curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose #授权 |
二、Harbor 安装
1 |
Harbor 官方地址:https://github.com/vmware/harbor/releases |
1、解压软件包:tar xvf harbor-offline-installer-.tgz
1 2 3 4 5 6 |
https://github.com/vmware/harbor/releases/download/v1.2.0/harbor-offline-installer-v1.2.0.tgz #解压 tar -zxvf harbor-offline-installer-v1.2.0.tgz #移动 mv harbor /usr/local/ |
2、配置harbor.cfg

harbor.cfg 必选参数
1 2 3 4 5 6 7 8 9 10 11 |
hostname:目标的主机名或者完全限定域名 ui_url_protocol:http或https。默认为http db_password:用于db_auth的MySQL数据库的根密码。更改此密码进行任何生产用途 max_job_workers:(默认值为3)作业服务中的复制工作人员的最大数量。对于每个映像复制作业, 工作人员将存储库的所有标签同步到远程目标。增加此数字允许系统中更多的并发复制作业。但是,由于每个工 作人员都会消耗一定数量的网络/ CPU / IO资源,请根据主机的硬件资源,仔细选择该属性的值 customize_crt:(on或off。默认为on)当此属性打开时,prepare脚本将为注册表的令牌的生成/验证创 建私钥和根证书 ssl_cert:SSL证书的路径,仅当协议设置为https时才应用 ssl_cert_key:SSL密钥的路径,仅当协议设置为https时才应用 secretkey_path:用于在复制策略中加密或解密远程注册表的密码的密钥路径 |
接下来创建https证书的存储目录(对应 harbor.cfg 里的目录)

1 2 |
mkdir -p /data/cert cd /data/cert |
3、创建 https 证书 以及 配置相关目录权限
1 2 3 4 5 6 7 |
openssl genrsa -des3 -out server.key 2048 #生成私钥 openssl req -new -key server.key -out server.csr #创建证书请求 cp server.key server.key.org #备份私钥 openssl rsa -in server.key -out server.key #退掉密码 openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt #签名 chmod a+x /data/cert |

注意:这里创建私钥输入的2次密码,下面创建证书时候要用到。

注意这个证书目录最好使用默认,修改后需要赋予权限,反正很麻烦,还会报错,尽量别改


1 |
chmod a+x /data/cert #目录授权 |
4、运行脚本进行安装(回到/usr/local/harbor目录安装)
1 2 |
./install.sh #注意:如果docker有事先运行的nginx容器,请删除,否则无法启动 |

安装完成后,给hosts文件加解析
1 |
echo "127.0.0.1 hub.atshooter.com" >> /etc/hosts #因为我用的vagrant ,所以这里是127.0.0.1 ,如果你是虚拟机,那这里就写你的虚拟机ip吧(桥接或者共享最好) |
#注意,使用https服务器要开启443端口,否则访问会拒绝连接
5、访问测试
1 2 |
https://hub.atshooter.com 的管理员门户(将reg.yourdomain.com更改为您的主机名,或者修改登录密码,都可以通过更改harbor.cfg文件完成) 请注意,默认管理员用户名/密码为admin / Harbor12345 |


harbor日志存储位置(方便报错或者启动不了调试)
1 |
/var/log/harbor/ #所有容器日志都在下面 |
6、上传镜像进行上传测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
a、指定镜像仓库地址 vim /etc/docker/daemon.json { "insecure-registries":["https://hub.atshooter.com"] #增加这行 } #注意一定要加上 "insecure-registries":["https://hub.atshooter.com"] 这行授权地址 b、下载测试镜像 docker pull hello-world c、给镜像重新打标签(注意在后台要事先新建你的项目目录,我这里使用的路径是默认的项目,library 一定要带项目路径否则提交不会成功,他不知道提交到你哪个项目) docker tag hello-world hub.atshooter.com/library/hello-world:v1.0 d、推送 docker push hello-world hub.atshooter.com/library/hello-world:v1.0 e、登录进行上传 docker login hub.atshooter.com |
7、其它 Docker 客户端下载测试
1 2 3 4 5 6 7 8 |
a、指定镜像仓库地址(其他要使用harbor仓库的docker都要加入如下配置) vim /etc/docker/daemon.json { "insecure-registries": ["hub.atshooter.com"] #增加这行 } #如上添加好后,拉取镜像进行测试 b、下载测试镜像 docker pull hub.atshooter.com/library/hello-world:latest |
我已经拉成功了

Harbor后台还可以增加管理用户,为你新建的项目,设置管理账户,当然设置管理账户后别人拉取镜像就需要权限(这个自行研究)
三、Harbor 原理说明
1、软件资源介绍
1 2 3 4 5 6 7 |
Harbor是VMware公司开源的企业级DockerRegistry项目,项目地址为https://github.com/vmware/harbor。其目 标是帮助用户迅速搭建一个企业级的Dockerregistry服务。它以Docker公司开源的registry为基础,提供了管理UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Auditlogging) 等企业用户需求的功 能,同时还原生支持中文。Harbor的每个组件都是以Docker容器的形式构建的,使用Docker Compose来对它进行部 署。用于部署Harbor的Docker Compose模板位于 /Deployer/docker-compose.yml,由5个容器组成,这几个容器通过 Docker link的形式连接在一起,在容器之间通过容器名字互相访问。对终端用户而言,只需要暴露 proxy ( 即 Nginx)的服务端口 |
proxy:由Nginx 服务器构成的反向代理。
Registry:由Docker官方的开源 registry 镜像构成的容器实例。
UI:即架构中的 core services, 构成此容器的代码是 Harbor 项目的主体。
MySQL:由官方 MySQL 镜像构成的数据库容器。
Log:运行着 rsyslogd 的容器,通过 log-driver 的形式收集其他容器的日志
Harbor 特性
1 2 3 4 5 6 7 |
a、基于角色控制:用户和仓库都是基于项目进行组织的, 而用户基于项目可以拥有不同的权限 b、基于镜像的复制策略:镜像可以在多个Harbor实例之间进行复制 c、支持LDAP:Harbor的用户授权可以使用已经存在LDAP用户 d、镜像删除 & 垃圾回收:Image可以被删除并且回收Image占用的空间,绝大部分的用户操作API, 方便用户对系统进行扩展 e、用户UI:用户可以轻松的浏览、搜索镜像仓库以及对项目进行管理 f、轻松的部署功能:Harbor提供了online、offline安装,除此之外还提供了virtualappliance安装 g、Harbor 和 docker registry 关系:Harbor实质上是对 docker registry 做了封装,扩展了自己的业务模块 |
3、Harbor 认证过程
1 2 3 4 5 6 7 8 |
a、dockerdaemon从docker registry拉取镜像。 b、如果dockerregistry需要进行授权时,registry将会返回401 Unauthorized响应,同时在响应中包含了docker client如何进行认证的信息。 c、dockerclient根据registry返回的信息,向auth server发送请求获取认证token。 d、auth server则根据自己的业务实现去验证提交的用户信息是否存符合业务要求。 e、用户数据仓库返回用户的相关信息。 f、auth server将会根据查询的用户信息,生成token令牌,以及当前用户所具有的相关权限信息.上述就是 完整的授权过程.当用户完成上述过程以后便可以执行相关的pull/push操作。认证信息会每次都带在请求头中 |

4、Harbor 认证流程
1 2 3 4 5 6 7 8 |
a、首先,请求被代理容器监听拦截,并跳转到指定的认证服务器。 b、 如果认证服务器配置了权限认证,则会返回401。通知dockerclient在特定的请求中需要带上一个合法的 token。而认证的逻辑地址则指向架构图中的core services。 c、 当docker client接受到错误code。client就会发送认证请求(带有用户名和密码)到coreservices进行basic auth认证。 d、 当C的请求发送给ngnix以后,ngnix会根据配置的认证地址将带有用户名和密码的请求发送到core serivces。 e、 coreservices获取用户名和密码以后对用户信息进行认证(自己的数据库或者介入LDAP都可以)。成功以后,返回认证成功的信息 |

- 本文固定链接: https://www.yoyoask.com/?p=1839
- 转载请注明: shooter 于 SHOOTER 发表