使用Harbor搭建Docker仓库

使用Harbor搭建Docker仓库

  • 1 认识 Harbor
    • 1.1 Harbor 介绍
    • 1.2 Harbor 特征
    • 1.3 harbor 配置参数
      • 1.3.1 参数介绍
      • 1.3.2 必需参数
      • 1.3.3 可选参数
      • 1.3.4 配置存储后端(可选)
  • 2 安装 Harbor
    • 2.1 安装docker编排工具 Docker-Compose
    • 2.2 安装搭建Harbor
      • 2.2.1 下载Harbor安装包
      • 2.2.2 配置Harbor服务
  • 3 使用 Harbor
    • 3.1 登录
    • 3.2 用户管理
    • 3.3 新建项目
    • 3.4 项目管理
    • 3.5 上传下载镜像到 Harbor 仓库

1 认识 Harbor

1.1 Harbor 介绍

Harbor github项目地址:https://github.com/goharbor/harbor

Harbor是一个开源的可信云本机注册表项目,用于存储,签名和扫描内容。Harbor通过添加用户通常需要的功能(如安全性,身份和管理)来扩展开源Docker Distribution。使注册表更接近构建和运行环境可以提高图像传输效率。Harbor支持在注册表之间复制映像,还提供用户管理,访问控制和活动审计等高级安全功能

1.2 Harbor 特征

云本机注册表:Harbor 支持容器映像和Helm图表,可用作云本机环境(如容器运行时和业务流程平台)的注册表。

基于角色的访问控制:用户和存储库通过“项目”进行组织,用户可以对项目下的图像拥有不同的权限。

基于策略的映像复制:可以基于具有多个过滤器(存储库,标记和标签)的策略在多个注册表实例之间复制(同步)映像。如果遇到任何错误,Harbor将自动重试进行复制。非常适合负载平衡,高可用性,多数据中心,混合和多云场景。

漏洞扫描:Harbor定期扫描图像并警告用户漏洞。

LDAP / AD支持:Harbor与现有企业LDAP / AD集成以进行用户身份验证和管理,并支持将LDAP组导入Harbor并为其分配适当的项目角色。

图像删除和垃圾收集:可以删除图像,并可以回收它们的空间。

公证:可以确保图像的真实性。

图形用户门户:用户可以轻松浏览,搜索存储库和管理项目。

审计:跟踪存储库的所有操作。

RESTful API:适用于大多数管理操作的RESTful API,易于与外部系统集成。

易于部署:提供在线和离线安装程序。

1.3 harbor 配置参数

1.3.1 参数介绍

① 配置参数位于文件harbor.yml中;
② 在harbor.yml中有两类参数,必需参数和可选参数。

  • 必需(required)参数:需要在配置文件中设置这些参数。如果用户更新harbor.yml并运行install.sh脚本以重新安装Harbor,harbor.yml将会生效;
  • 可选参数:这些参数对于更新是可选的,用户可以将这部分参数保留为默认值,并在启动Harbor后在Web Portal上更新这部分参数。如果它们已经启用harbor.yml,则这些参数只会在首次启动Harbor时生效。harbor.yml将忽略对这些参数的后续更新。

③ 注意:如果您选择通过Portal设置这些参数,请务必在Harbor启动后立即执行此操作。特别是必须在Harbor中注册或创建任何新用户之前设置所需的auth_mode,当系统中有用户时(除默认管理员用户外),无法更改auth_mode;
④ 请注意至少需要更改hostname属性(指定harbor仓库域名)。

1.3.2 必需参数

hostname:目标主机的主机名,用于访问Portal和注册表服务。它应该是目标计算机的IP地址或完全限定的域名(FQDN),例如,192.168.1.10或reg.yourdomain.com。不要使用localhost或127.0.0.1作为主机名 - 外部客户端需要访问注册表服务

ui_url_protocol:http或https,默认为http,用于指定访问Portal和令牌/通知服务的协议。如果启用了公证,则此参数必须为https。默认情况下,这是http。要设置https协议,请参阅使用HTTPS访问配置Harbor。

db_password:用于db_auth的PostgreSQL数据库的root密码。更改此密码以用于任何生产用途

max_job_workers :(默认值为10)作业服务中的最大复制工作者数。对于每个映像复制作业,工作程序将存储库的所有标记同步到远程目标。增加此数量可以在系统中实现更多并发复制作业。但是,由于每个工作者都消耗一定量的网络/ CPU / IO资源,请根据主机的硬件资源仔细选择该属性的值。

customize_crt:(on or off. Default is on),如果此属性on,在准备脚本创建注册表的令牌生成/验证私钥和根证书。当外部源提供密钥和根证书时,将此属性设置为off。有关详细信息,请参阅自定义密钥和港口令牌服务证书。

ssl_cert:SSL证书的路径,仅在协议设置为https时应用。

ssl_cert_key:SSL密钥的路径,仅在协议设置为https时应用。

secretkey_path:用于加密或解密复制策略中远程注册表密码的密钥路径。

log_rotate_count:设置日志文件在被删除之前会被轮换次数。如果count为0,则删除旧版本而不是旋转。

log_rotate_size:仅当日志文件大于log_rotate_size字节时才会轮换日志文件。如果大小后跟k,则假定大小以千字节为单位。如果使用M,则大小以兆字节为单位,如果使用G,则大小为千兆字节。尺寸100,尺寸100k,尺寸100M和尺寸100G都是有效的。

http_proxy:为Clair配置http代理,例如http://my.proxy.com:3128。

https_proxy:为Clair配置https代理,例如http://my.proxy.com:3128。

no_proxy:为Clair配置无代理,例如127.0.0.1,localhost,core,registry。

1.3.3 可选参数

电子邮件设置:Harbor需要这些参数才能向用户发送“密码重置”电子邮件,并且仅在需要该功能时才需要。另外,请注意,在默认情况下SSL连接时没有启用-如果你的SMTP服务器需要SSL,但不支持STARTTLS,那么你应该通过设置启用SSL email_ssl = TRUE。如果电子邮件服务器使用自签名证书或不受信任证书,则设置
email_insecure = true
email_server = smtp.mydomain.com
email_server_port = 25
email_identity =
email_username = [email protected]
email_password = abc
email_from = admin [email protected]
email_ssl = false
email_insecure = false

harbor_admin_password:管理员的初始密码。此密码仅在Harbor首次启动时生效。之后,将忽略此设置,并且应在Portal中设置管理员密码。请注意,默认用户名/密码为admin / Harbor12345

auth_mode:使用的身份验证类型。默认情况下,它是db_auth,即凭据存储在数据库中。对于LDAP身份验证,请将其设置为ldap_auth。重要信息:从现有Harbor实例升级时,必须确保在启动新版本的Harbor之前auth_mode相同harbor.yml。否则,用户可能无法在升级后登录。

ldap_url:LDAP端点URL(例如ldaps://ldap.mydomain.com)。 仅在auth_mode设置为
ldap_auth时使用。

ldap_searchdn:具有搜索LDAP / AD服务器权限的用户的DN(例如
uid=admin,ou=people,dc=mydomain,dc=com)。

ldap_search_pwd:ldap_searchdn指定的用户密码。
ldap_basedn:查找用户的基本DN,例如ou=people,dc=mydomain,dc=com,仅在auth_mode
设置为ldap_auth时使用。

ldap_filter:用于查找用户的搜索过滤器,例如(objectClass=person)。

ldap_uid:用于在LDAP搜索期间匹配用户的属性,它可以是uid,cn,email或其他属性。

ldap_scope:搜索用户的范围,0-LDAP_SCOPE_BASE,1-LDAP_SCOPE_ONELEVEL,2-
LDAP_SCOPE_SUBTREE。默认值为2。

ldap_timeout:连接LDAP服务器时超时(以秒为单位)。默认值为5。

ldap_verify_cert:验证来自LDAP服务器的证书。默认为true。

ldap_group_basedn:在LDAP / AD中查找组的基本dn,例如
ou=group,dc=mydomain,dc=com。

ldap_group_filter:搜索LDAP / AD组的过滤器,例如objectclass=group。

ldap_group_gid:用于命名LDAP / AD组的属性,它可以是cn,name。

ldap_group_scope:搜索ldap组的范围。0-LDAP_SCOPE_BASE,1-LDAP_SCOPE_ONELEVEL,2-
LDAP_SCOPE_SUBTREE。默认值为2。

self_registration:启用/禁用用户注册他/她自己的能力,默认启用。禁用时,新用户只能由管理员用户创建,只有管理员用户可以在Harbor中创建新用户。 注意:当auth_mode设置为ldap_auth时,始终禁用自注册功能,并忽略此标志。

token_expiration:令牌服务创建的令牌的到期时间(以分钟为单位),默认为30分钟。

project_creation_restriction:用于控制用户有权创建项目的标志。默认情况下,每个人都可以创建一个项目,设置为“adminonly”,这样只有管理员才能创建项目。

1.3.4 配置存储后端(可选)

默认情况下,Harbor将图像存储在本地文件系统中。在生产环境中,您可以考虑使用其他存储后端,而不是本地文件系统,如S3,OpenStack Swift,Ceph等。这些参数是注册表的配置。

registry_storage_provider_name:注册表的存储提供程序名称,可以是filesystem,s3,gcs,azure等。默认为filesystem。

registry_storage_provider_config:存储提供程序配置的逗号分隔“key:value”对,例如“key1:value,key2:value2”。默认为空字符串。

registry_custom_ca_bundle:自定义根ca证书的路径,它将注入到注册表和图表存储库容器的信任库中。当用户使用自签名证书托管内部存储时,通常需要这样做。

例如,如果使用Openstack Swift作为存储后端,则参数可能如下所示:

registry_storage_provider_name = swift
registry_storage_provider_config = “ username:admin,password:ADMIN_PASS,
authurl:http:// keystone_addr:35357 / v3 / aut

注意:有关注册表存储后端的详细信息,请参阅“注册表配置参考”

注册表配置参考链接:https://docs.docker.com/registry/configuration/

2 安装 Harbor

2.1 安装docker编排工具 Docker-Compose

[root@johnnyg03 ~]# yum install https://rpmfind.net/linux/epel/7/x86_64/Packages/d/docker-compose-1.18.0-4.el7.noarch.rpm -y

[root@johnnyg03 ~]# docker-compose version 
docker-compose version 1.18.0, build 8dd22a9
docker-py version: 2.6.1
CPython version: 3.6.8
OpenSSL version: OpenSSL 1.0.2k-fips  26 Jan 2017

2.2 安装搭建Harbor

2.2.1 下载Harbor安装包

[root@johnnyg03 ~]# wget -c https://github.com/goharbor/harbor/releases/download/v2.4.1/harbor-offline-installer-v2.4.1.tgz

[root@johnnyg03 ~]# ll harbor-offline-installer-v2.4.1.tgz 
-rw-rw-rw- 1 root root 612698835 Aug  5 20:06 harbor-offline-installer-v2.4.1.tgz
//解压至/usr/local
[root@johnnyg03 ~]# tar xf harbor-offline-installer-v2.4.1.tgz -C /usr/local/
[root@johnnyg03 ~]# cd /usr/local/harbor/
[root@johnnyg03 harbor]# ll
total 601612
-rw-r--r-- 1 root root      3361 Dec 16  2021 common.sh
-rw-r--r-- 1 root root 616006217 Dec 16  2021 harbor.v2.4.1.tar.gz
-rw-r--r-- 1 root root      8999 Dec 16  2021 harbor.yml.tmpl
-rwxr-xr-x 1 root root      2500 Dec 16  2021 install.sh
-rw-r--r-- 1 root root     11347 Dec 16  2021 LICENSE
-rwxr-xr-x 1 root root      1881 Dec 16  2021 prepare

2.2.2 配置Harbor服务

[root@johnnyg03 harbor]# cp harbor.yml.tmpl harbor.yml
[root@johnnyg03 harbor]# vim harbor.yml
hostname: johnnyg.openlab.com
//下方此部分如果不进行加密直接注释,否则报错
#https:
#  # https port for harbor, default is 443
#  port: 443
#  # The path of cert and key files for nginx
#  certificate: /your/certificate/path
#  private_key: /your/private/key/path
[root@johnnyg03 harbor]# vim /etc/hosts
http://1.13.249.218/ johnnyg.openlab.com
//安装部署启动Harbor
[root@johnnyg03 harbor]# ./install.sh
//可以看到Harbor自动开启很多容器服务
[root@johnnyg03 harbor]# docker ps -a
CONTAINER ID   IMAGE                                COMMAND                  CREATED         STATUS                   PORTS                                   NAMES
353ed74e8e2c   goharbor/harbor-jobservice:v2.4.1    "/harbor/entrypoint.…"   7 minutes ago   Up 7 minutes (healthy)                                           harbor-jobservice
ec2bb70608b7   goharbor/nginx-photon:v2.4.1         "nginx -g 'daemon of…"   7 minutes ago   Up 7 minutes (healthy)   0.0.0.0:80->8080/tcp, :::80->8080/tcp   nginx
9abb3e3d5be1   goharbor/harbor-core:v2.4.1          "/harbor/entrypoint.…"   7 minutes ago   Up 7 minutes (healthy)                                           harbor-core
cb8d47180da9   goharbor/registry-photon:v2.4.1      "/home/harbor/entryp…"   7 minutes ago   Up 7 minutes (healthy)                                           registry
5dd93394f575   goharbor/harbor-portal:v2.4.1        "nginx -g 'daemon of…"   7 minutes ago   Up 7 minutes (healthy)                                           harbor-portal
e24e310d7fc8   goharbor/redis-photon:v2.4.1         "redis-server /etc/r…"   7 minutes ago   Up 7 minutes (healthy)                                           redis
c036675029b0   goharbor/harbor-db:v2.4.1            "/docker-entrypoint.…"   7 minutes ago   Up 7 minutes (healthy)                                           harbor-db
04a7e8bc22de   goharbor/harbor-registryctl:v2.4.1   "/home/harbor/start.…"   7 minutes ago   Up 7 minutes (healthy)                                           registryctl
ab95148a1d28   goharbor/harbor-log:v2.4.1           "/bin/sh -c /usr/loc…"   7 minutes ago   Up 7 minutes (healthy)   127.0.0.1:1514->10514/tcp               harbor-log

3 使用 Harbor

3.1 登录

user:admin(默认)
password:Harbor12345(默认)
使用Harbor搭建Docker仓库_第1张图片
使用Harbor搭建Docker仓库_第2张图片

3.2 用户管理

使用Harbor搭建Docker仓库_第3张图片
使用Harbor搭建Docker仓库_第4张图片

3.3 新建项目

【注:此处访问级别默认为私有(不勾选公开)表示上传下载镜像均需要进行登录认证,如果勾选公开表示为公有,上传下载镜像无需登录认证】
使用Harbor搭建Docker仓库_第5张图片

3.4 项目管理

点击下图中红框处进入项目管理页面
请添加图片描述
点击下图中红框处添加成员
使用Harbor搭建Docker仓库_第6张图片
使用Harbor搭建Docker仓库_第7张图片
使用Harbor搭建Docker仓库_第8张图片

3.5 上传下载镜像到 Harbor 仓库

//修改docker的daemon.json守护进程文件
[root@johnnyg03 harbor]# vim /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://registry.docker-cn.com"],
  "insecure-registries": ["10.0.2.12:5000"],
  "insecure-registries": ["johnnyg.openlab.com"]		//添加此行为harbor仓库域名(允许使用http访问)
}
[root@johnnyg03 harbor]# systemctl restart docker
//重启docker之后,所有容器自动关闭,需要重启
[root@johnnyg03 harbor]# docker start `docker ps -aq`
//为需要上传仓库的镜像打标签(标签名:仓库地址/镜像名:版本)
[root@johnnyg03 harbor]# docker tag busybox:latest johnnyg.openlab.com/demo/busybox:latest
[root@johnnyg03 harbor]# docker tag nginx:latest johnnyg.openlab.com/demo/nginx:latest
[root@johnnyg03 harbor]# docker images
REPOSITORY                         TAG       IMAGE ID       CREATED        SIZE
johnnyg.openlab.com/demo/busybox   latest    beae173ccac6   7 months ago   1.24MB
johnnyg.openlab.com/demo/nginx     latest    605c77e624dd   7 months ago   141MB
//由于在创建仓库项目时选择了私有仓库,因此需要进行认证
//登录所使用的账号可以是仓库默认管理员admin & 自创账户
//此处使用默认管理员admin登录
[root@johnnyg03 harbor]# docker login johnnyg.openlab.com
Username: admin
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
//上传镜像至harbor仓库
[root@johnnyg03 harbor]# docker push johnnyg.openlab.com/demo/busybox:latest
The push refers to repository [johnnyg.openlab.com/demo/busybox]
01fd6df81c8e: Pushed 
latest: digest: sha256:62ffc2ed7554e4c6d360bce40bbcf196573dd27c4ce080641a2c59867e732dee size: 527
//测试使用自创账户tom登录
[root@johnnyg03 harbor]# docker login johnnyg.openlab.com
Username: tom
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
//可见登录成功
//使用自创账户tom上传镜像至harbor仓库
[root@johnnyg03 harbor]# docker push johnnyg.openlab.com/demo/nginx:latest
The push refers to repository [johnnyg.openlab.com/demo/nginx]
d874fd2bc83b: Layer already exists 
32ce5f6a5106: Layer already exists 
f1db227348d0: Layer already exists 
b8d6e692a25e: Layer already exists 
e379e8aedd4d: Layer already exists 
2edcec3590a4: Layer already exists 
latest: digest: sha256:ee89b00528ff4f02f2405e4ee221743ebc3f8e8dd0bfd5c4c20a2fa2aaa7ede3 size: 1570
//可见上传成功

从下图可见,刚刚使用默认管理员admin & 自创账户tom上传的镜像均已存在(在harbor仓库demo项目中显示)
使用Harbor搭建Docker仓库_第9张图片

你可能感兴趣的:(docker,容器,运维)