前言
笔者通过和主持开发Habor的VMware中国研发团队负责人了解到,Habor开源项目致力于为企业级提供准生产环境中的Docker私有镜像仓库服务。事实上,也正是如此。
一、什么是Harbor
Harbor是一个企业级Registry服务。它对开源的Docker Registry服务进行了扩展,添加了更多企业用户需要的功能。Harbor被设计用于部署一套组织内部使用的私有环境,这个私有Registry服务对于非常关心安全 的组织来说是十分重要的。另外,私有Registry服务可以通过避免从公域网下载镜像而提高企业生产力。这对于没有良好的Internet连接状态,使用Docker Container的用户是一个福音。
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中国研发团队为企业用户设计的Registry Server开源项目,包括了权限管理(RBAC)、图形管理界面、LDAP/AD集成、审计、自我注册、HA等企业必需的功能,同时针对中国用户的特点,原生支持中文,并计划实现镜像复制(roadmap)等功能。
主要组件
Harbor系统由五个容器组成:Proxy、Core Services(包含UI, tokenservice和webhook)、Database、Registry和Log Collector。
各个容器之间的关系如下图所示:
图摘选自:
http://geek.csdn.net/news/detail/65989
二、快速部署
1、环境准备
1)加入 Docker源
# tee /etc/yum.repos.d/docker.repo << 'EOF' [dockerrepo] name=Docker Repository baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/ enabled=1 gpgcheck=1 gpgkey=https://yum.dockerproject.org/gpg EOF
安装EPEL源
# yum install -y epel-release
安装docker-engine
# yum install -y docker-engine
启动 Docker 服务
# systemctl daemon-reload # systemctl enable docker # systemctl start docker
2)配置DaoCloud镜像源,加速镜像下载(可选)
#sed -i 's|other_args="|other_args="--registry-mirror=http://768e1313.m.daocloud.io |g' /etc/sysconfig/docker #sed -i "s|OPTIONS='|OPTIONS='--registry-mirror=http://768e1313.m.daocloud.io |g" /etc/sysconfig/docker #sed -i 'N;s|/[Service/]/n|/[Service/]/nEnvironmentFile=-/etc/sysconfig/docker/n|g' /usr/lib/systemd/system/docker.service # sed -i 's|fd://|fd:// $other_args |g' /usr/lib/systemd/system/docker.service
3)查看Docker版本
# docker version
4)在正式安装之前,我们必须先安装docker-compose。
# yum -y install python-pip # pip install -U docker-compose
5)修改/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
6)重启Docker服务
# systemctl daemon-reload # systemctl restart docker
2、安装
注意:操作系统建议为CentOS 7.2。
首先,Clone该项目源代码:
# git clone https://github.com/vmware/harbor
快速部署Harbor的方式有两种,一种是source code,另一种是tgz文件压缩包。这里,我使用源代码方式安装。Harbor使用Docker-compose部署,后续所有的配置以及部署均在$HARBOR_HOME/Deploy/目录下完成,因此若无特别说明,操作步骤都在该目录下。
1) 配置harbor.cfg(必选)
在进行简单的配置,配置文件为harbor.cfg,配置项如下:
2)配置存储后端(可选)
默认情况下,Docker镜像存储在本地文件系统中。在生产环境中,您可能会考虑使用其他的存储后端,而不是本地文件系统,如S3,OpenStack Swift,Ceph、etc等,那么,你需要更新Deploy/templates/registry/config.yml文件中的storage配置部分。例如,如果你使用OpenStack Swift作为你的后端存储,部分可能看起来像这样:
storage: swift: username: admin password: ADMIN_PASS authurl: http://keystone_addr:35357/v3 tenant: admin domain: default region: regionOne container: docker_images
运行./prepare脚本更新配置,完成配置后,就可以使用docker-compose快速部署Harbor了。
# 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上下载hello-world镜像
# docker run hello-world
2)给镜像打标签,以便上传到私服,其中library是harbor默认提供的项目
# docker tag hello-world 172.16.74.150/library/hello-world
3)上传镜像
先登录镜像私服,执行以下指令,再输入用户名和密码
# docker login 172.16.74.150 Username: admin Password: //输入密码 Login Succeeded
上传镜像
# docker push 172.16.74.150/library/hello-world
4)在浏览器上访问172.16.74.150,登录完成后,点击library这个项目,即可看到上传的hello-world。
用户名: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,修改配置文件(/etc/default/docker)为:
DOCKER_OPTS="$DOCKER_OPTS --insecure-registry 172.16.74.150 "
其中172.16.74.150是我们部署Harbor的地址,即hostname配置项值。配置完后需要重启docker服务。
验证能否登录:
docker login 172.16.74.150
push成功后,我们就可以从Harbor仓库中使用docker pull拉取我们的镜像了,注意如果是私有项目,必须先使用docker login登录。
docker pull 172.16.74.150/library/hello-world
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
参考地址:
https://github.com/vmware/harbor