首页 Docker

利用 Harbor 创建自己的镜像仓库

pyweeX 发布于 06-27
Docker
pyweeX

利用 Harbor 创建自己的镜像仓库。

下载 Harbor,地址:https://github.com/goharbor/harbor/releases/download/v2.8.2/harbor-offline-installer-v2.8.2.tgz

完成后解压

  1. tar -zxvf harbor-offline-installer-v2.8.2.tgz
  2. cd harbor
  3. setenforce 0

设置主机名

  1. hostnamectl set-hostname node1.example.com

修改配置文件

  1. cp harbor.yml.tmpl harbor.yml
  2. # 进入配置文件
  3. vim harbor.yml
  4. # 下为要修改的地方
  5. hostname: node1.example.com // 添加主机名
  6. # 注释掉证书,如果不使用证书就需要注释
  7. # https related config
  8. #https:
  9. # https port for harbor, default is 443
  10. # port: 443 // 注释
  11. # The path of cert and key files for nginx
  12. # certificate: /your/certificate/path // 注释
  13. # private_key: /your/private/key/path // 注释
  14. harbor_admin_password: Harbor12345 // 默认的登录密码
  15. // 以上这些需要修改,其余保持默认

添加主机映射

  1. 192.168.179.3 node1.example.com

完成后开始安装

  1. ./install.sh

安装完成后会在当前目录产生 docker-compose.yaml 文件,运行这个文件,此后会产生多个容器,包含了它自己集成的 redis、mysql 等。

harbor安装

查看端口占用

  1. ss -antl

使用配置文件中的默认密码登录

go语言

新建一个项目,如名称叫做: shop

登录你的仓库

  1. docker login 192.168.179.3:8001 -u admin -p Harbor12345

如果在推送的时候报这个错

  1. Get "https://192.168.179.3:8801/v2/": dial tcp 192.168.179.3:8801: connect: connection refused

是因为 docker 默认使用 https,如果是在本地的话不需要 https,则配置 /etc/docker/daemon.json 文件

  1. vim /etc/docker/daemon.json

加入你的仓库,然后重启 docker。记得端口也要加进去,也就是你的 Harbor 的端口,它是通过配置文件 harbor.yml 声明。

  1. {
  2. "insecure-registries": ["192.168.179.3:8001"]
  3. }

注意事项

一、如果报这个错:

  1. Error response from daemon: Get "https://harbor.xxx.com/v2/": Get "http://debian:8091/service/token?account=admin&client_id=docker&offline_token=true&service=harbor-registry": dial tcp: lookup debian on 223.5.5.5:53: no such host

则是由于 Docker 守护进程无法解析主机名 debian 导致的,在你自己的机器做以下两项修改:

  1. # 将 harbor.xxx.com 的实际 ip 加入到 host 映射中
  2. vim /etc/hosts
  3. 192.168.23.66 debian
  4. # 修改 daemon.json 文件
  5. vim /etc/docker/daemon.json
  6. {
  7. "registry-mirrors": ["https://harbor.xxx.com"],
  8. }

二、我们的私有库是搭建在本地的测试环境主机中,我们在线上拉取镜像的时候 docker pull 会对域名进行解析,当请求进入测试环境的时候,如果没有做相应配置,则会报以下错误:

  1. err: Network traefik is external, skipping
  2. err: Pulling ****** (harbor.aaa.com/xxx/******:c096322f91)...
  3. err: Head "https://harbor.aaa.com/v2/xxx/******/manifests/c096322f91": Get "http://debian:8091/service/token?account=admin&scope=repository%3Abluetti%2F******%3Apull&service=harbor-registry": dial tcp: lookup debian on 100.100.2.138:53: no such host
  4. 2023/07/24 03:31:26 Process exited with status 1

这时候需要将 harbor 的配置修改为对应的实际地址,修改 harbor 项目目录下的文件:

  1. vim harbor/common/config/core/env

将里面的 EXT_ENDPOINT 改为实际的地址,这里对应的就是改为下面的即可

  1. https://harbor.aaa.com

harbor 无法连接

完成后重载或者重启 docker

  1. systemctl daemon-reload
  2. systemctl reload docker
  3. systemctl restart docker

推送镜像

  1. docker tag [ImageId] 192.168.179.3:8001/shop/你的自定义镜像名称:[tagID]
  2. docker tag f3a2b68ebe58 192.168.179.3:8001/shop/test:v1.0
  3. docker push 192.168.179.3:8001/shop/test:v1.0

harbor推送镜像

声明: 因编程语言版本更新较快,当前文章所涉及的语法或某些特性相关的信息并不一定完全适用于您当前所使用的版本,请仔细甄别。文章内容仅作为学习和参考,若有错误,欢迎指正。

讨论 支持 Markdown 语法 点击演示
回复
评论预览框

开发者

开发者·注册登录
  • 获取验证码
  • 取消