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组件

  • 依赖的外部组件:
    1. Nginx(Proxy): Harbor的Registry、UI、Token等服务,通过一个前置的反向代理统一接收浏览器、Docker客户端的请求,并将请求转发给后端不同的服务。
    2. Registry v2: Docker官方镜像仓库, 负责储存Docker镜像,并处理Docker Push/Pull命令。由于我们要对用户进行访问控制,即不同用户对Docker镜像有不同的读写权限,Registry会指向一个Token服务,强制用户的每次Docker Push/Pull请求都要携带一个合法的Token, Registry会通过公钥对Token进行解密验证。
    3. Database(MySQL/Postgresql):为Core Services提供数据库服务,负责储存用户权限、审计日志、Docker镜像分组信息等数据。
  • Harbor自己的组件:
    1. 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进行请求。
    2. Replication Job Service:提供多个Harbor实例之间的镜像同步功能。
    3. Log Collector:为了帮助监控Harbor运行,负责收集其他组件的日志,供日后进行分析。

harbor架构图

img

安装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"]
}

https://www.techgrow.cn/posts/99d575a6.html

原文地址:https://www.cnblogs.com/Gmiaomiao/p/14260504.html