文章目录
前言:
Habor是由VMWare公司开源的容器镜像仓库。事实上,Habor是在Docker Registry上进行了相应的企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访问控制 ,AD/LDAP集成以及审计日志等,足以满足基本企业需求。
Harbor简介
- 虽然Docker官方提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的。
- Harbor是由VMware公司开源的企业级的Docker
Registry管理项目,相比docker官方拥有更丰富的权限权利和完善的架构设计,适用大规模docker集群部署提供仓库服务。 - 它主要提供 Dcoker Registry 管理界面UI,可基于角色访问控制,镜像复制, AD/LDAP
集成,日志审核等功能,完全的支持中文。
harbor支持以下特性
RBAC 基于角色的权限控制( 是实施面向企业安全策略的一种有效的访问控制方式 )
基于策略的镜像复制
漏扫
LADP/AD支持
镜像删除和垃圾清理
Notary镜像签名
用户界面
审计
RESful api
安装简单(基于compose)
Harbor 部署
环境:
harbor :20.0.0.100 docker-ce、harbor、docker-compose
client : 20.0.0.101 docker-ce
安装compose 和 harbor
在线下载docker-compose包
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
cd /usr/local/bin/
chmod +x docker-compose '授权'
解压harbor到/usr/local/
wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
进入harbor修改harbor的参数文件harbor.cfg
vi /usr/local/harbor/harbor.cfg
hostname = 20.0.0.100 #修改为harbor服务器IP地址,不能使用 localhost 或者127.0.0.1
启动harbor
sh /usr/local/harbor/install.sh
....
Creating network "harbor_harbor" with the default driver
Creating harbor-log ... done
Creating harbor-adminserver ... done
Creating harbor-db ... done
Creating registry ... done
Creating harbor-ui ... done
Creating harbor-jobservice ... done
Creating nginx ... done
✔ ----Harbor has been installed and started successfully.----
Now you should be able to visit the admin portal at http://20.0.0.100.
For more details, please visit https://github.com/vmware/harbor .
查看镜像,容器
测试harbor 图形化管理
谷歌测试http://20.0.0.100 登录UI界面。
在harbor.cfg文件里可以找到登录UI界面的默认用户、密码。
创建一个项目aaa测试私有仓库的操作
Harbor端服务器本地上传镜像
此时可以使用Docker命令在本地通过127.0.0.1 来登录和推送镜像,默认情况下,Register服务器在端口80上倾听
终端登录Harbor
docker login -u admin -p Harbor12345 http://127.0.0.1/
在共有仓库中下载镜像
docker pull cirros
推送镜像到私有仓库
语法格式:docker tag [当前镜像] 仓库IP地址/项目名称/镜像名称
'定义镜像aa'
[root@controller harbor]# docker tag cirros 127.0.0.1/aaa/cirros:aa
'上传/推送镜像'
[root@controller harbor]# docker push 127.0.0.1/aaa/cirros:aa
[root@controller harbor]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
127.0.0.1/aaa/cirros aa f9cae1daf5f6 7 days ago 12.6MB
cirros latest f9cae1daf5f6 7 days ago 12.6MB
查看Harbor 镜像是否上传成功
其他终端想下载该镜像可以直接复制该命令(Harbor友好的功能之一)
PULL命令:docker pull 20.0.0.100/aaa/cirros:aa
客户机服务器远程使用Harbor
客户端服务器进行镜像下载、上传
注意:
如果其他客户端上传镜像到 Harbor,就会报
如下错误。出现这问题的原因 Docker Registry 交互默认使用的是 HTTPS,但是搭建私有镜
像默认使用的是 HTTP 服务,所以与私有镜像交互时出现以下错误。
解决方法:
必须要先指定私有仓库的地址 --insecure-registry
[root@client ~]# vim /usr/lib/systemd/system/docker.service
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 20.0.0.10 --containerd=/run/containerd/containerd.sock
[root@client ~]# systemctl daemon-reload
[root@client ~]# systemctl restart docker
再次登录Harbor
客户端下载、上传镜像到私有仓库
下载私有仓库的镜像
直接复制pull命令 直接下载
docker pull 20.0.0.100/aaa/cirros:aa
上传镜像到私有仓库
'先从官方仓库下载nginx镜像'
docker pull nginx
'镜像打标签'
[root@client1 ~]# docker tag nginx:latest 20.0.0.100/aaa/nginx:aa
'上传到私有仓库'
[root@client1 ~]# docker push 20.0.0.100/aaa/nginx:aa
客户端harbor 界面验证镜像是否上传到私有仓库。
切记要注意客户端远程登录私有仓库时,必须先在docker.service文件里指明仓库地址,然后加载并重启docker,之后才能登录。
Harbor 私有仓库管理维护
Harbor 管理维护
- Harbor私有仓库可以使用docker-compose进行管理,一些基本管理命令如下:
- 需注意,使用docker-compose命令时,必须在docker-compose.yml相同的目录运行
先关闭所有容器
[root@localhost harbor]# docker-compose down -v
修改配置文件
- 如上文所说,如修改所需参数,需要重新运行install.sh,如修改可选参数,则需运行脚本 ./prepare 将配置文件内容进行重新生效
[root@localhost harbor]# ./prepare
重新启动所有容器
[root@localhost harbor]# docker-compose up -d
创建Harbor用户
aaa项目 添加用户
邮箱最后改为xxz@net.cn 当时创建不了
需要给与用户管理项目的权限
使用新用户登录
- 首先现登出admin账户(在客户端操作)
'首先退出已登陆的账号'
[root@client1 ~]# docker logout 20.0.0.100
使用新用户登录(切换用户身份)
[root@client1 ~]# docker login 20.0.0.100
Username: xxz
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
上传一个镜像测试
tag
push
尝试设置开发,可以上传镜像 ,访问的话就无权限会报错!
denied: requested access to the resource is denied
被拒绝:所请求的对该资源的访问权限被拒绝