Harbor私有镜像仓库无坑搭建

一、介绍

Docker容器应用的开发和运行路不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境的Registry也是非常必要的。 Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC)、LDAP、日志审核、管理界面、自我注册、镜像复制和中文支持等功能。

二、组件

用于部署 Harbor 的 Docker Compose 模板位于 /Deployer/docker-compose.yml. 打开这个模板文件,会发现 Harbor 由 5 个容器组成:

proxy:由 Nginx 服务器构成的反向代理。
registry:由 Docker 官方的开源 registry 镜像构成的容器实例。
ui:即架构中的 core services, 构成此容器的代码是 Harbor 项目的主体。
mysql:由官方 MySql 镜像构成的数据库容器。
log: 运行着 rsyslogd 的容器,通过 log-driver 的形式收集其他容器的日志。
这几个容器通过 Docker link 的形式连接在一起,这样,在容器之间可以通过容器名字互相访问。对终端用户而言,只需要暴露 proxy (即 Nginx)的服务端口。

三、工作原理

假设我们将 Harbor 部署在主机名为 registry.abcdocker.com 的虚机上。用户通过 docker login 命令向这个 Harbor 服务发起登录请求:docker login registry.abcdocker.com当用户输入所需信息并点击回车后,Docker 客户端会向地址“registry.abcdocker.com/v2/” 发出 HTTP GET 请求。

Harbor 的各个容器会通过以下步骤处理:

(1)Docker login
(a) 首先,这个请求会由监听 80 端口的 proxy 容器接收到。根据预先设置的匹配规则,容器中的 Nginx会将请求转发给后端的 registry 容器;

(2) 在 registry 容器一方,由于配置了基于 token 的认证,registry 会返回错误代码 401,提示 Docker客户端访问 token 服务绑定的 URL。在 Harbor 中,这个 URL 指向 Core Services;

(3) Docker 客户端在接到这个错误代码后,会向token服务的URL发出请求,并根据HTTP协议的BasicAuthentication 规范,将用户名密码组合并编码,放在请求头部(header);

(4)类似地,这个请求通过 80 端口发到 proxy 容器后,Nginx 会根据规则把请求转发给 ui 容器,ui 容器监听 token 服务网址的处理程序接收到请求后,会将请求头解码,得到用户名、密码;

(5) 在得到用户名、密码后,ui 容器中的代码会查询数据库,将用户名、密码与 mysql 容器中的数据进行比对(注:ui 容器还支持 LDAP 的认证方式,在那种情况下 ui 会试图和外部 LDAP 服务进行通信并校验用户名/密码)。比对成功,ui 容器会返回表示成功的状态码, 并用密钥生成 token,放在响应体中返回给 Docker 客户端。这个过程中组件间的交互过程如下图所示

三、安装

环境ip主机名
harbor-server100.100.157.10k8s-master01
harbor-client100.100.157.11k8s-work01
harbor-client100.100.157.12k8s-work02

Harbor 2种安装方式

1.离线安装
wget https://github.com/goharbor/harbor/releases/download/v2.12.1/harbor-offline-installer-v2.12.1.tgz
tar xf harbor-offline-installer-v2.12.1.tgz 
2.在线安装
$ wget https://storage.googleapis.com/harbor-releases/harbor-online-installer-v1.5.2.tgz
$ tar xf harbor-online-installer-v1.5.2.tgz

[root@harbor harbor]# head harbor.yml

需:cp harbor.yml.tmpl harbor.yml

修改hostname :ip地址

修改port:默认端口号

注释https

image.png

本次我们使用离线安装,安装包在上面

$ tar xf harbor-offline-installer-v2.12.1.tgz 


cd harbor/

执行 prepare 命令来准备启动环境。这个过程会检查并准备相关的环境设置。
./prepare


完成准备后,运行以下命令来安装并启动 Harbor。这个过程会下载并运行 7 个镜像。
./install.sh

默认端口为80,需要修改端口请修改docker-compose.yaml对应服务的映射

  • 这里修改的端口为5000

3.1访问Harbor

访问:100.100.157.10:5000

Harbor 的默认用户名是 admin,默认密码是 Harbor12345

docker push 需要项目路径,需要Harbor 创建项目 k8s

3.2客户端配置免https

[root@k8s-work01 ~]# cat /etc/docker/daemon.json 
{
    "registry-mirrors": [
        "https://docker.1panel.dev",
        "https://docker.foreverlink.love",
        "https://dytt.online",
        "https://func.ink",
        "https://lispy.org",
        "https://docker.xiaogenban1993.com",
        "https://docker.xn--6oq72ry9d5zx.cn",
        "https://docker.zhai.cm",
        "https://docker.5z5f.com",
        "https://a.ussh.net",
        "https://docker.cloudlayer.icu",
        "https://docker.linkedbus.com",
        "https://docker.m.daocloud.io"
    ],
    "insecure-registries": [
        "100.100.157.10:5000"
    ],
    "exec-opts": ["native.cgroupdriver=systemd"]
}
[root@k8s-work01 ~]# systemctl reset-failed docker.service
[root@k8s-work01 ~]# systemctl restart docker

如果不配置,客户端使用时候会报错: Error response from daemon: Get https:// 172.16.1.146:5000/v1/\_ping: http: server gave
HTTP response to HTTPS client

3.3客户端登陆

docker login 需单独创建一个用户,否则push不了

image.png

image.png

[root@k8s-work01 ~]# docker login 100.100.157.10:5000
Username: hxy
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

四、管理镜像

4.1下拉镜像

docker pull nginx

4.2打标签

docekr tag 镜像名称:标签 你的IP:端口/harbor项目名称/镜像名称:标签 

docker tag nginx:latest 100.100.157.10:5000/k8s/nginx:latest

4.3上传


docker push 你的IP:端口/harbor项目名称/镜像名称:标签
docker push 100.100.157.10:5000/k8s/nginx:latest

4.4下拉

docker pull 100.100.157.10:5000/k8s/nginx:latest

image.png

正文到此结束
  • 本文作者:xinyu.he
  • 文章标题:k8s搭建私有镜像仓库Harbor
  • 本文地址:https://www.hxy.bj.cn/archives/103/
  • 版权说明:若无注明,本文皆Xinyu.he blog原创,转载请保留文章出处。
最后修改:2025 年 04 月 23 日
如果觉得我的文章对你有用,请随意赞赏