Docker Registry
    Registry是一个无状态,高度可扩展的服务器端应用程序,用于保存docker镜像,包括镜像的层次结构和元数据,除了使用官方的Docker Hub,生产环境部署在公有云环境的可使用云平台厂商提供的镜像服务,例如阿里云容器镜像服务,使用私有云的企业一般自建Registry。

    • Sponsor Registry:第三方的registry,供客户和Docker社区使用
    • Mirror Registry:第三方的registry,只让客户使用
    • Vendor Registry:由发布Docker镜像的供应商提供的registry
    • Private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry

    docker-distribution用于构建docker仓库私服

    1. [root@DQ ~]# yum info docker-distribution
    2. 已加载插件:fastestmirror, langpacks
    3. Loading mirror speeds from cached hostfile
    4. * epel: mirrors.yun-idc.com
    5. * ius: mirrors.tuna.tsinghua.edu.cn
    6. 可安装的软件包
    7. 名称 docker-distribution
    8. 架构 x86_64
    9. 版本 2.6.2
    10. 发布 2.git48294d9.el7
    11. 大小 3.5 M
    12. extras/7/x86_64
    13. 简介 Docker toolset to pack, ship, store, and deliver content
    14. 网址 https://github.com/docker/distribution
    15. 协议 ASL 2.0
    16. 描述 Docker toolset to pack, ship, store, and deliver content

    默认distribution搭建的仓库没有安全认证机制,可以借助nginx来实现安全认证

    Docker private Registry的Nginx反代配置方式:

             client_max_body_size 0;  
    
             location / {  
                 proxy_pass  http://registrysrvs;  
                 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;  
                 proxy_redirect off;  
                 proxy_buffering off;  
                 proxy_set_header        Host            $host;  
                 proxy_set_header        X-Real-IP       $remote_addr;  
                 proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;  
                 auth_basic "Docker Registry Service";  
                 auth_basic_user_file "/etc/nginx/.ngxpasswd";  
    
             }
    

    Docker-distribution配置文件格式详细信息:
    https://docs.docker.com/registry/configuration/#list-of-configuration-options

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源Docker Distribution。作为一个企业级私有Registry服务器,Harbor提供了更好的性能和安全。提升用户使用Registry构建和运行环境传输镜像的效率。Harbor支持安装在多个Registry节点的镜像资源复制,镜像全部保存在私有Registry中, 确保数据和知识产权在公司内部网络中管控。另外,Harbor也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

    Harbor依赖docker-compose,Docker-Compose项目是Docker官方的开源工具, 通过在YAML文件中定义定义和运行多容器Docker应用程序,实现对Docker容器集群的快速编排,可以使用单个命令根据yaml文件创建并启动所有服务。Docker-Compose将所管理的容器分为三层,分别是project,服务service以及容器container。

    • 服务 ( service ):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
    • 项目 ( project ):由一组关联的应用容器组成的一个完整业务单元,在 dockercompose.yml 文件中定义。

    Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直接下载编译好的二进制文件使用,或者直接在 Docker 容器中运行。https://docs.docker.com/compose/install

    harbor v1.7.0 offline安装包 链接: https://pan.baidu.com/s/15bxdQ3WTMNz74rVuiSXdqA 提取码: 53im
    下载解压后,修改配置文件,执行./install.sh
    Harbor服务就会根据当期目录下的docker-compose.yml开始下载依赖的镜像,检测并按照顺序依次启动各个服务
    harbor.conf配置

    ## Configuration file of Harbor
    
    # hostname设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost
    hostname = 172.16.10.144   #其他客户端可以与registry服务器通信的地址
    
    # 访问协议,默认是http,也可以设置https,如果设置https,则nginx ssl需要设置on
    ui_url_protocol = http
    
    # mysql数据库root用户默认密码root123,实际使用时修改下
    db_password = root123
    
    max_job_workers = 3 
    customize_crt = on
    ssl_cert = /data/cert/server.crt
    ssl_cert_key = /data/cert/server.key
    secretkey_path = /data
    admiral_url = NA
    
    # 邮件设置,发送重置密码邮件时使用
    email_identity = 
    email_server = smtp.mydomain.com
    email_server_port = 25
    email_username = sample_admin@mydomain.com
    email_password = abc
    email_from = admin <sample_admin@mydomain.com>
    email_ssl = false
    
    # 启动Harbor后,管理员UI登录的密码,默认是Harbor12345
    harbor_admin_password = Harbor12345
    
    # 认证方式,这里支持多种认证方式,如LADP、本次存储、数据库认证。默认是db_auth,mysql数据库认证
    auth_mode = db_auth
    
    # LDAP认证时配置项
    #ldap_url = ldaps://ldap.mydomain.com
    #ldap_searchdn = uid=searchuser,ou=people,dc=mydomain,dc=com
    #ldap_search_pwd = password
    #ldap_basedn = ou=people,dc=mydomain,dc=com
    #ldap_filter = (objectClass=person)
    #ldap_uid = uid 
    #ldap_scope = 3 
    #ldap_timeout = 5
    
    # 是否开启自注册
    self_registration = on
    
    # Token有效时间,默认30分钟
    token_expiration = 30
    
    # 用户创建项目权限控制,默认是everyone(所有人),也可以设置为adminonly(只能管理员)
    project_creation_restriction = everyone
    
    verify_remote_cert = on
    

    启动harbor后登录push镜像

    [root@master ~]# docker login http://172.16.10.144
    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
    [root@master ~]# docker tag nginx:1.7.9 172.16.10.144/onlinesvc/nginx:1.7.9
    [root@master ~]# docker push 172.16.10.144/onlinesvc/nginx
    

    onlinesvc是预先在web控制台创建好的项目,和dockerhub以及阿里云上的操作类似。
    image.png
    https://www.cnblogs.com/panwenbin-logs/p/10218099.html
    https://www.cnblogs.com/senlinyang/p/8856975.html