金庸武功之“打狗棒法”
一、什么是HarborHarbor是一个企业级Registry服务。它对开源的Docker
Registry服务进行了扩展,添加了更多企业用户需要的功能。Harbor被设计用于部署一套组织内部使用的私有环境,这个私有Registry服务对于非常关心安全的组织来说是十分重要的。另外,私有Registry服务可以通过避免从公域网下载镜像而提高企业生产力。这对于没有良好的Internet连接状态,使用DockerContainer的用户是一个福音。
Harbor是VMware公司最近开源的企业级Docker
Registry项目(https://github.com/vmware/harbor) 。其目标是帮助用户迅速搭建一个企业级的Docker
registry服务。它提供了管理UI, 基于角色的访问控制(Role Based Access
Control),AD/LDAP集成、以及审计日志(Audit logging)
等企业用户需求的功能,同时还原生支持中文。Harbor的每个组件都是以Docker容器的形式构建的,使用Docker
Compose来对它进行部署。
Harbor项目使用了go语言开发,WEB框架采用beego。容器应用的开发和运行离不开可靠的镜像管理。从安全和效率等方面考虑,在企业私有环境内部署的Registry服务是非常必要的。
Harbor(https://github.com/vmware/harbor)由VMware中国研发团队为企业用户设计的RegistryServer开源项目,包括了权限管理(RBAC)、图形管理界面、LDAP/AD集成、审计、自我注册、HA等企业必需的功能,同时针对中国用户的特点,原生支持中文,并计划实现镜像复制(roadmap)等功能。
主要组件
Harbor系统由五个容器组成:Proxy、Core Services(包含UI, tokenservice和webhook)、Database、Registry和Log Collector。
[*] Proxy提供反向代理服务,用户的不同请求由Proxy分发到后端的UI或者Registry。Harbor中使用的是官方的nginx镜像。
[*] Core Services是Harbor项目的核心组件,主要提供权限管理、审计、管理界面UI、token service以及可供其他系统调用的API等功能。
[*] Database提供数据持久化服务,采用了官方的mysql镜像。
[*] Registry是Docker官方的开源的Registry镜像,主要提供镜像的存储和分发功能。
[*] Log Collector负责收集其他容器的日志并进行日志轮转。
各个容器之间的关系如下图所示:
图摘选自:
http://geek.csdn.net/news/detail/65989
二、快速部署
1、环境准备
1)加入 Docker源
增加repo
tee /etc/yum.repos.d/docker.repo <<-'EOF'
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
yum install docker-engine -y
systemctl enable docker.service
systemctl start docker
安装EPEL源
yum install -y epel-release
yum -y install python-pip
pip install -U docker-compose
修改/usr/lib/systemd/system/docker.service文件,添加–insecure-registry IP地址。
#修改前#ExecStart=/usr/bin/docker daemon -H fd://
#修改后ExecStart=/usr/bin/docker daemon -H fd:// --insecure-registry 172.16.74.150
)重启Docker服务
# systemctl daemon-reload
# systemctl restart docker
2、安装
注意:操作系统建议为CentOS 7.2。
首先,Clone该项目源代码:
# git clone
vi/root/harbor/make/harbor.cfg
hostname:hostname为外部可访问的地址,即bind addr,通常设置为本地公有IP,若内部使用DNS,可设置为主机名;
harbor_admin_password:登录harbor界面admin用户的密码;
运行./prepare脚本更新配置完成配置后,就可以使用docker-compose快速部署Harbor了。(make目录下
然后:
cd /root/harbor/make/dev
docker-compose up -d
最后提示如下信息,便表示安装成功了。
.......
Creating deploy_log_1
Creating deploy_ui_1
Creating deploy_mysql_1
Creating deploy_registry_1
Creating deploy_proxy_1
安装完成后,访问Web UI,地址:http:// 172.16.74.150,即配置的hostname地址。
3、使用Harbor
1)从docker hub上下载busybox镜像
# docker run --rm -it busybox /bin/bash
2)给镜像打标签,以便上传到私服,其中library是harbor默认提供的项目
# docker tag busybox 192.168.93.205/sjwl/busybox
3)上传镜像
先登录镜像私服,执行以下指令,再输入用户名和密码
# docker login 192.168.93.205
Username: admin
Password:sjwl123 //输入密码
Login Succeeded
上传镜像
# docker push 192.168.93.205/sjwl/busybox
4)在浏览器上访问192.168.93.205,登录完成后,点击sjwl这个项目,即可看到上传的busybox。
用户名:admin
密码:xxxx
4、其他(可选)
以下附带harbor的启动、停止命令
$ sudo docker-compose up –d
$ sudo docker-compose stop
$ sudo docker-compose start
$ sudo docker-compose rm
$ rm -r /data/database
$ rm -r /data/registry 从客户端验证:
由于我们配置认证服务使用的是http,Docker认为是不安全的,要使用我们部署的镜像仓库,需要配置
docker启动项(因为我们使用的是1.12.13版本,没有配置文件了,所以只能修改启动项)
vi /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.93.205
systemctl restart docker
# systemctl restart docker
Warning: docker.service changed on disk. Run 'systemctl daemon-reload' to reload units.
这时你要先执行下systemctl daemon-reload
再执行次systemctl restart docker
这次修改的内容才生效,切记哦!
其中192.168.93.205是我们部署Harbor的地址,即hostname配置项值。配置完后需要重启docker服务。
验证能否登录:
docker login 192.168.93.205
push成功后,我们就可以从Harbor仓库中使用docker pull拉取我们的镜像了,注意如果是私有项目,必须先使用docker login登录。
docker pull 192.168.93.205/sjwl/busybox
5、Harbor作为mirror registry
Mirror是Docker Registry的一种特殊类型,它起到了类似代理服务器的缓存角色,在用户和Docker Hub之间做Image的缓存。 其基本工作原理是,当用户pull一个镜像时,若镜像在mirror服务器存在,则直接从mirror服务器拉取,否则若不存在该镜像,则由mirror
server自动代理往dockerhub(可配置)中拉取镜像,并缓存到mirror服务器中,当客户再次拉取这个镜像时,直接从mirror
server中拉取,不需要再次从docker hub中拉取。
Harbor目前不支持pull cache功能,已提交Github issue #120。不过我们只需要手动修改下配置即可完成,具体配置可查看官方Registry as a pull through cache。
我们在运行./prepare之前修改config/registry/config.yml文件,追加以下配置:
proxy:remoteurl: https://registry-1.docker.io
页:
[1]