1

关于Harbor

Harbor是一个开放源代码容器映像镜像表,可通过基于角色的访问控制来保护镜像,扫描镜像中的漏洞并将镜像签名为受信任。

简单来说,Harbor就是一个开源的镜像管理仓库,类似Github一样,可以让我们存放一些镜像文件。即便我们以后换了一台服务器,也可以随时从Harbor仓库拉取镜像,不需要依赖本地服务器。

4a14dc586c611a2c23df610a49014f40.png

相对Registry,Harbor具有很多优势:

  • 提供分层传输机制,优化网络传输 Docker镜像是是分层的,而如果每次传输都使用全量文件(所以 用FTP的方式并不适合),显然不经济。必须提供识别分层传输的机制,以层的UUID为标识,确定传输的对象。
  • 提供WEB界面,优化用户体验 只用镜像的名字来进行上传下载显然很不方便,需要有一个用户界 面可以支持登陆、搜索功能,包括区分公有、私有镜像。
  • 支持水平扩展集群 当有用户对镜像的上传下载操作集中在某服务器,需要对相应的访问压力作分 解。良好的安全机制 企业中的开发团队有很多不同的职位,对于不同的职位人员,分配不同的权限, 具有更好的安全性。13b1841cb639dc310ac670ab98ca5c49.png更多详见官网:https://goharbor.io

2

搭建Harbor镜像仓库

首先可以到下面的github链接里选择一个harborrelease版本下载。

0281462008d3693585918b9e02e2541e.png

下载链接:https://github.com/goharbor/harbor/releases

上传并解压

tar -zxf harbor-offline-installer-v1.10.1.tgz 

进入harbor目录,使用vim harbor.yml修改以下配置项:

#设置域名hostname: 192.168.101.11#设置http参数# http related confighttp:  # port for http, default is 80. If https enabled, this port will redirect to https port  port: 8090  #设置管理员密码harbor_admin_password: evan123#屏蔽https#https:  # https port for harbor, default is 443 # port: 443

开启Docker Http访问权限

Docker默认是不支持http访问注册表,否则后面使用docker去访问harbor服务,会报如下错误:

http: server gave HTTP response to HTTPS client

所以需要先修改下/etc/docker/daemon.json配置:

{  "insecure-registries" : ["192.168.101.11:8090"]}

然后重启docker服务:

systemctl restart docker

启动Harbor

假如没有Docker环境,harbor会启动报错。前面也说过需要先安装Docker和docker-compose组件,大家可以搜索下相关的安装教程。

[root@manager-node harbor]# sh install.sh[Step 0]: checking if docker is installed ...Note: docker version: 19.03.7[Step 1]: checking docker-compose is installed ...Note: docker-compose version: 1.25.0[Step 2]: loading Harbor images ...Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

当启动Docker后,执行install.sh会自动完成安装:

[root@manager-node harbor]# sh install.sh...Creating network "harbor_harbor" with the default driverCreating harbor-log ... doneCreating harbor-portal ... doneCreating registry      ... doneCreating redis         ... doneCreating harbor-db     ... doneCreating registryctl   ... doneCreating harbor-core   ... doneCreating nginx             ... doneCreating harbor-jobservice ... done✔ ----Harbor has been installed and started successfully.----

访问Harbor并登陆

在浏览器输入上面我们配置的ip和端口192.168.101.11:8090,就会显示登录页面:eb7800f0d97dc46ddcb32dd279b9f446.png

接下来我们用上面的账号密码登录下:

e11664e67adb94e89f5e5fc009bba2d2.png

3

创建你第一个Harbor项目

创建项目,并使用Docker登陆Harbor

点击New会进入项目创建对话框,填入项目名称即可,访问级别我选择的public。

31e080e67adb58cd7ac86dedadff5820.png

在使用Harbor之前,要在docker环境登陆Harbor服务。

[root@manager-node harbor]# docker login 192.168.101.11:8090Username: adminPassword:WARNING! Your password will be stored unencrypted in /root/.docker/config.json.Configure a credential helper to remove this warning. Seehttps://docs.docker.com/engine/reference/commandline/login/#credentials-storeLogin Succeeded

对现有的Image打Tag,并发布到Harbor

[root@manager-node credit-facility]# docker imagesREPOSITORY                            TAG                              IMAGE ID            CREATED             SIZEcredit-facility-image                 latest                           28948b936fac        2 days ago          130MB

这里选择credit-facility-image打个标签,新标签为credit-facility:1.0

docker tag credit-facility-image:latest credit-facility:1.0

使用Harbor的ip地址和前面创建好的项目名称credit-facility进行发布。

[root@manager-node harbor]# docker push 192.168.101.11:8090/credit-facility/credit-facility-imageThe push refers to repository [192.168.101.11:8090/credit-facility/credit-facility-image]21f243c9904f: Pushededd61588d126: Pushed9b9b7f3d56a0: Pushedf1b5933fe4b5: Pushedlatest: digest: sha256:86a6289143d0a8a4cc94880b79af36416d07688585f8bb1b09fd4d50cd166f46 size: 1159

OK,我们已经成功上传镜像到Harbor仓库了。5543e60098a122c50736dc56332e1a0d.png

拉取Image到服务器

先把之前本地创建的镜像删除,以免混淆,然后查看本地镜像:

[root@manager-node harbor]# docker image rm 192.168.101.11:8090/credit-facility/credit-facility-image:latestUntagged: 192.168.101.11:8090/credit-facility/credit-facility-image:latestUntagged: 192.168.101.11:8090/credit-facility/credit-facility-image@sha256:86a6289143d0a8a4cc94880b79af36416d07688585f8bb1b09fd4d50cd166f46
[root@manager-node harbor]# docker imagesREPOSITORY                            TAG                              IMAGE ID            CREATED             SIZE

从Harbor仓库拉去镜像,并在本地镜像列表验证:

[root@manager-node harbor]# docker pull 192.168.101.11:8090/credit-facility/credit-facility-image:latestlatest: Pulling from credit-facility/credit-facility-imageDigest: sha256:86a6289143d0a8a4cc94880b79af36416d07688585f8bb1b09fd4d50cd166f46Status: Downloaded newer image for 192.168.101.11:8090/credit-facility/credit-facility-image:latest192.168.101.11:8090/credit-facility/credit-facility-image:latest
[root@manager-node harbor]# docker imagesREPOSITORY                                                  TAG                              IMAGE ID            CREATED             SIZE192.168.101.11:8090/credit-facility/credit-facility-image   latest                           28948b936fac        2 days ag

OK,到这里的话,我们的镜像已经成功安装到本地了,这样即便我们以后换了一台服务器,也可以随时从Harbor仓库拉取镜像,不需要依赖本地服务器。

如果你想了解更多Docker容器相关,欢迎参加8月7日晚的公开课。本次公开课主要围绕Docker容器技术入门和应用实战,系统介绍Docker容器技术、在企业中应用、以及网络管理、储存卷管理和部署Nginx、PHP、MySQL、Redis实战。

56797418d4d66c9652d7a6a04ab22e2b.png

作者:Evan Leung

ID:Evan Leung 分 享

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐