Docker仓库管理(harbor)
Harbor介绍
Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,由VMware开源,其通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有Registry服务器,Harbor 提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有 Registry 中,确保数据和知识产权在公司内部网络中管控,另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等
Harbor功能官方介绍
-
基于角色的访问控制: 用户与Docker镜像仓库通过“项目”进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限
-
镜像复制: 镜像可在多个Registry实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景
-
图形化用户界面: 用户可以通过浏览器来浏览,检索当前Docker镜像仓库,管理项目和命名空间
-
AD/LDAP 支: Harbor可以集成企业内部已有的AD/LDAP,用于鉴权认证管理
-
审计管理: 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理
-
国际化: 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来
-
RESTful API: 提供给管理员对于Harbor更多的操控, 使得与其它管理软件集成变得更容易
-
部署简单: 提供在线和离线两种安装工具, 也可以安装到vSphere平台(OVA方式)虚拟设备
Harbor组成
-
Proxy: 对应启动组件nginx。它是一个nginx反向代理,代理Notary client(镜像认证)、Docker client(镜像上传下载等)和浏览器的访问请求(Core Service)给后端的各服务
-
UI(Core Service): 对应启动组件harbor-ui。底层数据存储使用mysql数据库,主要提供了 四个子功能:
-
UI: 一个web管理页面ui
-
API: Harbor暴露的API服务
-
Auth: 用户认证服务,decode后的token中的用户信息在这里进行认证;auth后端可以接db、ldap、uaa三种认证实现
-
Token服务(上图中未体现): 负责根据用户在每个project中的role来为每一个docker push/pull命令发布一个token,如果从docker client发送给registry的请求没有带token,registry会重定向请求到token服务创建token
-
-
Registry: 对应启动组件registry。负责存储镜像文件,和处理镜像的pull/push命令。Harbor对镜像进行强制的访问控制,Registry会将客户端的每个pull、push请求转发到token服务来获取有效的token
-
Admin Service: 对应启动组件harbor-adminserver。是系统的配置管理中心附带检查存储用量,ui和jobserver启动时候需要加载adminserver的配置
-
Job Sevice: 对应启动组件harbor-jobservice。负责镜像复制工作的,他和registry通信,从一个registry pull镜像然后push到另一个registry,并记录job_log
-
Log Collector: 对应启动组件harbor-log。日志汇总组件,通过docker的log-driver把日志汇总到一起
-
DB: 对应启动组件harbor-db,负责存储project、 user、 role、replication、image_scan、access等的metadata数据
Harbor 的每个组件都是以 Docker 容器的形式构建的,因此,使用 Docker Compose 来对它进行部署。 总共分为7个容器运行,通过在docker-compose.yml所在目录中执行 docker-compose ps 命令来查看, 名称分别为:nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。 其中 harbor-adminserver 主要是作为一个后端的配置数据管理,并没有太多的其他功能。harbor-ui 所要操作的所有数据都通过 harbor-adminserver 这样一个数据配置管理中心来完成。
安装Harbor
1.安装 docker-compose 工具
[root@localhost data]# ls
docker-compose-Linux-x86_64_1.29.1 env_wordpress.list mysql
env_mysql.list harbor-offline-installer-v1.7.6.tgz
[root@localhost data]# cp docker-compose-Linux-x86_64_1.29.1 /usr/bin/docker-compose
[root@localhost data]# chmod +x /usr/bin/docker-compose
[root@localhost data]# docker-compose version
docker-compose version 1.29.1, build c34c88b2
docker-py version: 5.0.0
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l 10 Sep 2019
[root@localhost data]#
2.准备 Harbor软件
[root@localhost data]# tar xf harbor-offline-installer-v1.7.6.tgz
3.Harbor 工具介绍
[root@localhost data]# cd harbor/
[root@localhost harbor]# ls
common docker-compose.yml LICENSE
docker-compose.chartmuseum.yml harbor.cfg open_source_license
docker-compose.clair.yml harbor.v1.7.6.tar.gz prepare
docker-compose.notary.yml install.sh
4.修改Harbor 配置文件
[root@localhost harbor]#vim harbor.cfg
5 hostname = 192.168.91.106 # 主机
69 harbor_admin_password = 123456 # 密码
5.安装前准备
如果是快照还原先重启docker
防火墙
selinux
准备配置文件
[root@localhost harbor]#./prepare
6.执行安装脚本
执行脚本前将 端口号占用的 清理清理
[root@localhost harbor]#./install.sh
7.web端操作
7.1登录
用户名: admin 密码: 之前配置文件中修改的(123456)
7.2 新建项目
7.3 命令行登录
默认是走https 协议无法登录
[root@localhost harbor]# docker login 192.168.10.20
Username: admin
Password:
Error response from daemon: Get "https://192.168.10.20/v2/": dial tcp 192.168.10.20:443: connect: connection refused
需要修改 service 文件
[root@localhost ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock --insecure-registry 192.168.10.20 --insecure-registry 192.168.10.30
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl restart docker
[root@localhost ~]# docker login 192.168.10.20
Username: admin
Password:
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
[root@localhost ~]# cat /root/.docker/config.json
{
"auths": {
"192.168.10.20": {
"auth": "YWRtaW46MTIzNDU2"
}
}
7.4 测试上传仓库
[root@localhost ~]# docker pull nginx
#下载镜像
上传
[root@localhost ~]# docker push 192.168.10.20/test/nginx:latest
The push refers to repository [192.168.10.20/test/nginx]
d874fd2bc83b: Pushed
32ce5f6a5106: Pushed
f1db227348d0: Pushed
b8d6e692a25e: Pushed
e379e8aedd4d: Pushed
2edcec3590a4: Pushed
latest: digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3 size: 1570
更多推荐
所有评论(0)