474

Harbor 搭建笔记 | 个人豪华私域容器镜像仓库

乐果   发表于   2023 年 10 月 20 日 标签:harbordocker

Harbor是什么

Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution

作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。

为什么使用bitnami的镜像安装harbor
  • 首先你可能无法正常访问github, 而harbor依赖于nginxdbredis等多个软件平台,采用docker-compose安装相对优雅;
  • 其次harbor官方并没有直接提供 docker-compose;
  • bitnami是一个比较成熟知名的容器镜像提供商;
  • 最后一点,也是我最看中的:因为bitnamiarm 架构的镜像, 而我正好计划将harbor搭建在 orangepi里,使用bitnami镜像搭建就不用我在折腾去编译 arm 架构的镜像了!
bitnami官方文档安装harbor(不推荐,可能失败)

官方镜像地址:https://hub.docker.com/r/bitnami/harbor-portal

首先我们看一下bitnami的官方文档,仅需三行命令就可以安装harbor了。

$ curl -LO https://raw.githubusercontent.com/bitnami/containers/main/bitnami/harbor-portal/docker-compose.yml
$ curl -L https://github.com/bitnami/containers/archive/main.tar.gz | tar xz --strip=1 --wildcards '*-main/bitnami/harbor-portal/config' && mv bitnami/harbor-portal/config . && rm -rf bitnami
$ docker-compose up
官方文档错误情况

但我在mac系统下面测试,上面的命令可能会出现很多异常情况,比如

错误1:

tar: Option --wildcards is not supported

错误2:

curl: (23) Failure writing output to destination

错误3:

你可能直接访问不了github 😄




正确安装方式(推荐)

整个安装流程清晰,可以兼容mac、win、linux等操作系统

你完全可以不采用命令的方式进行以下操作,比如下载解压文件等

// 下载bitnami官方压缩包
wget https://github.com/bitnami/containers/archive/main.tar.gz 

// 解压
tar zxvf main.tar.gz 

// 将harbor-portal目录移动到我们的当前目录
 mv containers-main/bitnami/harbor-portal .

 cd harbor-portal

 // 启动portal
 docker compose up

执行完上面的命令,不出意外你将成功启动一套harbor系统。

当然,你也可以查看容器编排的配置文件docker-compose.yml,提前修改一些参数, 如下ls命令,配置文件就在当前目录下:

 ls
 2  config  docker-compose.yml  README.md

例如我的docker-compose.yml文件如下:

# Copyright VMware, Inc.
# SPDX-License-Identifier: APACHE-2.0

version: '2'

services:
  registry:
    image: docker.io/bitnami/harbor-registry:2
    environment:
      - REGISTRY_HTTP_SECRET=CHANGEME
    volumes:
      - registry_data:/storage
      - ./config/registry/:/etc/registry/:ro
  registryctl:
    image: docker.io/bitnami/harbor-registryctl:2
    environment:
      - CORE_SECRET=CHANGEME
      - JOBSERVICE_SECRET=CHANGEME
      - REGISTRY_HTTP_SECRET=CHANGEME
    volumes:
      - registry_data:/storage
      - ./config/registry/:/etc/registry/:ro
      - ./config/registryctl/config.yml:/etc/registryctl/config.yml:ro
  postgresql:
    image: docker.io/bitnami/postgresql:13
    container_name: harbor-db
    environment:
      - POSTGRESQL_PASSWORD=bitnami
      - POSTGRESQL_DATABASE=registry
    volumes:
      - postgresql_data:/bitnami/postgresql
  core:
    image: docker.io/bitnami/harbor-core:2
    container_name: harbor-core
    depends_on:
      - registry
    environment:
      - CORE_KEY=change-this-key
      - _REDIS_URL_CORE=redis://redis:6379/0
      - SYNC_REGISTRY=false
      - CHART_CACHE_DRIVER=redis
      - _REDIS_URL_REG=redis://redis:6379/1
      - PORT=8080
      - LOG_LEVEL=info
      # 下面这里是你Harbor访问的地址,根据自己情况修改
      - EXT_ENDPOINT=http://rusuo.cc
      - DATABASE_TYPE=postgresql
      - REGISTRY_CONTROLLER_URL=http://registryctl:8080
      - POSTGRESQL_HOST=postgresql
      - POSTGRESQL_PORT=5432
      - POSTGRESQL_DATABASE=registry
      - POSTGRESQL_USERNAME=postgres
      - POSTGRESQL_PASSWORD=bitnami
      - POSTGRESQL_SSLMODE=disable
      - REGISTRY_URL=http://registry:5000
      - TOKEN_SERVICE_URL=http://core:8080/service/token
      - HARBOR_ADMIN_PASSWORD=bitnami
      - CORE_SECRET=CHANGEME
      - JOBSERVICE_SECRET=CHANGEME
      - ADMIRAL_URL=
      - CORE_URL=http://core:8080
      - JOBSERVICE_URL=http://jobservice:8080
      - REGISTRY_STORAGE_PROVIDER_NAME=filesystem
      - REGISTRY_CREDENTIAL_USERNAME=harbor_registry_user
      - REGISTRY_CREDENTIAL_PASSWORD=harbor_registry_password
      - READ_ONLY=false
      - RELOAD_KEY=
    volumes:
      # 下面这里是存放镜像仓库的目录,根据自己情况修改挂载宿主机的目录
      - core_data:/data 
      - ./config/core/app.conf:/etc/core/app.conf:ro
      - ./config/core/private_key.pem:/etc/core/private_key.pem:ro
  portal:
    image: docker.io/bitnami/harbor-portal:2
    container_name: harbor-portal
    depends_on:
      - core
  jobservice:
    image: docker.io/bitnami/harbor-jobservice:2
    container_name: harbor-jobservice
    depends_on:
      - redis
      - core
    environment:
      - CORE_SECRET=CHANGEME
      - JOBSERVICE_SECRET=CHANGEME
      - CORE_URL=http://core:8080
      - REGISTRY_CONTROLLER_URL=http://registryctl:8080
      - REGISTRY_CREDENTIAL_USERNAME=harbor_registry_user
      - REGISTRY_CREDENTIAL_PASSWORD=harbor_registry_password
    volumes:
      - jobservice_data:/var/log/jobs
      - ./config/jobservice/config.yml:/etc/jobservice/config.yml:ro
  redis:
    image: docker.io/bitnami/redis:7.0
    environment:
      # ALLOW_EMPTY_PASSWORD is recommended only for development.
      - ALLOW_EMPTY_PASSWORD=yes
  harbor-nginx:
    image: docker.io/bitnami/nginx:1.25
    container_name: nginx
    volumes:
      - ./config/proxy/nginx.conf:/opt/bitnami/nginx/conf/nginx.conf:ro
    ports:
      - '8080:8080'
    depends_on:
      - postgresql
      - registry
      - core
      - portal
volumes:
  registry_data:
    driver: local
  core_data:
    driver: local
  jobservice_data:
    driver: local
  postgresql_data:
    driver: local

harbor默认账号密码

采用本文方法安装的harbor环境,账号密码等信息其实都在harbor-portal/docker-compose.yml文件中,你可以自行查看,比如web面板账号密码如下:

http://localhost/account/sign-in

用户名:admin 密码:bitnami




使用Harbor时可能会遇到的问题

Harbor虽然可以通过 web 方式访问了,但 push 或 pull 镜像时可能会有报错。

1、docker login 时报错:
docker login rusuo.cc 
Username: xiao
Password: 
Error saving credentials: error storing credentials - err: exit status 1, out: `Post "https://hub.docker.com/v2/users/login?refresh_token=true": context deadline exceeded (Client.Timeout exceeded while awaiting headers)`

处理方法

vim ~/.docker/config.json 
{
    "auths": {
      "https://index.docker.io/v1/": {},
      "hub.wesais.cn": {},
      //注意,加上下面这行,也就是你搭建的Harbor域名地址
      "rusuo.cc": {} 
    },
    "credsStore": "desktop"
}
2、push或 pull 时报错:
ERROR: received unexpected HTTP status: 503 unable to connect to 156.255.2.178:80. Do you need an HTTP proxy?

处理方法

可能因为web只开启了 https,push 或 pull 时需要 http 方式,将 web服务的 http 开启(即默认 80 端口)即可。

3、docker push harbor 反复Retrying in XXX second
docker push rusuo.cc/edge/ppos-mirouter:v.23.1020
The push refers to repository [rusuo.cc/edge/ppos-mirouter]
ef306617e890: Pushing [==================================================>]  21.74MB/21.74MB
c859152d3cf8: Pushing  2.048kB
95524ed72349: Pushing [=======================>                           ]  66.54MB/140.6MB
24302eb7d908: Retrying in 1 second 
unexpected EOF

如上,反复Retrying后又重新反复push,最终超时EOF

处理方法

修改配置文件: common/config/registry/config.yml



如上图,修改了:

http:
    relativeurls: true

然后重启harbor服务即可:

docker compose down
docker compose up -d

乐果   发表于   2023 年 10 月 20 日 标签:harbordocker

0

文章评论