Docker-(6)docker中harbor的安装与部署

一、Harbor

Harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum可以提供存储chart数据的仓库【注:helm就相当于k8s的yum】。另外它还整合了两个开源的安全组件,一个是Notary,另一个是Clair,Notary类似于私有CA中心,而Clair则是容器安全扫描工具,它通过各大厂商提供的CVE漏洞库来获取最新漏洞信息,并扫描用户上传的容器是否存在已知的漏洞信息,这两个安全功能对于企业级私有仓库来说是非常具有意义的。
  
简单来说harbor就是VMWare公司提供的一个docker私有仓库构建程序,功能非常强大.

  1. 支持多租户签名和认证
  2. 支持安全扫描和风险分析
  3. 这次日志审计
  4. 基于角色的访问控制
  5. 支持可扩展的API和GUI
  6. Image replication between instances
  7. 国际化做的很好(目前仅支持英文和中文)

二、安装部署harbor v1.10.0

harbor git 地址:

https://github.com/goharbor/harbor

harbor支持k8s的helm安装和本地安装,我这次先择的安装方式是本地安装。

我的运行环境是 Rhel7.6。

安装准备

1.需要安装docker并运行,docker安装可以参考:
2.需要安装docker-compose

curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

给docker-compose执行权限,运行命令:

chmod +x /usr/local/bin/docker-compose

检查,运行docker-compose --version,如下:

[root@server1 ~]# docker-compose --version
docker-compose version 1.23.2, build 1110ad01

安装

  1. 下载安装包

下载地址:https://github.com/goharbor/harbor/releases

直接选择编译好的包

在这里插入图片描述

这里有两个包Harbor offline installer 和 Harbor online installer,两者的区别的是 Harbor offline installer 里就包含的 Harbor 需要使用的镜像文件。

下载成功,并解压

[root@server1 ~]# tar zxf harbor-offline-installer-v1.10.1.tgz 

进入解压的目录,并 ls

[root@server1 ~]# cd harbor/
[root@server1 harbor]# ls
common.sh  harbor.v1.10.1.tar.gz  harbor.yml  install.sh  LICENSE  prepare
  1. 编辑配置文件

harbor.yml 就是harbor的配置文件

harbor的数据目录为/data

编辑harbor.yml,修改hostname、https证书路径、admin密码
在这里插入图片描述证书的制作可以参考:https://blog.csdn.net/qq_35887546/article/details/105390681#_docker_285的第五部分。

注意:每次修改完配置文件后都需要运行

[root@server1 harbor]# ./prepare 

运行 ./install.sh

[root@server1 harbor]# ./install.sh 

在这里插入图片描述
运行成功,docker ps 查看,可以看到服务已经起来了。

在这里插入图片描述
常用管理命令

停止服务: docker-compose stop
开始服务: docker-compose start
重启服务:docker-compose restart
停止服务并删除容器:docker-compose down
启动服务并运行容器:docker-compose up

注意:这些命令均要在harbor目录下运行

三、GUIl界面使用

浏览器访问https://reg.westos.org:
在这里插入图片描述输入用户名admin,密码Harbor12345登陆:
在这里插入图片描述

新建一个项目,命名为 cl,并设置访问级别为公开。

在这里插入图片描述

这里的项目就是一私有化的Docker镜像仓库,默认的仓库是library。

四、本机上传拉取镜像

  1. 修改Docker配置

docker 默认是按 https 请求的
修改文件 /etc/docker/daemon.json

[root@server1 harbor]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://ioeo57w5.mirror.aliyuncs.com"]
}
{
"insecure-registries": ["reg.westos.org"]
}

然后重启docker

systemctl daemon-reload 
systemctl restart docker
  1. 制作镜像

将 ubuntu 制作成一个私有镜像,ubuntu 为我之前从 docker hub 上拉取的镜像。

docker tag ubuntu:latest reg.westos.org/cl/ubuntu:latest

本机上传

首先登陆私有库

[root@server1 harbor]# docker login reg.westos.org
Username: admin
Password: 			#这里输入默认密码Harbor12345
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

接下来进行PUSH:

[root@server1 harbor]# docker push reg.westos.org/cl/ubuntu
The push refers to repository [reg.westos.org/cl/ubuntu]
16542a8fc3be: Pushed 
6597da2e2e52: Pushed 
977183d4e999: Pushed 
c8be1b8f4d60: Pushed 
latest: digest: sha256:e5dd9dbb37df5b731a6688fa49f4003359f6f126958c9c928f937bec69836320 size: 1152

可以在网页端查看结果:
在这里插入图片描述
在这里插入图片描述

从后台已经能看到这个镜像了

本机拉取

[root@server1 harbor]# docker rmi reg.westos.org/cl/ubuntu		#删除原来的镜像
Untagged: reg.westos.org/cl/ubuntu:latest
Untagged: reg.westos.org/cl/ubuntu@sha256:e5dd9dbb37df5b731a6688fa49f4003359f6f126958c9c928f937bec69836320
[root@server1 harbor]# docker pull reg.westos.org/cl/ubuntu			#拉取镜像
Using default tag: latest
latest: Pulling from cl/ubuntu
Digest: sha256:e5dd9dbb37df5b731a6688fa49f4003359f6f126958c9c928f937bec69836320
Status: Downloaded newer image for reg.westos.org/cl/ubuntu:latest
reg.westos.org/cl/ubuntu:latest

五、远程主机上传下载镜像

准备一台安装好docker的虚拟机server2
首先需要做解析:

[root@server2 ~]# cat /etc/hosts
172.25.63.250   
172.25.63.1     server1 reg.westos.org

daemon文件配置:

[root@server2 ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://reg.westos.org"]
}

建立证书目录:

[root@server2 ~]#  mkdir -p /etc/docker/certs.d/reg.westos.org

把crt证书放到/etc/docker/certs.d/harbor.dinginfo.com目录下并命名为ca.crt:

[root@server2 ~]# ls /etc/docker/certs.d/reg.westos.org
ca.crt

然后,重启docker

systemctl daemon-reload
systemctl restart docker

再来登录:

[root@server2 ~]# docker login reg.westos.org
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@server2 ~]# docker tag nginx:latest reg.westos.org/cl/nginx
[root@server2 ~]# docker push reg.westos.org/cl/nginx
The push refers to repository [reg.westos.org/cl/nginx]
d37eecb5b769: Pushed 
99134ec7f247: Pushed 
c3a984abe8a8: Pushed 
latest: digest: sha256:7ac7819e1523911399b798309025935a9968b277d86d50e5255465d6592c0266 size: 948

网页端查看:
在这里插入图片描述说明上传成功

测试下载:

[root@server2 ~]# docker pull reg.westos.org/cl/ubuntu
Using default tag: latest
latest: Pulling from cl/ubuntu
5bed26d33875: Pull complete 
f11b29a9c730: Pull complete 
930bda195c84: Pull complete 
78bf9a5ad49e: Pull complete 
Digest: sha256:e5dd9dbb37df5b731a6688fa49f4003359f6f126958c9c928f937bec69836320
Status: Downloaded newer image for reg.westos.org/cl/ubuntu:latest
reg.westos.org/cl/ubuntu:latest

下载成功

六、harbor用户管理

1.创建用户
在网页端创建用户
在这里插入图片描述按要求创建完成:
在这里插入图片描述2.为用户在项目添加权限:
选择项目cl:
在这里插入图片描述为用户cl82添加为开发人员的权限:
在这里插入图片描述
在这里插入图片描述3.使用用户登陆系统

在这里插入图片描述
由于该用户是开发人员的权限,故其没有删除添加等权限,只有上传下载的权限。

4.测试上传下载
首先使用该用户登陆:

[root@server1 ~]# docker logout reg.westos.org		#之前登陆过,因此先logout
Removing login credentials for reg.westos.org
[root@server1 ~]# docker login reg.westos.org
Username: cl82
Password: 

上传:

[root@server1 ~]# docker tag busyboxplus:latest reg.westos.org/cl/busyboxplus:latest
[root@server1 ~]# docker push reg.westos.org/cl/busyboxplus:latest 
The push refers to repository [reg.westos.org/cl/busyboxplus]
5f70bf18a086: Pushed 
774600fa57ae: Pushed 
075a34aac01b: Pushed 
latest: digest: sha256:9d1c242c1fd588a1b8ec4461d33a9ba08071f0cc5bb2d50d4ca49e430014ab06 size: 1353

上传成功:
在这里插入图片描述下载:

[root@server1 ~]# docker rmi reg.westos.org/cl/busyboxplus:latest


[root@server1 ~]# docker pull reg.westos.org/cl/busyboxplus:latest 
latest: Pulling from cl/busyboxplus
Digest: sha256:9d1c242c1fd588a1b8ec4461d33a9ba08071f0cc5bb2d50d4ca49e430014ab06
Status: Downloaded newer image for reg.westos.org/cl/busyboxplus:latest
reg.westos.org/cl/busyboxplus:latest

下载成功。

七、harbor私有仓库

1.使用admin用户登陆网页端并将 cl 库设置为私有:
在这里插入图片描述
点击保存后:
在这里插入图片描述2.测试没有登陆从私有仓库拉取:

在这里插入图片描述不能拉取,登陆后再拉取就可以拉取成功:
在这里插入图片描述而共有仓库即使不登陆也可以拉取,但是不能上传。

也可以在网页端查看日志:
在这里插入图片描述

八、为harbor添加内容扫描

首先需要关闭之前的容器:

[root@server1 harbor]# docker-compose down

清理配置文件:

[root@server1 harbor]# ./prepare 

加上内容信任,扫描器和helm仓库重新安装:

[root@server1 harbor]# ./install.sh --with-notary --with-clair --with-chartmuseum

刷新网页端可以看到多了一些配置:
在这里插入图片描述可以看到以前上传的镜像都是没有经过扫描的,可以对已经上传的镜像进行扫描:
在这里插入图片描述在这里插入图片描述
也可以配置镜像上传的时候自动扫描:
在这里插入图片描述测试上传镜像:

[root@server1 harbor]# docker push reg.westos.org/library/base-debian10

可以看到正在扫描:
在这里插入图片描述

九、配置harbor内容签名

签名属于内容信任,没有签名的内容可以选择不部署。
在这里插入图片描述
可以看到刚上传的内容是没有签名的。

内容信任的服务端口是4443,接下来就进行harbor内容信任的配置:

可以参考:https://goharbor.io/docs/1.10/working-with-projects/working-with-images/pulling-pushing-images/#configure-notary-content-trust

1.将证书放在指定位置

[root@server1 ~]# cd /root/.docker/
[root@server1 .docker]# mkdir tls/
[root@server1 .docker]# cd tls/
[root@server1 tls]# mkdir reg.westos.org:4443
[root@server1 tls]# cd reg.westos.org\:4443/
[root@server1 reg.westos.org:4443]# cp /etc/docker/certs.d/reg.westos.org/ca.crt .
[root@server1 reg.westos.org:4443]# ls
ca.crt

2.打开内容信任功能:

[root@server1 reg.westos.org:4443]# export DOCKER_CONTENT_TRUST=1
[root@server1 reg.westos.org:4443]# export DOCKER_CONTENT_TRUST_SERVER=https://reg.westos.org:4443

配置完成。

3.测试上传

在网页端将刚上传的镜像删除后再进行上传测试:
注意:,签名与tag绑定,上传时必须指定tag,要不然会跳过签名。

在这里插入图片描述查看网页端发现镜像以签名:
在这里插入图片描述

之后上传时每次都需要输入根密钥和仓库密钥,而仅当tag不同时仅需要输入仓库密钥。

4.打开项目内容信任功能

即不允许没有签名的镜像上传下载。

修改ck库的配置:
在这里插入图片描述
下载cl库的未签名镜像发现不能下载:
在这里插入图片描述
5.删除签名镜像

以签名的镜像时不能删除的,如果需要删除则需要先删除签名:

先查看签名信息:

[root@server1 ~]# docker trust inspect reg.westos.org/library/base-debian10

删除签名:

[root@server1 ~]# docker trust revoke reg.westos.org/library/base-debian10

在这里插入图片描述删除过程中需要输入仓库密码。
此时查看网页端:
在这里插入图片描述
可以看到签名已经被删除,之后就可以删除镜像了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值