zoukankan      html  css  js  c++  java
  • harbor修改非80端口为5000

    Harbor是什么

    1. Harbor是VMware公司开源的企业级DockerRegistry项目,其目标是帮助用户迅速搭建一个企业级的Dockerregistry服务。
    2. 它以Docker公司开源的registry为基础,提供了管理UI,基于角色的访问控制(Role Based Access Control),AD/LDAP集成、以及审计日志(Auditlogging) 等企业用户需求的功能,同时还原生支持中文。

    简单说来,Harbor封装了Docker的registry v2,帮用户提供了许多便捷管理的特性,方便用户操作。

    Harbor提供的特性

    • 基于角色控制
      用户和仓库都是基于项目进行组织的, 而用户基于项目可以拥有不同的权限。
    • 基于镜像的复制策略
      镜像可以在多个Harbor实例之间进行复制。
    • 支持LDAP
      Harbor的用户授权可以使用已经存在LDAP用户。
    • 镜像删除 & 垃圾回收
      Image可以被删除并且回收Image占用的空间。
    • 友好UI
      用户可以轻松的浏览、搜索镜像仓库以及对项目进行管理。
    • 便于扩展
      绝大部分的用户操作API, 方便用户对系统进行扩展。
    • 轻松部署
      Harbor提供了online、offline安装,除此之外还提供了virtualappliance安装。

    Harbor的安装与配置

    Harbor的github主页上已经讲得很详细了,在此不再赘述。

    Harbor使用过程中的坑

    • 配置文件修改
      第一次安装Harbor后,mysql的数据会存储在/data/database文件夹下。如果你想修改mysql root密码的话(不管你有没有重装),都要先把/data/database删掉,否则UI容器会一直报“Access denied”的错误,即便是重下镜像也无法解决。(这个问题花费了我大半天的时间,最后终于在官方issues里找到了解决方案T_T)
      当然在自己的测试环境里边可以随便玩,但如果想把Harbor部署到生产环境中,强烈建议预先配置好各类环境参数,避免改动。
    • Nginx端口修改
      Harbor的Nginx端口映射到宿主机的80端口上了,一般情况下我们不希望80端口被占用,所以需要修改docker-compose.yml文件:
    proxy:
        image: nginx:1.9
        container_name: nginx
        restart: always
        volumes:
          -./common/config/nginx:/etc/nginx
        ports:
          - 9999:80
          - 443:443
        depends_on:
          - mysql
          - registry
          - ui

    然后再修改common/templates/registry/config.yml文件:

    auth:
      token:
        issuer:registry-token-issuer
        realm: $ui_url:9999/service/token
        rootcertbundle:/etc/registry/root.crt
        service: token-service

    修改完成后执行sudo ./prepare重新生成配置文件

      • Registry端口修改(非必需)
        按照惯例,开放5000端口给registry使用,则修改docker-compose.yml文件,为registry节点添加posts属性,步骤与修改Nginx配置一样,不再赘述。

    增加这个
    ports: - 5000:5000
    [root@k8s-registry-70 harbor]# cat docker-compose.yml 
    version: '2'
    services:
      log:
        image: vmware/harbor-log:v1.5.1
        container_name: harbor-log 
        restart: always
        volumes:
          - /var/log/harbor/:/var/log/docker/:z
          - ./common/config/log/:/etc/logrotate.d/:z
        ports:
          - 127.0.0.1:1514:10514
        networks:
          - harbor
      registry:
        image: vmware/registry-photon:v2.6.2-v1.5.1
        container_name: registry
        restart: always
        volumes:
          - /data/registry:/storage:z
          - ./common/config/registry/:/etc/registry/:z
        networks:
          - harbor
        ports:
          - 5000:5000
        environment:
          - GODEBUG=netdns=cgo
        command:
          ["serve", "/etc/registry/config.yml"]
        depends_on:
          - log
        logging:
          driver: "syslog"
          options:  
            syslog-address: "tcp://127.0.0.1:1514"
            tag: "registry"
      mysql:
        image: vmware/harbor-db:v1.5.1
        container_name: harbor-db
        restart: always
        volumes:
          - /data/database:/var/lib/mysql:z
        networks:
          - harbor
        env_file:
          - ./common/config/db/env
        depends_on:
          - log
        logging:
          driver: "syslog"
          options:  
            syslog-address: "tcp://127.0.0.1:1514"
            tag: "mysql"
      adminserver:
        image: vmware/harbor-adminserver:v1.5.1
        container_name: harbor-adminserver
        env_file:
          - ./common/config/adminserver/env
        restart: always
        volumes:
          - /data/config/:/etc/adminserver/config/:z
          - /data/secretkey:/etc/adminserver/key:z
          - /data/:/data/:z
        networks:
          - harbor
        depends_on:
          - log
        logging:
          driver: "syslog"
          options:  
            syslog-address: "tcp://127.0.0.1:1514"
            tag: "adminserver"
      ui:
        image: vmware/harbor-ui:v1.5.1
        container_name: harbor-ui
        env_file:
          - ./common/config/ui/env
        restart: always
        volumes:
          - ./common/config/ui/app.conf:/etc/ui/app.conf:z
          - ./common/config/ui/private_key.pem:/etc/ui/private_key.pem:z
          - ./common/config/ui/certificates/:/etc/ui/certificates/:z
          - /data/secretkey:/etc/ui/key:z
          - /data/ca_download/:/etc/ui/ca/:z
          - /data/psc/:/etc/ui/token/:z
        networks:
          - harbor
        depends_on:
          - log
          - adminserver
          - registry
        logging:
          driver: "syslog"
          options:  
            syslog-address: "tcp://127.0.0.1:1514"
            tag: "ui"
      jobservice:
        image: vmware/harbor-jobservice:v1.5.1
        container_name: harbor-jobservice
        env_file:
          - ./common/config/jobservice/env
        restart: always
        volumes:
          - /data/job_logs:/var/log/jobs:z
          - ./common/config/jobservice/config.yml:/etc/jobservice/config.yml:z
        networks:
          - harbor
        depends_on:
          - redis
          - ui
          - adminserver
        logging:
          driver: "syslog"
          options:  
            syslog-address: "tcp://127.0.0.1:1514"
            tag: "jobservice"
      redis:
        image: vmware/redis-photon:v1.5.1
        container_name: redis
        restart: always
        volumes:
          - /data/redis:/data
        networks:
          - harbor
        depends_on:
          - log
        logging:
          driver: "syslog"
          options:  
            syslog-address: "tcp://127.0.0.1:1514"
            tag: "redis"
      proxy:
        image: vmware/nginx-photon:v1.5.1
        container_name: nginx
        restart: always
        volumes:
          - ./common/config/nginx:/etc/nginx:z
        networks:
          - harbor
        ports:
          - 80:80
          - 443:443
          - 4443:4443
        depends_on:
          - mysql
          - registry
          - ui
          - log
        logging:
          driver: "syslog"
          options:  
            syslog-address: "tcp://127.0.0.1:1514"
            tag: "proxy"
    networks:
      harbor:
        external: false
    
    [root@k8s-registry-70 harbor]# 
      • 设置信赖列表
        默认情况下,docker对registry的操作是基于https协议的,而Harbor默认是以http协议访问的,如果这时候执行docker login的操作,会得到这样的错误信息:

    Error response from daemon: Get https://xx.xxx.xx.xx/v1/users/: dial tcp xx.xxx.xx.xx:443:getsockopt: connection refused

    这时候需要修改docker的启动文件(Ubuntu16.04下,这个文件是/lib/systemd/system/docker.service),如下所示:

    # Modified,origin: ExecStart=/usr/bin/dockerd -H fd://
    ExecStart=/usr/bin/docker daemon -H fd:// --insecure-registry xx.xxx.xx.xx:5000

    然后执行命令:

    sudo systemctl daemon-reload
    sudo systemctl restart docker

    Harbor使用

    万事俱备,下面我们来试试上传镜像。以docker的官方镜像hello-world为例,先下载好镜像,然后给镜像打tag:

    docker tag hello-world xx.xx.xx.xx:5000/test/hello-world

    其中“test”为项目名,如果预先没有创建test项目的话,push的时候会提示:

    denied: requested access to the resource is denied

    那么现在Harbor UI里新建一个test项目,然后执行:

    docker push xx.xx.xx.xx:5000/test/hello-world

    大功告成!

    再来看拉取镜像,启动另一台虚拟机(CentOS系统),然后输入:

    docker pull xx.xx.xx.xx:5000/test/hello-world

    开个玩笑,你不会真的直接这样输入吧?会报错的:

    http: server gave HTTP response to HTTPS client

    解决的方法也很简单,在/etc/docker/daemon.json(如果没有就新建)中添加以下代码:

    { "insecure-registries":["xx.xx.xx.xx:5000"] }

    仅限于Docker 1.12+,如果使用较低版本的docker,请自行查找解决方案:)

    参考:

    https://blog.csdn.net/jycjyc/article/details/90415477

    https://blog.csdn.net/dongyuan234/article/details/90298327

  • 相关阅读:
    钱多多软件制作04
    团队项目01应用场景
    HDU 4411 arrest
    HDU 4406 GPA
    HDU 3315 My Brute
    HDU 3667 Transportation
    HDU 2676 Matrix
    欧拉回路三水题 POJ 1041 POJ 2230 POJ 1386
    SPOJ 371 BOXES
    POJ 3422 Kaka's Matrix Travels
  • 原文地址:https://www.cnblogs.com/sandshell/p/11693834.html
Copyright © 2011-2022 走看看