Docker搭建Harbor镜像仓库
本文发布于629天前,本文最后更新于617 天前,其中的信息可能已经过时,如有错误请留言或评论。

前提

安装Harbor之前需要安装docker

详细可参考Docker入门教程1 - The-Starry-Sky (suyou.world)

安装Harbor

下载并解压Harbor的离线安装包。可以从Harbor的GitHub存储库页面(https://github.com/goharbor/harbor/releases)下载最新的离线安装包。

wget https://github.com/goharbor/harbor/releases/download/v2.3.0/harbor-offline-installer-v2.3.0.tgz
tar xvf harbor-offline-installer-v2.3.0.tgz
cd harbor

编辑安装配置文件harbor.yml

在配置harbor.yml文件之前,确保已安装了Docker和Docker Compose,并已从Harbor官方网站下载了最新的harbor-offline-installer安装程序。

  1. 在计划存储Harbor数据的位置创建一个目录。例如,如果要将Harbor数据存储在/data/harbor目录中,请使用以下命令:
     mkdir -p /data/harbor
  2. 复制Harbor安装程序中的harbor.yml.tmpl文件,并将其命名为harbor.yml。例如,使用以下命令:
    cd harbor-offline-installer  # 也可能为cd harbor
    cp harbor.yml.tmpl harbor.yml
  3. 编辑Harbor的配置文件'harbor.yml',以指定安装选项和配置参数
    vim harbor.yml
  4. 在编辑文件时,请注意以下参数:
    • hostname:指定Harbor服务器的主机名或IP地址。
    • https:如果希望使用HTTPS协议,请将此选项设置为'on'。
    • harbor_admin_password:指定Harbor管理员账户的密码。
    • data_volume:指定Harbor数据存储卷的路径。
    • clair:是否启用Clair漏洞扫描服务。
    • database:Harbor使用的数据库类型和连接参数。
    • redis:Harbor使用的缓存服务类型和连接参数。
  5. 示例:
    • 将Harbor安装在https://harbor.example.com地址,并启用HTTPS协议和Clair漏洞扫描服务
      hostname: harbor.example.com
      https:
        port: 443
        certificate: /path/to/cert.pem
        private_key: /path/to/key.pem
      harbor_admin_password: Harbor12345
      data_volume: /data/harbor
      clair:
        updaters_interval: 12h
      database:
        type: postgresql
        password: Harbor12345
        max_idle_conns: 50
        max_open_conns: 1000
        sslmode: disable
      redis:
        password: Harbor12345
        max_idle: 50
        max_active: 1000
      registry_storage_provider:
        name: filesystem
        config:
          rootdirectory: /data/registry
      
      
    • Harbor将在https://harbor.example.com地址上运行
    • 使用证书和密钥文件/path/to/cert.pem和/path/to/key.pem
    • 管理员密码为Harbor12345
    • 数据将存储在/data/harbor目录中
    • Clair漏洞扫描服务将在每12小时更新一次
    • 使用PostgreSQL数据库
    • 并使用密码Harbor12345和最大空闲连接数和最大打开连接数等参数进行配置
    • 此外,Redis将使用密码Harbor12345和最大空闲和最大活动连接等参数进行配置。
    • registry_storage_provider的name被设置为filesystem,表示使用文件系统来存储镜像。config则指定了文件系统的根目录为/data/registry。如果想使用其他存储方式,可以将name设置为对应的存储提供程序的名称,例如s3、gcs等。对应的config配置也会有所不同,具体可以参考Harbor的官方文档。
  6. 运行Harbor的安装脚本,并指定配置文件的路径。
    sudo ./install.sh --with-notary --with-trivy --harbor-admin-password <your_password> --config ./harbor.yml
    #若不安装notary等则可直接sudo ./install.sh
  7. 在安装过程中,需要输入Harbor管理员账户的密码。此外,还可以选择安装Harbor的附加组件Notary和Trivy。

安装完成

安装完成后,使用以下命令启动Harbor服务:

sudo docker-compose up -d

配置Harbor

要使用Harbor,需要先通过管理界面配置仓库和用户帐户。在浏览器中,输入Harbor服务器的主机名或IP地址,例如:"http://<your_server_ip>"。需要使用之前指定的Harbor管理员帐户登录管理界面,以访问和配置Harbor的各个功能。

在管理界面中,可以执行以下操作:

  • 创建仓库:可以创建新的仓库,并为每个仓库指定名称、描述、存储位置和访问权限等属性。
  • 添加镜像:可以将Docker镜像上传到Harbor,并将其存储在相应的仓库中。还可以指定每个镜像的标记和元数据信息。
  • 管理用户帐户:可以创建和管理用户帐户,并为每个帐户指定相应的角色和权限。例如,可以为每个用户指定是否允许拉取或推送特定的镜像。
  • 监控镜像安全:如果安装了附加组件Notary和Trivy,可以使用这些组件监控Harbor中的镜像安全性,并检测可能存在的漏洞和安全问题。
  • 配置系统设置:可以配置Harbor的系统设置,并指定各种选项,例如SMTP服务器设置、日志记录选项和访问控制策略等。

使用Harbor

  1. 从拉取Harbor拉取镜像:
     docker pull <harbor_server>/<repository>/<image>:<tag>
    • <harbor_server>是Harbor服务器的主机名或IP地址
    • <repository>是存储镜像的仓库名称
    • <image>是镜像的名称
    • <tag>是镜像的标记。
  2. 推送镜像到Harbor
    docker tag <image> <harbor_server>/my-repo/<image>:<tag>
    docker push <harbor_server>/my-repo/<image>:<tag>
    • <image>是要推送的镜像的名称
    • <tag>是镜像的标记。
  3. 登录到Harbor
     docker login <harbor_server>
    • <harbor_server>是Harbor服务器的主机名或IP地址
    • 输入用户名和密码,输入之前在Harbor中创建的帐户凭据。
    • 用户名和密码验证成功后,Docker客户端将在本地配置文件中存储用户身份验证令牌。然后就可以使用Docker客户端与Harbor进行交互,并拉取或推送Docker镜像。
  4. 关闭Harbor
    • 登录到Harbor所在的服务器上,执行以下命令停止Harbor服务:
       docker-compose down -v

      该命令会停止并删除Harbor的所有相关容器和卷。如果需要保留Harbor的数据和配置信息,可以不使用-v参数。

  5. 重新启动Harbor
     docker-compose up -d

    该命令会重新启动Harbor的所有相关容器。

拉取镜像到Harbor

  • 编写脚本批量拉取镜像
    1. 设置Harbor服务器和仓库名称:
      HARBOR_SERVER=<harbor_server>
      HARBOR_REPO=<harbor_repository>
      • 将<harbor_server>替换为Harbor服务器的主机名或IP地址
      • 将<harbor_repository>替换为要推送镜像的仓库名称。
    2. 设置源镜像的名称和标签:
      SOURCE_IMAGES=(
          "quay.io/library/nginx:latest"
          "docker.io/library/redis:latest"
          "docker.io/library/mysql:latest"
      )
      
      
      • 拉取来自Quay.io的nginx镜像和Docker Hub上的redis和mysql镜像
    3. 环遍历源镜像,并拉取、重命名和推送镜像:
      for image in "${SOURCE_IMAGES[@]}"
      do
          # Pull the source image
          docker pull $image
          # Get the image name and tag
          image_name=$(echo $image | cut -d '/' -f 3)
          image_tag=$(echo $image | cut -d ':' -f 2)
          # Tag the image for Harbor
          harbor_image=$HARBOR_SERVER/$HARBOR_REPO/$image_name:$image_tag
          docker tag $image $harbor_image
          # Push the image to Harbor
          docker push $harbor_image
      done
      • 对于每个源镜像,脚本将首先使用docker pull命令从源镜像站点拉取镜像。
      • 然后,它将使用cut命令从镜像名称中提取镜像名称和标签。
      • 接下来,它将使用docker tag命令将镜像重新标记为Harbor仓库中的名称和标签。
      • 最后,它将使用docker push命令将镜像推送到Harbor仓库。

解决报错

  1. 登录Harbor显示核心服务不可用
    1. harbor-db出现错误

       docker ps -a # 找到harbor-db对应镜像的<container id>
      docker logs -tf <container id> # 查看日志

      可能是因为 PostgreSQL 请求了一个超出可用内存、交换空间或巨型页面的共享内存段。可以通过增加系统可用内存或调整 PostgreSQL 的共享内存使用情况来解决该问题

      • 操作
        1. 执行命令 free -h 查看系统内存使用情况,确保可用内存足够支持 PostgreSQL 运行。
        2. 在 harbor.yml 文件中,找到 database 部分,通过减少shared_buffers或max_connections等参数来减少PostgreSQL的共享内存使用
          database:
          ...
            parameters: # 根据自己的情况修改大小
              shared_buffers: "256MB"
              max_connections: "100"
          ...
        3. 重新启动harbor
  2. 登录或者拉取推送镜像时报错
    docker login harbor 报错Error response from daemon: Get https://***/v2/: dial tcp ***:443: connect: connection refused
    或者docker login harbor 报错Error response from daemon: Get http://***/v2/: dial tcp ***:80: connect: connection refused

    • 解决方法:两种二选一,同时用后面会出现一系列问题
      1. 在 /etc/docker/daemon.json 的解决办法:添加 insecure-registries 即可
        {
            "insecure-registries": ["1.1.1.1:80"] #此处替换为harbor服务的ip地址
        }
      2. 在 /usr/lib/systemd/system/docker.service 解决办法:在 ExecStart 添加 --insecure-registry
         ExecStart=/usr/bin/dockerd --insecure-registry=1.1.1.1:80 #此处替换为harbor服务的ip地址
      3. 重启docker与harbor
         #若采用第二种方法则需要多运行以下指令
        systemctl daemon-reload
        #重启docker
        systemctl restart docker
        #重启harbor(使用docker-compose重启需要在harbor目录下)
        docker-compose down
        docker-compose up -d
      4. 若依旧出现上述报错,则可能是由于修改了harbor服务端口导致,在登录时ip地址后加上你所设置的端口号即可成功登录

常见镜像站

参考:

报错参考:https://www.cnblogs.com/namedgx/p/15392778.html

大佬搭建过程参考:https://blog.csdn.net/youmatterhsp/article/details/105868624

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇