巧用Docker镜像仓库Harbor部署私有Mirror服务

本文作者付广平,UnitedStack有云存储工程师,北京邮电大学硕士,从事大数据和云计算相关工作,2016年毕业后加入UnitedStack大数据&容器组,负责Docker、Magnum和Sahara相关工作,Openstack、Docker社区活跃者。

作者别出心裁地使用Harbor搭建了私有Mirror服务,加速外部Docker镜像的下载。编者对原文做了少量修改。

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使用Docker-compose部署,后续所有的配置以及部署均在

$HARBOR_HOME/Deploy/

目录下完成,因此若无特别说明,工作目录都在该目录下。

首先需要进行简单的配置,配置文件为harbor.cfg,配置项如下:

hostname:hostname为外部可访问的地址,即bind addr,通常设置为本地公有IP,若内部使用DNS,可设置为主机名。

auth_mode:Harbor支持两种认证方式,默认为本地存储,即账号信息存储在mysql下,本文先使用本地存储方式,另外一种认证方式LDAP将在后续章节单独介绍。

设置完毕后,配置文件为:

运行./prepare脚本更新配置。完成配置后,就可以使用docker-compose快速部署Harbor:

docker-compose up -d

安装完成后,访问Web UI,地址:http://bind_addr,即配置的hostname地址,端口为80。如图:

使用Harbor

Web UI

安装完成后,打开Web UI,点击登录,默认账户admin/Harbor12345,登录成功后进入项目管理界面:用户可以点击“我的项目”进行项目管理,比如新建项目、用户以及权限管理等。点击项目名称,进入该项目下的镜像管理界面,可以查看、检索镜像。

Docker client

以上是UI界面的使用,接下来介绍如何使用docker client进行镜像的管理,由于Harbor只支持Registry V2 API,因此Docker client版本必须>= 1.6.0。

由于我们配置认证服务使用的是http,Docker认为是不安全的,要使用我们部署的镜像仓库,需要配置本地docker,修改配置文件(/etc/default/docker)为:

DOCKER_OPTS="$DOCKER_OPTS --insecure-registry 42.62.x.x"

其中42.62.x.x是我们部署Harbor的地址,即hostname配置项值。配置完后需要重启docker服务。

验证能否登录:

docker login 42.62.x.x

登录成功后显示如下:

接下来我们上传一个镜像,以ubuntu镜像为例,首先从docker hub拉取ubuntu镜像:

docker pull ubuntu:14.04

然后为该镜像打上新的标签,标签格式为:Harbor地址/项目名/镜像名称:镜像标签,如:

docker tag ubuntu:14.04 \

42.62.x.x/library/ubuntu:14.04

push我们的镜像到Harbor仓库中:

docker push ubuntu:14.04 \

42.62.x.x/library/ubuntu:14.04

push成功后,我们就可以从Harbor仓库中使用docker pull拉取我们的镜像了,注意如果是私有项目,必须先使用docker login登录:

docker pull 42.62.x.x/library/ubuntu:14.04

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

如果需要访问私有仓库,需要填写Docker Hub的用户名和密码:

proxy:

remoteurl: https://registry-1.docker.io

username: [username]

password: [password]

然后重新启动Harbor服务:

注意不要执行./prepare

docker-compose stop

docker-compose rm -f

docker-compose up -d

除了设置Harbor(或者registry),还需要配置本地docker服务,指定--registry-mirror参数,修改docker配置文件(/etc/default/docker):

DOCKER_OPTS="$DOCKER_OPTS --registry-mirror=http://42.62.x.x --insecure-registry
42.62.x.x"

注意替换42.62.x.x为你的registry地址。

注意:修改了docker配置文件,必须重启docker服务才能生效。

Harbor由于引进了认证功能,因此push操作时,必须保证project存在,比如push krystism/ffmpeg,必须保证Harbor创建了krystism project,否则会失败。为了能够正常push/pull
dockerhub的官方镜像,务必创建library project,如图:

假设本地不存在python镜像:

我们第一次pull python后,Harbor发现不存在该镜像,于是自己作为代理往Docker Hub里拉取,拉取后保存到本地,可以通过Web UI查看。客户端再次拉取python镜像时,由于Harbor已经存在该镜像,因此不需要再往Docker
Hub拉取,速度大幅度提高!

对接LDAP认证

Harbor支持两种认证方式,默认为本地存储,即账号信息存储在mysql下,上文已经具体介绍。接下来介绍另外一种认证方式LDAP,只需要修改配置文件即可。需要提供ldap url以及ldap basedn参数,并且设置auth_mode为ldap_auth。

快速部署LDAP服务

为了测试方便,我们使用Docker启动一个LDAP服务器,启动脚本如下:

!/bin/bash

NAME=ldap_server

docker rm -f $NAME 2>/dev/null

docker run --env LDAP_ORGANISATION="Unitedstack Inc." \

--env LDAP_DOMAIN="ustack.com" \

--env LDAP_ADMIN_PASSWORD="admin_password" \

-v pwd/containers/openldap/data:/var/lib/ldap
\

-v pwd/containers/openldap/slapd.d:/etc/ldap/slapd.d
\

--detach --name $NAME osixia/openldap:1.1.2

创建新用户,首先需要定义ldif文件,new_user.ldif:

dn: uid=test,dc=ustack,dc=com

uid: test

cn: test

sn: 3

objectClass: top

objectClass: posixAccount

objectClass: inetOrgPerson

loginShell: /bin/bash

homeDirectory: /home/test

uidNumber: 1001

gidNumber: 1001

userPassword: 1q2w3e4r

mail: [email protected]

gecos: test

通过以下脚本创建新用户,其中ldap_server为LDAP服务容器名称。

docker cp new_user.ldif ldap_server:/

docker exec ldap_server ldapadd -x \

-D "cn=admin,dc=ustack,dc=com" \

-w admin_password \

-f /new_user.ldif -ZZ

查看用户是否创建成功:

docker exec ldap_server ldapsearch -x -h localhost \

-b dc=ustack,dc=com -D "cn=admin,dc=ustack,dc=com" \

-w admin_password

检查test用户是否存在,若存在,则说明创建成功,否则需要使用docker logs查看日志。

配置Harbor使用LDAP认证

修改harbor.cfg文件关于LDAP配置项,如下:

auth_mode = ldap_auth

ldap_url = ldap://42.62.x.x

ldap_basedn = uid=%s,dc=ustack,dc=com

然后重新部署Harbor:

./prepare

docker-compose stop

docker-compose rm -f

docker-compose up -d

测试是否能够使用test用户登录:

docker login -u test -p 1q2w3e4r \

-e [email protected] 42.62.x.x

参考资料

Harbor项目:https://github.com/vmware/harbor

官方配置mirror registry文档:https://github.com/docker/dist
... or.md

Daocloud关于mirror的博客:http://blog.daocloud.io/daocloud-mirror-free/

openLDAP部署:https://github.com/osixia/docker-openldap

欢迎大家使用Harbor Registry和反馈意见,可到GitHub上的Issues区和我们互动。也可以关注公众号:“亨利笔记”,在后台发信息"入群",加入Harbor开源项目用户群交流。

时间: 2024-10-18 08:57:47

巧用Docker镜像仓库Harbor部署私有Mirror服务的相关文章

离线手动部署docker镜像仓库——harbor仓库(二)

前言: 在<离线手动部署docker镜像仓库--harbor仓库(一)>中,记录了离线部署harbor仓库的简单过程,这里主要记录修改默认访问端口80端口为1180端口的部署方式和注意点. 实验环境:harbor服务器系统:CentOS Linux release 7.4.1708 (Core)harbor服务器IP:10.0.0.101harbor版本:v1.5.0docker版本:1.13.1另外为了测试pull镜像,使用了另一台test102机器:10.0.0.102 部署过程: 1.下

Linux系统 Docker 镜像仓库Harbor

镜像仓库Harbor 一.Harbor 介绍 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的.Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC).LDAP.日志审核.管理界面.自我注册.镜像复制和中文支持等功能. 二. Docker-compose 安装 # curl -L https://github.c

docker 镜像仓库Harbor

企业级镜像仓库Harbor Harbor概述 Habor是由VMWare公司开源的容器镜像仓库.事实上,Habor是在Docker Registry上进行了相应的 企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访 问控制 ,AD/LDAP集成以及审计日志等,足以满足基本企业需求. 官方地址:https://vmware.github.io/harbor/cn/ 安装1.解压[[email protected] tools]# tar xf harbor-o

docker 镜像仓库Harbor https访问

配置harbor的https 为什么要配置https?因为后续你将镜像打包好放入到harbor仓库中,若是生产环境的镜像,会包含很多隐私的配置文件(db,redis等),需要用到https进行加密 参考文档:https://github.com/goharbor/harbor/blob/master/docs/configure_https.md 下载:https://github.com/goharbor/harbor/releases 下载:docker-composehttps://doc

企业级镜像仓库harbor部署和注意事项

harbor下载地址https://github.com/vmware/harbor/releases需要安装docker-compose#yum install python-pip #pip install docker-compose解压下载的harbor cd harbor修改harbor.cfg这个文件主要需要改动的地方就是hostname和访问协议如果是https访问还需要改动正确的证书位置.然后./prepare 加载配置文件然后./install.sh 安装这个时候就操作完毕可以

Docker镜像仓库Harbor搭建

园子里面已经有人写过了.也写得很好,我这里只记录下我遇到的问题 Harbor 依赖: 1:docker 2:docker-compose 怎么安装就不说了. 然后是安装Harbor github:https://github.com/goharbor/harbor/releases 下载: wget https://storage.googleapis.com/harbor-releases/release-1.9.0/harbor-offline-installer-v1.9.1-rc1.tg

docker进阶-搭建私有企业级镜像仓库Harbor

为什么要搭建私有镜像仓库 ??对于一个刚刚接触Docker的人来说,官方的Docker hub是用于管理公共镜像.既然官方提供了镜像仓库我们为什么还要去自己搭建私有仓库呢?虽然也可以托管私有镜像.我们可以非常方便的把我们自己镜像推送上去,但是Docker hub提供的私有仓库个数有限.对于个人来说Docker hub是个不错的选择,但是对于企业来说,相对于安全 ,成本和公司的架构来说搭建自己的私有镜像仓库才是正确的道路. 什么是Harbor?为什么要选择Harbor ??Harbor是一个用于存

私有镜像仓库Harbor基础介绍与部署

企业级私有镜像仓库Harbor 一:介绍 Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为docker容器的技术正是借鉴了集装箱的原理.所以,Harbor正是一个用于存储Docker镜像的企业级Registry服务. Registry是Docker官方的一个私有仓库镜像,可以将本地的镜像打标签进行标记然后push到以Registry起的容器的私有仓库中.企业可以根据自己的需求,使用Dokcerf

私有容器镜像仓库harbor

私有镜像仓库Harbor 1.Harbor概述 Habor是由VMWare公司开源的容器镜像仓库.事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及审计日志等,足以满足基本企业需求. 官方地址:https://vmware.github.io/harbor/cn/ 各组件功能如下: harbor-adminserver:配置管理中心 harbor-dbMysql