Loading... # 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-server | 100.100.157.10 | k8s-master01 | | harbor-client | 100.100.157.11 | k8s-work01 | | harbor-client | 100.100.157.12 | k8s-work02 | Harbor 2种安装方式 ```ruby 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  本次我们使用离线安装,安装包在上面 ```bash $ 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 ```csharp [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不了   ```csharp [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下拉镜像 ```undefined docker pull nginx ``` #### 4.2打标签 ```bash docekr tag 镜像名称:标签 你的IP:端口/harbor项目名称/镜像名称:标签 docker tag nginx:latest 100.100.157.10:5000/k8s/nginx:latest ``` #### 4.3上传 ```x86asm docker push 你的IP:端口/harbor项目名称/镜像名称:标签 docker push 100.100.157.10:5000/k8s/nginx:latest ``` #### 4.4下拉 ```bash docker pull 100.100.157.10:5000/k8s/nginx:latest ```  ``` 最后修改:2025 年 04 月 23 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 4 如果觉得我的文章对你有用,请随意赞赏