ITPub博客

首页 > 云计算 > Docker/K8 > Harbor镜像仓库实战指南:从安装到高级管理的全面解析

Harbor镜像仓库实战指南:从安装到高级管理的全面解析

原创 Docker/K8 作者:shuchaoyang 时间:2024-12-09 21:51:08 0 删除 编辑

Harbor镜像仓库实战指南:从安装到高级管理的全面解析 一、安装Docker 1.1 安装必要的依赖包 1.2 添加软件源的GPG密钥及docker源 1.2.1 添加Docker源的GPG密钥 1.2.2 添加Docker源 1.3 选择安装指定稳定版 1.3.1 查询可以安装的Docker版本信息 1.3.2 指定Docker版本安装 1.3.3 查看Docker信息 1.4 Docker的使用 1.4.1 查看Docker服务状态 1.4.2 停止Docker服务 1.4.3 启动Docker服务 1.4.4 重启Docker服务 二、安装Harbor仓库 2.1 下载安装 Harbor 2.1.1 获取Harbor最新稳定版 2.1.2 下载离线Harbor 2.1.3 解压Harbor文件 2.1.4 配置Harbor 2.1.5 安装并启动trivy漏洞扫描工具 2.1.6 查看运行中的Harbor相关容器 2.1.7 查看Harbor相关端口 2.1.8 查看本机IP 2.2 安装Docker-compose 2.2.1 获取Docker-compose可用版本 2.2.2 指定Docker-compose版本下载 2.2.2 赋予Docker-compose执行权限 2.2.3 查看Docker-compose版本 2.2.4 启动加载Harbor 2.2.5 Harbor的启停 2.2.5.1 查看Harbor服务状态 2.2.5.2 停止Harbor服务 2.2.5.3 启动Harbor服务 2.2.5.4 重启Harbor服务 2.2.5.5 停止并删除容器 2.2.5.6 创建并启动容器 2.3 修改admin密码 2.3.1 在Harbor web界面里直接修改 2.3.2 通过Harbor配置文件修改 三、Harbor仓库使用 3.1 Docker 推送命令 3.1.1 在项目中标记镜像 3.1.2 推送镜像到当前项目 3.2 Podman 推送命令 3.2.1 推送镜像到当前项目 3.3 Helm 推送命令 3.3.1 在项目中打包 chart 3.3.2 推送 chart 到当前项目 3.4 CNAB 推送命令 3.4.1 推送 CNAB 到当前项目 2.5 Harbor登录、镜像推/拉 2.5.1 登录报错 2.5.2 查看本地镜像 2.5.3 本地镜像打标签并推送至Harbor 2.5.3.1 本地镜像打标签 2.5.3.2 查看打标签后的镜像 2.5.3.3 打标签后的镜像推送至Harbor 2.5.4 拉取dockerhub镜像,打标签并推至Harbor 2.5.4.1 从dockerhub拉取镜像 2.5.4.2 查看目前的镜像 2.5.4.3 为拉取的镜像打标签 2.5.4.4 打标签后的镜像推送至Harbor 2.5.5 Harbor仓库镜像保存位置

Harbor镜像仓库实战指南:从安装到高级管理的全面解析

注意: 由于Harbor是基于Docker Registry V2版本,所以Docker Engine必须大于20.10.10-ce+版本,docker-compose必须要大于v1.18.0+版本!

一、安装Docker

1.1 安装必要的依赖包

superman@app:~$ sudo apt install -y apt-transport-https ca-certificates curl gnupg lsb-release

image-20241127101522395

1.2 添加软件源的GPG密钥及docker源

1.2.1 添加Docker源的GPG密钥
superman@app:~$ sudo curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

image-20241127102150069

1.2.2 添加Docker源
superman@app:~$ sudo add-apt-repository "deb [arch=$(dpkg --print-architecture)] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

image-20241127102255017

1.3 选择安装指定稳定版

例如5:27.3.1-1~ubuntu.22.04~jammy。

1.3.1 查询可以安装的Docker版本信息
superman@app:~$ sudo apt-cache madison docker-ce | awk '{ print $3 }'

image-20241127102512742

1.3.2 指定Docker版本安装
superman@app:~
$ VERSION_STRING
=
5:27.3.1-1~ubuntu.22.04~jammy

superman@app:~ $ sudo apt-get install docker-ce = $VERSION_STRING docker-ce-cli = $VERSION_STRING -y containerd.io docker-buildx-plugin docker-compose-plugin

image-20241127102957645

image-20241127103101132

1.3.3 查看Docker信息
superman@app:~
$ sudo docker 
-v

superman@app:~ $ sudo docker version

image-20241127103227433

1.4 Docker的使用

Dokcer的状态查看|启动|停止|重启|开机自启。

1.4.1 查看Docker服务状态
superman@app:~$ sudo systemctl status docker

image-20241127104045789

1.4.2 停止Docker服务
superman@app:~$ sudo systemctl stop docker

image-20241127104227933

1.4.3 启动Docker服务
superman@app:~$ sudo systemctl start docker

image-20241127104255994

1.4.4 重启Docker服务
superman@app:~$ sudo systemctl restart docker

image-20241127104323152

二、安装Harbor仓库

2.1 下载安装 Harbor

Harbor官网地址: https://goharbor.io Harbor github地址: https://github.com/goharbor/harbor/releases 下载离线版本:harbor-offline-installer-v2.11.2.tgz

2.1.1 获取Harbor最新稳定版
superman@app:~$ curl -s https://api.github.com/repos/goharbor/harbor/releases/latest | grep browser_download_url | cut -d '"' -f4 | grep '.tgz'

image-20241127113434925

2.1.2 下载离线Harbor
superman@app:~$ wget https://github.com/goharbor/harbor/releases/download/v2.11.2/harbor-offline-installer-v2.11.2.tgz

image-20241127142649504

2.1.3 解压Harbor文件
superman@app:~$ sudo mkdir /data
superman@app:~$ sudo tar -xf harbor-offline-installer-v2.11.2.tgz -C /data/

image-20241127143257998

2.1.4 配置Harbor

编辑harbor.yml配置文件

superman@app:~$ cd /data/harbor/
superman@app:/data/harbor$ sudo cp harbor.yml.tmpl harbor.yml
superman@app:/data/harbor$ sudo vim harbor.yml

更改信息如下:


# Configuration file of Harbor


# The IP address or hostname to access admin UI and registry service.
# DO NOT use localhost or 127.0.0.1, because Harbor needs to be accessed by external clients.
hostname: 192.168.1.134   ---设置访问地址,可以是ip、主机名,不可以设置为127.0.0.1或localhost

# http related config
http:   ---启用http
  # port for http, default is 80. If https enabled, this port will redirect to https port
 port: 80   ---默认http端口

# https related config
#https:   ---启用https(注释则为禁用)
  # https port for harbor, default is 443
  #port: 443   ---默认https端口
  # The path of cert and key files for nginx
  #certificate: /your/certificate/path   ---启用时,证书路径(禁用则注释)
  #private_key: /your/private/key/path   ---启用时,私钥路径(禁用则注释)
  # enable strong ssl ciphers (default: false)
  # strong_ssl_ciphers: false

......
# The initial password of Harbor admin
# It only works in first time to install harbor
# Remember Change the admin password from UI after launching Harbor.
harbor_admin_password: Harbor@12345   ---修改harbor登录密码

# Harbor DB configuration
database:
  # The password for the root user of Harbor DB. Change this before any production use.
 password: root@123   ---修改harbor数据库密码

......
# The default data volume
data_volume: /data     ---修改harbor仓库数据目录(安装Harbor时会自动创建)

......
    # The directory on your host that store log
   location: /var/log/harbor
......
2.1.5 安装并启动trivy漏洞扫描工具
superman@app:/data/harbor$ sudo ./install.sh --with-trivy

image-20241127145213474

image-20241127145308738

2.1.6 查看运行中的Harbor相关容器

应该是启动10个容器。

superman@app:/data/harbor$ sudo docker ps -a

image-20241127160947497

2.1.7 查看Harbor相关端口
superman@app:/data/harbor$ netstat -ntpl | grep docker

image-20241127145626737

2.1.8 查看本机IP
superman@app:/data/harbor$ hostname -I

image-20241127145702838

2.2 安装Docker-compose

github下载地址: https://github.com/docker/compose/releases

2.2.1 获取Docker-compose可用版本
superman@app:/data/harbor$ curl -s https://api.github.com/repos/docker/compose/releases | grep 'tag_name' | sort | awk -F':' '{print $2}' | sed 's/\"//g' | sed 's/,//' | awk '{if(NR>1) print $0}'

image-20241127150308230

2.2.2 指定Docker-compose版本下载

https://github.com/docker/compose/releases/download/v2.30.2/docker-compose-linux-x86_64

superman@app:/data/harbor
$ VERSION_COMPOSE
=v2.30.2

superman@app:/data/harbor $ sudo curl -L "https://github.com/docker/compose/releases/download/ $VERSION_COMPOSE /docker-compose- $(uname -s) - $(uname -m) " -o /usr/local/bin/docker-compose

image-20241127150753252

2.2.2 赋予Docker-compose执行权限
superman@app:/data/harbor$ sudo chmod +x /usr/local/bin/docker-compose

image-20241127155337655

2.2.3 查看Docker-compose版本
superman@app:/data/harbor$ docker-compose -v

image-20241127155731871

2.2.4 启动加载Harbor
superman@app:/data/harbor$ docker-compose -f /data/harbor/docker-compose.yml ps

image-20241127155948893

注意: 如果harbor.yml配置修改了,要先执行"./prepare"命令进行配置载入,然后再重启harbor服务。

报错:

WARN[0000] /data/harbor/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion

处理方法:

注释掉/data/harbor/docker-compose.yml里面的version相关信息。

superman@app:/data/harbor$ sudo vim /data/harbor/docker-compose.yml

#version: '2.3'   ---注释掉此

services:
 log:
   image: goharbor/harbor-log:v2.11.2
   container_name: harbor-log
    restart: always
   cap_drop:
      - ALL
......
2.2.5 Harbor的启停
2.2.5.1 查看Harbor服务状态
superman@app:/data/harbor$ sudo docker-compose stats

image-20241127160240929

2.2.5.2 停止Harbor服务
superman@app:/data/harbor$ sudo docker-compose stop

image-20241127161216164

2.2.5.3 启动Harbor服务
superman@app:/data/harbor$ sudo docker-compose start

image-20241127161130187

2.2.5.4 重启Harbor服务
superman@app:/data/harbor$ sudo docker-compose restart

image-20241127161802100

2.2.5.5 停止并删除容器

数据保留在文件系统中,因此不会丢失任何数据

superman@app:/data/harbor$ sudo docker-compose down -v

image-20241127161846382

2.2.5.6 创建并启动容器
superman@app:/data/harbor$ sudo docker-compose up -d

image-20241127161937511

2.3 修改admin密码

2.3.1 在Harbor web界面里直接修改

修改harbor的登陆用户密码,则最好在harbor web界面里直接修改。

image-20241127162238372

image-20241127162558131

image-20241127162632211

image-20241127162702073

image-20241127162820157

2.3.2 通过Harbor配置文件修改

忘记harbor的web密码,建议删除data源数据的database,重新部署。

superman@app:~
$ cd /data/harbor

superman@app:/data/harbor $ sudo docker-compose down -v
superman@app:/data/harbor $ sudo rm -rf /data/database
superman@app:/data/harbor $ sudo vim harbor.yaml   ---在这里重置或修改密码
superman@app:/data/harbor $ sudo ./prepare
superman@app:/data/harbor $ sudo docker-compose up -d

三、Harbor仓库使用

首先在Harbor web界面里最好创建一个自己需要的"项目"(或者使用默认的"library"项目),项目公开和私有: Public:所有用户对于公开项目都有读权限。 Private:私有项目只能被有特定用户权限的人去访问。 如创建一个公开项目"public",点击进去可以看到推送命令的信息提示。

image-20241127171845799

image-20241127172150599

image-20241127172418515

image-20241127172553910

image-20241127172623584

image-20241127172706360

3.1 Docker 推送命令
3.1.1 在项目中标记镜像
docker tag SOURCE_IMAGE[:TAG] 192.168.1.134/public/REPOSITORY[:TAG]
3.1.2 推送镜像到当前项目
docker push 192.168.1.134/public/REPOSITORY[:TAG]
3.2 Podman 推送命令
3.2.1 推送镜像到当前项目
podman push IMAGE_ID 192.168.1.134/public/REPOSITORY[:TAG]
3.3 Helm 推送命令
3.3.1 在项目中打包 chart
helm package CHART_PATH
3.3.2 推送 chart 到当前项目
helm push CHART_PACKAGE oci://192.168.1.134/public
3.4 CNAB 推送命令
3.4.1 推送 CNAB 到当前项目
cnab-to-oci push CNAB_PATH --target 192.168.1.134/public/REPOSITORY[:TAG] --auto-update-bundle

2.5 Harbor登录、镜像推/拉

2.5.1 登录报错
superman@app:/data/harbor$ docker login 192.168.1.134

image-20241127174036917

解决办法:

编辑docker启动文件,在ExecStart=/usr/bin/dockerd后面添加--insecure-registry=192.168.1.134。

superman@app:/data/harbor$ sudo vim /usr/lib/systemd/system/docker.service
[Service]

Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd --insecure-registry=192.168.1.134 -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=always
......

修改过后重启docker, 重启Harbor服务

superman@app:/data/harbor$ sudo systemctl daemon-reload && systemctl restart docker
superman@app:/data/harbor$ sudo docker-compose -f /data/harbor/docker-compose.yml restart

image-20241127183821578

再次登录

superman@app:/data/harbor$ docker login 192.168.1.134

image-20241128090633986

登录账号信息保存位置,若不删除后续登录,则无需输入用户名和密码

superman@app:~$ cat /root/.docker/config.json

image-20241128090915908

2.5.2 查看本地镜像
superman@app:~$ docker images

2.5.3 本地镜像打标签并推送至Harbor
2.5.3.1 本地镜像打标签
superman@app:~$ docker tag goharbor/nginx-photon:v2.11.2 192.168.1.134/public/nginx-photon:v2

image-20241128092921669

2.5.3.2 查看打标签后的镜像
superman@app:~
$ docker images

superman@app:~ $ docker images | grep nginx

image-20241128093003981

2.5.3.3 打标签后的镜像推送至Harbor
superman@app:~$ docker push 192.168.1.134/public/nginx-photon:v2

image-20241128093119580

image-20241128113850653

image-20241128113915507

2.5.4 拉取dockerhub镜像,打标签并推至Harbor
2.5.4.1 从dockerhub拉取镜像
superman@app:~$ docker pull httpd:2.4

image-20241128110956056

2.5.4.2 查看目前的镜像
superman@app:~$ docker images | grep httpd

image-20241128111104011

2.5.4.3 为拉取的镜像打标签
superman@app:~$ docker tag httpd:2.4 192.168.1.134/public/httpd:2.4

image-20241128111134534

2.5.4.4 打标签后的镜像推送至Harbor
superman@app:~$ docker push 192.168.1.134/public/httpd:2.4

image-20241128111219580

image-20241128114022474

2.5.5 Harbor仓库镜像保存位置
superman@app:~
$ ls /data/registry/docker/registry/v2/repositories/public

superman@app:~ $ ll /data/registry/docker/registry/v2/repositories/public

image-20241128111325255

原文链接: https://mp.weixin.qq.com/s/PS8-UHQi4ZxWfB-2IUTlEw

👍 点赞,你的认可是我创作的动力!

⭐️ 收藏,你的青睐是我努力的方向!

✏️ 评论,你的意见是我进步的财富!

图片



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/291614/viewspace-3056080/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
专注于IT系统集成、运维、架构二十年的IT职场老兵,拥有CCNA、OCA、OCP、PGCA、PGCE认证证书,公众号:超哥的IT私房菜,知识星球:超哥的IT私房菜,目前是多家IT厂商的咨询顾问。

注册时间:2021-08-27

  • 博文量
    552
  • 访问量
    303468