Skip to content

安装与配置

作者: ryan 发布于: 11/3/2025 更新于: 11/3/2025 字数: 0 字 阅读: 0 分钟

Harbor 支持在线/离线安装,推荐使用 Docker Compose(开发/测试)或 Helm(生产/K8s)。

一、Harbor 安装先决条件

资源需求

以下是部署 Harbor 的最小和推荐资源需求

资源最小推荐
CPU2 CPU4 CPU
内存4 GB8 GB
磁盘40 GB160 GB

系统环境依赖需求

软件版本描述
Docker EngineVersion > 20.10 版本 > 20.10Docker Engine 安装
Docker ComposeDocker compose > 2.3Docker Compose 是 Docker Engine 的一部分
OpenSSLLatest (optional) 最新版(可选)用于生成 Harbor 的证书和密钥

网络端口

Port 端口Protocol 协议Description 描述
443HTTPSHarbor 门户和核心 API 在此端口上接受 HTTPS 请求。可以在配置文件中更改此端口。
80HTTPHarbor 门户和核心 API 在此端口上接受 HTTP 请求。

二、下载 Harbor 安装程序

可以从官方发布页面下载 Harbor 安装程序。下载在线安装程序或离线安装程序。

  • 在线安装程序:在线安装程序从 Docker hub 下载 Harbor 镜像。因此,安装程序的大小非常小。
  • 离线安装程序:离线安装程序包含预构建的镜像,因此它比在线安装程序大。

在线和离线安装程序的安装过程几乎相同。

下载并解压安装程序

Harbor 版本发布页面 : https://github.com/goharbor/harbor/releases

下载要安装版本的在线或离线安装程序。

image-20251029113214706

离线版本

bash
tar xzvf harbor-offline-installer-v2.14.0.tgz

三、配置 Harbor 基于 HTTPS 访问

默认情况下,Harbor 不附带证书。但是也可以配置在不启用安全性的情况通过 HTTP 连接 Harbor。然而,只推荐在与外部互联网断开连接的测试或开发环境中,使用 HTTP 。在外部可访问环境中使用 HTTP 会使业务系统面临中间人攻击的风险。在生产环境中,请始终使用 HTTPS。

要配置 HTTPS,需要提前创建 SSL 证书。您可以使用由受信任的第三方 CA 签名的证书,或者您可以使用自签名证书。

自签发证书

本节描述了如何使用 OpenSSL 创建 CA,以及如何使用您的 CA 来签发服务器证书和客户端证书。当然也可以使用其他 CA 提供商,例如 Let’s Encrypt。(推荐)

创建CA证书

在生产环境中,您应从 CA 获取证书。在测试或开发环境中,您可以生成自己的 CA。要生成 CA 证书,请运行以下命令。

生成 CA 证书私钥

bash
openssl genrsa -out ca.key 4096

生成 CA 证书

-subj 选项中的值为您的组织信息。如果您使用 FQDN 连接 Harbor 主机,您必须将其指定为通用名称( CN )属性。

bash
openssl req -x509 -new -nodes -sha512 -days 3650 \
 -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=MyPersonal Root CA" \
 -key ca.key \
 -out ca.crt

生成服务器证书

证书通常包含一个 .crt 文件和一个 .key 文件,例如, yourdomain.com.crtyourdomain.com.key

生成私钥

bash
openssl genrsa -out yourdomain.com.key 4096

生成证书签名请求(CSR)

-subj 选项中的值调整为反映您的组织。如果您使用完全限定域名(FQDN)连接到您的 Harbor 主机,您必须将其指定为常见名称( CN )属性,并在密钥和 CSR 文件名中使用它。

bash
openssl req -sha512 -new \
    -subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=yourdomain.com" \
    -key yourdomain.com.key \
    -out yourdomain.com.csr

生成一个 x509 v3 扩展文件

无论您是使用 FQDN 还是 IP 地址连接到您的 Harbor 主机,都必须创建此文件,以便您可以生成符合主题备用名称(SAN)和 x509 v3 扩展要求的证书。将 DNS 条目替换为您的域名。

bash
cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=yourdomain.com
DNS.2=yourdomain
DNS.3=hostname
EOF

使用 v3.ext 文件为您的 Harbor 主机生成证书。

将 CSR 和 CRT 文件名中的 yourdomain.com 替换为 Harbor 主机名。

bash
openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in yourdomain.com.csr \
    -out yourdomain.com.crt

申请使用CA机构证书

在生成 ca.crtyourdomain.com.crtyourdomain.com.key 文件后,您必须将它们提供给 Harbor 和 Docker,并重新配置 Harbor 以使用它们。

将服务器证书和密钥复制到 Harbor 主机上的 certificates 文件夹中。

四、配置Harbor 和 Docker使用自签发证书

将服务器证书和密钥复制到 Harbor 主机上的 certificates 文件夹中。

bash
cp yourdomain.com.crt /data/cert/
cp yourdomain.com.key /data/cert/

yourdomain.com.crt 转换为 yourdomain.com.cert ,供 Docker 使用。

Docker 守护进程将 .crt 文件解释为 CA 证书,将 .cert 文件解释为客户端证书。

bash
openssl x509 -inform PEM -in yourdomain.com.crt -out yourdomain.com.cert

将服务器证书、密钥和 CA 文件复制到 Harbor 主机上的 Docker 证书文件夹中。

bash
cp yourdomain.com.cert /etc/docker/certs.d/yourdomain.com/
cp yourdomain.com.key /etc/docker/certs.d/yourdomain.com/
cp ca.crt /etc/docker/certs.d/yourdomain.com/

如果您将默认的 nginx 端口 443 映射到了不同的端口,请创建 /etc/docker/certs.d/yourdomain.com:port 文件夹,或 /etc/docker/certs.d/harbor_IP:port 文件夹。

重启 Docker Engine

bash
systemctl restart docker

使用自定义证书的配置说明

bash
/etc/docker/certs.d/
    └── yourdomain.com:port
       ├── yourdomain.com.cert  <-- 由CA签发的服务端证书
       ├── yourdomain.com.key   <-- 由CA签发的服务端KEY
       └── ca.crt

五、部署Harbor

配置 Harbor YML 文件

必需参数

下表列出了部署 Harbor 时必须设置的参数。默认情况下,所有必需参数在 harbor.yml 文件中均已取消注释。可选参数以 # 注释。

注意:Harbor 不附带任何证书。在 1.9.x 版本及以下版本中,默认情况下 Harbor 使用 HTTP 来服务注册请求。

参数子参数描述和附加参数
hostnameNone指定部署 Harbor 的目标主机的 IP 地址或完全限定域名(FQDN)。这是您访问 Harbor 门户和注册表服务的地址。例如, 192.168.1.10reg.yourdomain.com 。注册表服务必须对外部客户端可访问,因此不要将 localhost127.0.0.10.0.0.0 作为主机名指定。
http在生产环境中不要使用 HTTP。只有在与外部互联网断开连接的隔离测试或开发环境中,使用 HTTP 才是可接受的。在非隔离环境中使用 HTTP 会使您面临中间人攻击的风险。
portHTTP 的端口号,用于 Harbor 门户和 Docker 命令。默认为 80。
https使用 HTTPS 访问 Harbor 门户和令牌/通知服务。在生产环境和非断网环境中始终使用 HTTPS。
portHTTPS 的端口号,适用于 Harbor 门户和 Docker 命令。默认为 443。
certificateSSL 证书的路径。
private_keySSL 密钥的路径。
internal_tls使用 HTTPS 在 Harbor 组件之间进行通信
enabled将此标志设置为 true 表示启用内部 TLS
dir包含内部证书和密钥的目录路径
harbor_admin_passwordNone为 Harbor 系统管理员设置初始密码。此密码仅在 Harbor 首次启动时使用。在随后的登录中,此设置将被忽略,管理员密码将在 Harbor 门户中设置。默认用户名和密码是 adminHarbor12345
database使用本地 PostgreSQL 数据库。您可以选择配置外部数据库,在这种情况下,您可以禁用此选项。
password设置本地数据库的 root 密码。您必须更改此密码以进行生产部署。
max_idle_conns空闲连接池中的最大连接数。如果它 <=0,则不保留空闲连接。
max_open_conns数据库的最大打开连接数。如果它 <= 0,则对打开连接数没有限制。
conn_max_lifetime最大可重用连接的时间。如果它小于等于 0,则不会因为连接的年龄而关闭连接。
conn_max_idle_time连接可能空闲的最大时间。如果它小于等于 0,则不会因为连接的空闲时间而关闭连接。
data_volumeNone在目标主机上存储 Harbor 数据的存储位置。即使删除和/或重新创建 Harbor 的容器,这些数据也不会改变。您可以配置外部存储,在这种情况下,请禁用此选项并启用 storage_service 。默认为 /data
trivy配置 Trivy 扫描器。
ignore_unfixed将标志设置为 true 以仅显示已修复漏洞。默认值为 false
security_check以逗号分隔的列表,指定要检测的安全问题。可能的值是 vulnconfigsecret 。默认值为 vuln
skip_update您可能希望在测试或 CI/CD 环境中启用此标志以避免 GitHub 速率限制问题。如果启用此标志,您必须手动下载 trivy-offline.tar.gz 存档,提取 trivy.dbmetadata.json 文件,并将它们挂载到容器的 /home/scanner/.cache/trivy/db/trivy.db 路径。默认值为 false
insecure将标志设置为 true 以跳过验证注册证书。默认值为 false
github_token将 GitHub 访问令牌设置为下载 Trivy DB。Trivy 从 GitHub 发布页面下载 Trivy DB。GitHub 的匿名下载每小时受限于 60 次请求。通常这种速率限制对于生产操作已经足够。如果出于任何原因,这还不够,您可以通过指定 GitHub 访问令牌将速率限制增加到每小时 5000 次请求。有关 GitHub 速率限制的更多详细信息,请参阅 https://developer.github.com/v3/#rate-limiting。您可以通过遵循 https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line 中的说明来创建 GitHub 令牌。
jobservicemax_job_workers作业服务中最大复制工作进程数。对于每个镜像复制作业,一个工作进程将仓库的所有标签同步到远程目的地。增加此数值允许系统中有更多并发复制作业。然而,由于每个工作进程都会消耗一定量的网络/CPU/IO 资源,请根据主机的硬件资源设置此属性的值。默认值为 10。
notificationwebhook_job_max_retry设置 web 钩子作业的最大重试次数。默认值为 10。
log配置日志。Harbor 使用rsyslog收集每个容器的日志。
level设置日志级别为 debuginfowarningerrorfatal 。默认为 info
local设置日志保留参数: rotate_count : 在删除之前,日志文件会被轮转 rotate_count 次。如果计数为 0,则删除旧版本而不是轮转。默认值为 50。rotate_size : 只有当日志文件大小超过 rotate_size 字节时才会进行轮转。使用 k 表示千字节, M 表示兆字节, G 表示吉字节。 100100k100M100G 都是有效值。默认值为 200M。location : 设置存储日志的目录。默认为 /var/log/harbor
external_endpoint启用此选项以将日志转发到 syslog 服务器。protocol : syslog 服务器的传输协议。默认为 TCP。host : syslog 服务器的 URL。port : syslog 服务器监听的端口。
proxy配置 trivy-adapter、复制作业服务和 Harbor 使用的代理。如果不需要代理,请留空。某些代理有白名单设置,如果启用了 Trivy,您需要将以下 URL 添加到代理服务器的白名单中: github.comgithub-releases.githubusercontent.com*.s3.amazonaws.com.
http_proxy配置一个 HTTP 代理,例如, http://my.proxy.com:3128
https_proxy配置一个 HTTPS 代理,例如, http://my.proxy.com:3128
no_proxy配置何时不使用代理,例如, 127.0.0.1,localhost,core,registry
cache配置 Harbor 实例的缓存层。启用后,Harbor 将使用 Redis 缓存一些 Harbor 资源(例如,工件、项目或项目元数据),以减少对同一 Harbor 资源的重复请求所需的时间和资源。强烈建议在高并发拉取请求频率的 Harbor 实例上启用此功能,以提高 Harbor 的整体性能。有关缓存层实现和性能改进的更多详细信息,请参阅缓存层 wiki 页面。
enabled默认为 false ,设置为 true 以启用 Harbor 的缓存层。
expire_hours配置缓存过期限制(以小时为单位)。默认为 24。

可选参数

下表列出了您可以在配置 Harbor 部署时设置的附加可选参数,以超出最小必需设置。

要启用设置,您必须在 harbor.yml 中取消注释它,通过删除前面的 # 字符。

参数子参数描述和附加参数
external_urlNone启用此选项以使用外部代理。启用后,不再使用主机名。
storage_service默认情况下,Harbor 将镜像和图表存储在本地文件系统中。在生产环境中,您可能希望使用除本地文件系统之外的另一个存储后端。下文列出的参数是注册表的配置。有关如何配置不同后端的更多信息,请参阅下方的配置存储后端
`ca_bundle自定义根 CA 证书的路径,该证书注入到注册表和图表存储库容器的信任存储中。如果内部存储使用自签名证书,通常需要此设置。
filesystem默认为 filesystem ,但您可以设置 azuregcss3swiftoss 。有关如何配置其他后端的信息,请参阅下文“配置存储后端”。将 maxthreads 设置为限制外部提供程序线程数。默认为 100。
redirect当您想禁用注册表重定向时,将 deactivate 设置为 true
external_database如果您禁用了本地数据库选项,请配置外部数据库设置。目前,Harbor 仅支持 PostgreSQL 数据库。您必须为 Harbor 核心创建数据库。当 Harbor 启动时,表会自动生成。
harbor配置 Harbor 数据的外部数据库。host : Harbor 数据库的主机名。 port : 数据库端口。db_name : 数据库名。username : 连接到 Harbor 核心数据库的用户名。password : 在 username 中设置的账户的密码。ssl_mode : 启用 SSL 模式。max_idle_conns : 空闲连接池中最大连接数。如果小于等于 0,则不保留空闲连接。默认值为 2。 max_open_conns : 数据库最大打开连接数。如果小于等于 0,则没有打开连接数的限制。默认值为 0。
external_redis配置外部 Redis 实例。
hostredis_host: 外部 Redis 实例的 redis_port。如果您使用的是 Sentinel 模式,这部分应该是 host_sentinel1:port_sentinel1,host_sentinel2:port_sentinel2
sentinel_master_set仅在启用 Sentinel 模式时设置此配置。
password连接到外部 Redis 实例的密码。
registry_db_index数据库索引用于 Harbor 注册表。
jobservice_db_index数据库索引用于 jobservice。
chartmuseum_db_index数据库索引用于 Chart 博物馆。
trivy_db_index数据库索引用于 Trivy 适配器。
metric配置将 Harbor 实例指标暴露到指定的端口和路径
enabled启用在您的 Harbor 实例上公开指标,通过将此设置为 true 。默认为 false
`port端口指标公开于。默认为 9090
path路径指标公开于。默认为 /metrics
trace配置公开分布式跟踪数据
enabled启用在您的 Harbor 实例上暴露跟踪功能,通过将此设置为 true 。默认为 false
`sample_rate设置跟踪的采样率。例如,如果您想采样 100%的跟踪数据,请将 sample_rate 设置为 1 ;如果您想采样 50%的跟踪数据,请设置为 0.5 ,依此类推
namespace用于区分不同 Harbor 服务的命名空间,将设置为具有键 service.namespace 的属性
attributesattributes 属性是一个键值字典,包含用于初始化跟踪提供者的用户定义的自定义属性,所有这些属性都将添加到跟踪数据中
`jaegerendpoint : 端点 URL(例如 http://127.0.0.1:14268/api/traces )。设置端点意味着通过 HTTP 导出到 Jaeger 收集器。username: : 连接端点时使用的用户名。如不需要,请留空。 password: : 连接端点时使用的密码。如不需要,请留空。agent_host : jaeger agent 的主机名。设置 agent_host 表示通过 UDP 将数据导出到 jaeger agent。agent_port: : jaeger agent 的端口号。
otelendpoint : 与 otel 兼容的后端的主机名和端口号(例如 127.0.0.1:4318 )。 url_path: : 端点的 URL 路径(例如 127.0.0.1:4318compression: : 如果启用数据压缩 insecure : 忽略 otel 后端证书验证 timeout: : 数据传输的超时时间

默认情况下,Harbor 使用本地存储来存储仓库,但您可以选择配置 storage_service 设置,以便 Harbor 使用外部存储。有关如何为不同的存储提供商配置仓库的存储后端的信息,请参阅分发仓库(之前称为 Docker 仓库)文档中的分发配置参考。例如,如果您使用 Openstack Swift 作为存储后端,参数可能类似于以下内容:

yaml
storage_service:
  ca_bundle:
  swift:
    username: admin
    password: ADMIN_PASS
    authurl: http://keystone_addr:35357/v3/auth
    tenant: admin
    domain: default
    region: regionOne
    container: docker_images
  redirect:
    disabled: false

生产级示例配置

harbor.yaml 此配置已达到生产级部署要求,重点关注项为证书管理、漏洞库更新机制及域名解析一致性。更多配置细节可参考 https://goharbor.io/docs。

yaml
# 全局核心配置
hostname: x.x.x.x               # Harbor 服务的访问域名或 IP,用于 UI 和镜像拉取地址
http:                           # HTTP 协议配置
  port: 11800                   # HTTP 监听端口 (通常用于非生产环境或前置代理)
https:                          # HTTPS 协议配置(推荐生产使用)
  port: 11443                   # HTTPS 监听端口
  certificate: /opt/fullchain.pem  # SSL 证书路径(包含完整链)
  private_key: /opt/privkey.pem    # 私钥路径
harbor_admin_password: xxxxxx   # Harbor 管理员初始密码(需强保密)

# 数据库连接池配置
database:
  password: xxxxxxxxx           # 数据库密码
  max_idle_conns: 50            # 最大空闲连接数(保持连接复用)
  max_open_conns: 300           # 最大活跃连接数(控制数据库并发负载)
  conn_max_lifetime: 1m         # 连接最大存活时间(超时自动重建)
  conn_max_idle_time: 0         # 连接最大空闲时间(0 = 永久复用)

# 存储配置
data_volume: /data              # Harbor 持久化数据存储根目录(镜像/数据库/日志等)

# 镜像仓库高级配置
registry:
  maxblob: 500000000            # 单层镜像最大尺寸(约 500MB)

# Trivy 漏洞扫描配置 
trivy:
  ignore_unfixed: false         # 是否忽略未修复的漏洞(false=报告所有)
  skip_update: true             # 是否跳过漏洞库更新(true=手动更新,需定期维护)
  skip_java_db_update: true      # 是否跳过 Java 漏洞库更新
  offline_scan: true            # 离线扫描模式(避免请求外部接口)
  security_check: critical,high # 扫描严重级别(critical 和 high 级别漏洞)
  insecure: false               # 是否允许扫描非安全 HTTPS 仓库
  timeout: 10m0s                # 单次扫描超时时间

# 作业服务配置(复制/清理等后台任务)
jobservice:
  max_job_workers: 20           # 最大并发任务数(并行执行能力)
  max_job_duration_hours: 12    # 单任务最长运行时间
  job_loggers:                  # 日志输出方式
    - STD_OUTPUT                 # 标准输出
    - FILE                       # 文件存储
  logger_sweeper_duration: 1     # 日志清理周期(单位:小时)

# 通知服务配置
notification:
  webhook_job_max_retry: 5      # Webhook 通知失败重试次数
  webhook_job_http_client_timeout: 10  # Webhook HTTP 超时时间(秒)

# 日志系统配置 [1]
log:
  level: warning                # 日志级别(warning > error > info > debug)
  local:
    rotate_count: 20            # 保留的日志文件数量(循环覆盖)
    rotate_size: 50M            # 单个日志文件最大尺寸(超过则分割)
    location: /var/log/harbor    # 日志存储路径 

# 版本标识(自动生成勿修改)
_version: 2.14.0                

# 高级网络配置 
external_url: https://harbor-197.ceamg.cn  # Harbor 对外的完整访问 URL(重要!用于外部代理/负载均衡场景)

# 代理设置(适用于需通过代理访问外网的环境)
proxy:
  http_proxy:                   # HTTP 代理地址(留空表示禁用)
  https_proxy:                  # HTTPS 代理地址
  no_proxy: localhost,127.0.0.1,core,jobservice,trivy,.svc.cluster.local  # 代理排除列表(内部服务)

# 上传缓存清理配置
upload_purging:
  enabled: true                 # 开启未完成上传的自动清理
  age: 72h                      # 清理超过 72 小时的上传任务
  interval: 24h                 # 清理任务执行间隔
  dryrun: false                 # 是否仅模拟(false=实际删除)

# 缓存服务配置(加速 API 响应)[1]
cache:
  enabled: true                 # 启用缓存(提升性能)
  expire_hours: 12              # 缓存失效时间(小时)

安装 Harbor

Harbor 安装目录中各核心文件作用详解

以下为离线版harbor-offline-installer-v2.14.0.tgz 目录内容

bash
[root@openEuler2203-16 harbor]# ls -lh
total 641M
drwxr-xr-x 3 root root 4.0K Oct 21 14:53 common
-rw-r--r-- 1 root root 3.6K Sep  9 19:44 common.sh
-rw-r--r-- 1 root root 5.8K Oct 22 14:08 docker-compose.yml
-rw-r--r-- 1 root root 641M Sep  9 19:44 harbor.v2.14.0.tar.gz
-rw-r--r-- 1 root root 1.4K Oct 22 14:08 harbor.yml
-rw-r--r-- 1 root root  15K Sep  9 19:44 harbor.yml.tmpl
-rwxr-xr-x 1 root root 2.0K Sep  9 19:44 install.sh
-rw-r--r-- 1 root root  12K Sep  9 19:44 LICENSE
-rwxr-xr-x 1 root root 2.2K Sep  9 19:44 prepare

接下来我们依次对文件功能进行梳理:

  1. harbor.yml 是Harbor 的主配置文件,定义服务协议、端口、数据库、存储路径、扫描策略等关键参数
  2. harbor.yml.tmplharbor.yml 的模板文件,初次安装时基于此文件生成配置
  3. docker-compose.yml 定义 Harbor 各组件的容器部署规范(如 Core、JobService、Registry 等),包括镜像版本、网络、卷挂载,此文件是由 prepare 脚本基于 harbor.yml 动态生成
  4. install.sh 一键安装/重新安装 Harbor 的入口脚本,调用 prepare 并启动容器
bash
./install.sh  # 全新安装  
./install.sh --with-trivy  # 启用漏洞扫描组件
  1. prepare 预处理脚本,用于解析 harbor.yml 并生成动态的 docker-compose.yml,可以使用./prepare --validate 命令检查配置合法性

  2. common/ 目录 存放共享配置模板(如 Nginx 配置、认证模板),供 prepare 脚本渲染使用

  3. common.sh 封装安装过程中的通用函数(如日志输出、错误处理),被 install.shprepare 调用

  4. harbor.v2.14.0.tar.gz Harbor 的离线安装包,包含所有组件的 Docker 镜像初次安装时由 install.sh 自动解压并加载镜像。

安装和启动 Harbor

一旦您已配置 harbor.ymlharbor.yml.tmpl 复制,并可选地设置了存储后端,您可以通过使用 install.sh 脚本来安装和启动 Harbor。

请注意,在线安装程序下载所有 Harbor 镜像可能需要一些时间。

默认的 Harbor 安装不包括 Trivy 服务。运行以下命令

bash
sudo ./install.sh

要使用 Trivy 服务安装 Harbor,在运行 install.sh 时添加 --with-trivy 参数:

bash
sudo ./install.sh --with-trivy

关于 Trivy 的更多信息,请参阅 Trivy 文档

如果安装成功,您可以通过浏览器访问 Harbor 界面,地址为 http://reg.yourdomain.com ,将 reg.yourdomain.com 更改为您在 harbor.yml 中配置的主机名。

如果您在 harbor.yml 中没有更改,默认的管理员用户名和密码是 adminHarbor12345

测试镜像上传

登录到管理门户并创建一个新的项目,例如, myproject 。然后您可以使用 Docker 命令登录 Harbor,标记镜像并将它们推送到 Harbor。

bash
sudo docker login reg.yourdomain.com
sudo docker push reg.yourdomain.com/myproject/myrepo:mytag