16.Docker仓库——Docker Harhub
Docker仓库——Docker Harhub
介绍
Harbor是VMware公司开源的一个用于存储和分发Docker镜像的企业级Registry服务器,以Docker开源的Registry为基础,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全,提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中,确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。
vmware官方开源服务列表地址:https://vmware.github.io/harbor/cn
harbor官方gitlab地址:https://github.com/vmware/harbor
harbor官方地址:https://goharbor.io/
Harbor特性
- 基于角色的访问控制(Role Based Access Control)
- 基于策略的镜像复制(Policy based image replication)
- 镜像的漏洞扫描(Vulnerability Scanning)
- AD/LDAP集成(LDAP/AD support)
- 镜像的删除和空间清理(Image deletion & garbage collection)
- 友好的管理UI(Graphical user portal)
- 审计日志(Audit logging)
- RESTful API
- 部署简单(Easy deployment)
Harbor组件
- 依赖的外部组件:
- Nginx(Proxy): Harbor的Registry、UI、Token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。
- Registry v2: Docker官方镜像仓库, 负责储存Docker镜像,并处理Docker Push/Pull命令。由于我们要对用户进行访问控制,即不同用户对Docker镜像有不同的读写权限,Registry会指向一个Token服务,强制用户的每次Docker Push/Pull请求都要携带一个合法的Token, Registry会通过公钥对Token进行解密验证。
- Database(MySQL/Postgresql):为Core Services提供数据库服务,负责储存用户权限、审计日志、Docker镜像分组信息等数据。
- Harbor自己的组件:
- Core Services(Admin Server): 这是Harbor的核心功能,主要提供以下服务:
- API:提供Harbor RESTful API
- UI:提供图形化界面,帮助用户管理Registry上的镜像, 并对用户进行授权。
- Webhook:为了及时获取Registry上镜像状态变化的情况,在Registry上配置Webhook,把状态变化传递给UI模块。
- Auth服务:负责根据用户权限给每个Docker Push/Pull命令签发Token。Docker客户端向Registry服务发起的请求,如果不包含Token,会被重定向到这里,获得Token后再重新向Registry进行请求。
- Replication Job Service:提供多个Harbor实例之间的镜像同步功能。
- Log Collector:为了帮助监控Harbor运行,负责收集其他组件的日志,供日后进行分析。
- Core Services(Admin Server): 这是Harbor的核心功能,主要提供以下服务:
harbor架构图
安装harbor
下载地址:https://github.com/goharbor/harbor/releases
安装说明:https://goharbor.io/docs/
推荐使用1.7之前版本,1.7版本后与之前版本不兼容
离线安装
#部署docker&docker-compose(需要1.18以上)
yum install docker docker-compose -y
systemctl start docker && systemctl enable docker
#上传离线安装包
tar xvf harbor-offline-installer-<version>.tgz
#配置harbor.yml
hostname:目标机器的ip地址,可以是域名和公网ip,不能设置为127.0.0.1和localhost
data_volume:harbor数据的存放地址
harbor_admin_password:管理员密码,默认admin/Harbor12345 ,且只会生效一次
database:数据库相关配置,默认密码root123
jobservice
log:日志相关
- level: 日志的级别,debug, info, warning, error, fatal;
- rotate_count:最多保存几个日志文件
- rotate_size:每个日志文件的大小
- location:日志存放目录
#可选的参数。
- http:http服务的端口号
- https:
- port:端口号
- certificate:ssl证书
- private_key:ssl-key的路径
- external_url:external proxy启用的时候,external_url可用,但是hostname不再可用。
#执行
bash install.sh
#启动&关闭
docker-compose start
docker-compose stop
# 重启Harbor容器
docker-compose restart
# 停止并删除Harbor容器,加上-v参数可以同时移除挂载在容器上的目录
# docker-compose down
# 创建并启动Harbo容器,参数“-d”表示后台运行命令
# docker-compose up -d
#管理使用
# 如果某个Harbor组件启动失败,可以在日志目录/var/log/harbor下查看具体的日志信息,进一步定位启动失败的原因
# 启动时Harbor默认会监听宿主机的80、443、4443端口,启动Harbor之前必须确保宿主机的80、443、4443端口不被占用,否则Harbor相关组件会启动失败。
# 查看Harbor容器的运行状态
# docker ps
# 或者通过docker-compose查看,此时需要进入Harbor安装脚本所在的目录里执行相关命令
# cd /usr/local/harbor
# 查看Harbor容器的运行状态
# docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------------------------------------
harbor-adminserver /harbor/start.sh Up (healthy)
harbor-core /harbor/start.sh Up (healthy)
harbor-db /entrypoint.sh postgres Up (healthy) 5432/tcp
harbor-jobservice /harbor/start.sh Up
harbor-log /bin/sh -c /usr/local/bin/ ... Up (healthy) 127.0.0.1:1514->10514/tcp
harbor-portal nginx -g daemon off; Up (healthy) 80/tcp
nginx nginx -g daemon off; Up (healthy) 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp, 0.0.0.0:80->80/tcp
redis docker-entrypoint.sh redis ... Up 6379/tcp
registry /entrypoint.sh /etc/regist ... Up (healthy) 5000/tcp
registryctl /harbor/start.sh Up (healthy)
拉取/推送镜像
首先我们需要进行登录,docker login ip
这样的原因是因为Harbor默认使用http,docker默认使用https的原因。
我们可以强制docker使用http,要在daemon.json中添加--insecure-registry myregistrydomain.com,即
{
"log-driver":"json-file",
"log-opts": {"max-size":"100m", "max-file":"1"},
"insecure-registries" : ["myregistrydomain.com"]
}