Docker镜像仓库Harbor

196 阅读6分钟

Docker镜像仓库Harbor

什么是Harbor

harbor是一个由vm公司开源的企业级容器镜像仓库,有以下功能

  • 管理用户界面
  • 基于角色的访问控制
  • LDAP/AD 集成及日志审计等基本运维操作

harbor是构建企业级私有docker镜像的仓库的开源解决方案,它是 Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能外,它还整合了K8s的插件(Add-ons)仓 库,即Helm通过chart方式下载,管理,安装K8s插件,而chartmuseum 可以提供存储chart数据的仓库。

另外它还整合了两个开源的安全组件,一个是Notary,另一个是Clair,Notary类似 于私有CA中心,而Clair则是容器安全扫描工具,它通过各大厂商提供的 CVE漏洞库来获取最新漏洞信息,并扫描用户上传的容器是否存在已知的 漏洞信息,这两个安全功能对于企业级私有仓库来说是非常具有意义的。

Harbor的三种安装方式

这里我们使用离线安装

  • 在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小
  • 离线安装:安装包包含部署的相关镜像,因此安装包比较大
  • OVA安装程序(第三方):当用户具有vCenter环境时,使用此安装程序,在部署 OVA后启动

harbor 的基本组件

组件功能
harbor-adminserver配置管理中心
harbor-db数据库
harbor-jobservice镜像复制
harbor-log日志操作
harbor-uiWeb管理页面和API
nginx前端代理,负责前端页面和镜像上传/下载转发
redis会话
registry镜像存储

harbor离线安装

下载安装包

Harbor官方地址:github.com/goharbor/ha… 下载最新版安装包

image.png

百度网盘路径

链接:https://pan.baidu.com/s/19FoCe9z7ySGjcJShrVwS8g?pwd=zzyy 
提取码:zzyy 
复制这段内容后打开百度网盘手机App,操作更方便哦

准备环境

需要安装docker以及docker-compose的环境上面我们已提前安装了

解压安装包

解压harbor的安装包

tar -zxf harbor-offline-installer-v2.1.4.tgz

进入目录 然后将harbor.yml.tmp复制一份并该命为harbor.yml

cd harbor
cp harbor.yml.tmpl harbor.yml

image.png

修改harbor.yml

harbor作为私有仓库作用在公司内网,一般都是信任关系,没多大必要做https,使用http即可! 所以 把https相关的已经注释掉

image.png 并注意配置文件的用户名密码配置,默认是 用户名是:admin,密码是:Harbor12345,如果修改需要安装前修改

加载本地镜像

使用docker load命令加载本地镜像,不用再从dockerhub下载了

docker load -i harbor.v2.1.4.tar.gz

image.png

执行安装命令

执行预处理命令

先执行预处理命令,会创建一些文件夹,初始化一些文件

./prepare

image.png

还行安装命令

然后开始真正的安装过程

./install.sh

image.png

启动和停止harbor

在harbor的安装目录执行以下命令就可以启动和停止了

# 启动
docker-compose up -d 
# 停止
docker-compose stop 
# 重新启动
docker-compose restart 

harbor使用

访问harbor

输入 http://harborIP就可以直接访问了,这里访问我们的地址http://192.168.64.153/

image.png

输入用户名密码就可以登录了 ,如果没有修改配置文件 默认是 用户名是:admin,密码是:Harbor12345

image.png

Docker登录harbor

使用docker login命令就可以登录harbor了

docker login -u admin -p Harbor12345 192.168.245.165

image.png

我们发现登录报错了,这和registry一样,docker模式使用https方式,而我们使用的是http的方式登录

修改Docker配置

对于 Linux 系统,我们可以在 /etc/docker/daemon.jsondaemon.josn 文件不存在则新建该文件)

 vi /etc/docker/daemon.json

添加下面的配置

{ "insecure-registries": ["harbor地址"] }

完整的配置如下

{
   #因为默认端口号是80 所以不需要加端口号
  "insecure-registries": ["192.168.64.153"],
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}

重启Docker

执行以下命令重启重新加载配置并生效

systemctl daemon-reload
service docker restart

image.png

推送镜像

修改镜像tag

我们推送镜像我要把我们的镜像名称改成符合规范的格式

docker tag \
192.168.64.153:5000/learn-docker-storage:0.0.3 \
192.168.64.153/library/learn-docker-storage:0.0.3

image.png

推送镜像

可以通过docker push进行推送镜像,注意需要先登录在进行推送

docker push 192.168.64.153/library/learn-docker-storage:0.0.3

image.png

HarBor用户权限说明

HarBor用户角色在项目(项目-成员-新加成员)中为3类:项目管理员、开发人员、访客

  • 项目管理员:增删改查
  • 开发人员:上传和下载
  • 访客:只允许下载

Harbor支持Https(扩展)

为了支持微服务推送我们需要将HarBor设置为https,可以让HarBor在任何地方使用以及推送

生成SSL证书

前面说了怎么搭建harbor仓库,这里讲一讲harbor实现https访问,因为只需要内网访问,没必要去申请一个ssl证书,所以我就用openssl颁发自签名证书,实现https访问。

创建证书目录

mkdir -p /tmp/data/cert && cd /tmp/data/cert && ll

image.png

创建 CA 根证书

openssl req  -newkey rsa:4096 -nodes -sha256 -keyout ca.key -x509 -days 365 -out ca.crt -subj "/C=CN/L=beijing/O=itcast/CN=harbor-registry"

这里subj是主题的意思含义如下

C=国家,S=省(市),L=区(县、市),O=组织机构,OU=组织单位,CN=通用名称

生成证书签名

生成一个证书签名, 设置访问域名为itcastharbor.com

openssl req -newkey rsa:4096 -nodes -sha256 -keyout itcastharbor.com.key -out server.csr -subj "/C=CN/L=beijing/O=itcast/CN=itcastharbor.com"

生成主机证书

openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out itcastharbor.com.crt

操作步骤如下

image.png

配置harbor.yml

然后进入harbor安装目录修改harbor.yml,修改下面几个选项

  • hostname,使用IP或域名,不要用回环地址,localhost等
  • certificate,yourdomain.com.crt的路径/tmp/data/cert/itcastharbor.com.crt
  • private_key,yourdomainr.com.key的路径/tmp/data/cert/itcastharbor.com.key

image.png

重新安装harbor服务

停止harbor

停止运行中的服务

 docker-compose down

运行目录harbor下的prepare完成https的配置

./prepare

image.png

重新安装

在harbor目录下运行安装命令

./install.sh

image.png

修改Docker推送配置

我们需要将推送的IP改成域名

vi /etc/docker/daemon.json

上文中我们对registry已经操作了,这里需要改用harbor,需要重新配置

#因为默认端口号是80 所以不需要加端口号
{ "insecure-registries": ["仓库IP或域名"] }

完整的配置如下

{
  "insecure-registries": ["itcastharbor.com"],
  "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"]
}

执行以下命令重启重新加载配置并生效

systemctl daemon-reload
service docker restart
修改本地host文件

为了让本机能够正常访问到harbor的web环境需要配置本地的hosts文件增加如下配置

192.168.64.153 itcastharbor.com

windows环境下host路径在C:\Windows\System32\drivers\etc

域名访问harbor

通过域名访问harbor,域名就是我们刚才配置的itcastharbor.com域名访

image.png

image.png