• Docker系列08—搭建使用私有docker registry


    Docker系列08—搭建使用私有docker registry

     
     

    1、了解Docker Registry

    1.1 介绍

    • registry 用于保存docker 镜像,包括镜像的层次结构和元数据。
    • 启动容器时,docker daemon会试图从本地获取相关的镜像;本地镜像不存在时,其将从registry中下载该镜像并保存到本地;
    • 拉取镜像时,如果不知道registry仓库地址,默认从Docker Hub搜索拉取镜像

    1.2 分类

    • Sponsor Registry:第三方的registry,供客户和docker社区使用;
    • mirror Registry:第三方的registry,只让客户使用;如docker cn和阿里云的镜像加速器;
    • vendor Registry:服务商的registry,由发布docker镜像的供应商提供的registry;如红帽提供的专有的,收费提供;
    • private Registry:通过设有防火墙和额外的安全层的私有实体提供的registry;自建的registry,在本地搭建registry,节省带宽

    1.3 registry组成(repository和index)

    (1)Repository

    • 由特定的docker镜像的所有迭代版本组成的镜像仓库;
    • 一个registry中可以存在多个repository:
      •  repository可分为“顶层仓库”和“用户仓库”
      •  用户仓库名称格式为“用户名/仓库名”
    • 每个仓库可以包含多个Tag(标签),每个标签对应一个镜像

    (2)Index

    • 维护用户账户、镜像的校验以及公共命名空间的信息
    • 相当于为registry提供了一个完成用户认证等功能的检索接口

    1.4 拉取上传仓库镜像

    (1)拉取镜像

    1
    docker pull <registry>[:<port>]/[<namespace>/]<name>:<tag>
    •  registry:仓库服务器地址:不指定默认是docker hub
    •  port:端口;默认是443,因为是https协议
    •  namespace:名称空间,指是哪个用户的仓库,如果是顶层仓库,可省
    •  name:仓库名
    •  tag:标签名;默认是latest版本

    (2)上传镜像

    1
    docker push [OPTIONS] NAME[:TAG]

    1.5 知名docker仓库

        例:docker pull quay.io/coreos/flannel:v0.10.0-amd64

      博主前面的文章已经详细介绍过,从第三方的registry 上传拉取镜像了;这篇就是详细讲解如果搭建私有registry ,并在私有registry上传拉取镜像了。

    2、搭建私有仓库 distribution

    2.1 distribution 介绍

    docker提供的开源Registry,但是很简单,只能作为存储镜像的仓库,没有额外的功能;如管理页面等

    2.2 安装启动 distribution

    两种方案安装,我采用的是方案2

    2.2.1 方案1:使用yum安装(直接从extras 源中下载安装)

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

    2.2.2 方案2:拉取镜像,作为容器安装

    (1)拉取镜像

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [root@docker2 ~]# docker pull registry:2.6.2
    2.6.2: Pulling from library/registry
    d6a5679aa3cf: Pull complete
    ad0eac849f8f: Pull complete
    2261ba058a15: Pull complete
    f296fda86f10: Pull complete
    bcd4a541795b: Pull complete
    Digest: sha256:5a156ff125e5a12ac7fdec2b90b7e2ae5120fa249cf62248337b6d04abc574c8
    Status: Downloaded newer image for registry:2.6.2

    (2)启动registry 容器

    1
    2
    3
    4
    5
    6
    7
    8
    [root@docker2 ~]# docker run --name registry -p 5000:5000 -v /data/registry:/var/lib/registry -d registry:2.6.2
    a43f802e737eba89879a4dc02562b38e0042db981f9bdb91782b453f0bac4119
    [root@docker2 ~]# docker port registry
    5000/tcp -> 0.0.0.0:5000
    [root@docker2 ~]# ss -nutlp |grep 5000
    tcp    LISTEN     0      128      :::5000                 :::*                   users:(("docker-proxy",pid=4901,fd=4))
    [root@docker2 ~]# docker inspect -f {{."Mounts"}} registry
    [{bind  /data/registry /var/lib/registry   true rprivate}]

    注:

    •  -p 5000:5000:将容器中的5000端口,暴露在宿主机的5000端口
    •  -v /data/registry:/var/lib/registry:指定宿主机存储的位置为 /data/registry
    •  -d:后台运行容器

    2.3 从私有仓库上传下载镜像

    2.3.1 将本地的镜像上传到私有仓库

    (1)先将本地仓库打上合适的标签

    1
    2
    3
    4
    5
    [root@docker1 ~]# docker tag busybox:latest 192.168.10.102:5000/busybox:v0.1
    [root@docker1 ~]# docker image ls
    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    192.168.10.102:5000/busybox   v0.1                758ec7f3a1ee        13 days ago         1.15 MB
    busybox                       latest              758ec7f3a1ee        13 days ago         1.15 MB

      

    (2)尝试删除镜像

    1
    2
    3
    [root@docker1 ~]# docker push 192.168.10.102:5000/busybox:v0.1
    The push refers to a repository [192.168.10.102:5000/busybox]
    Get https://192.168.10.102:5000/v1/_ping: http: server gave HTTP response to HTTPS client

    上传镜像失败;原因:docker 上传下载默认只支持https协议,搭建的私有仓库是http协议。

    (3)修改重启docker服务

    1
    2
    3
    4
    5
    6
    [root@docker1 ~]# vim /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://registry.docker-cn.com"],
      "insecure-registries": ["192.168.10.102:5000"]
    }
    [root@docker1 ~]# systemctl restart docker

    注:就是将私有仓库认证为安全仓库:"insecure-registries": [""]

    (4)再次上传镜像,成功

    1
    2
    3
    4
    [root@docker1 ~]# docker push 192.168.10.102:5000/busybox:v0.1
    The push refers to a repository [192.168.10.102:5000/busybox]
    23bc2b70b201: Pushed
    v0.1: digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe size: 527

      

    (5)在私有仓库的服务器上验证

    1
    2
    [root@docker2 ~]# ls /data/registry/docker/registry/v2/
    blobs  repositories

      

    (6)从私有仓库拉取镜像,先删除再拉取

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    [root@docker1 ~]# docker rmi 192.168.10.102:5000/busybox:v0.1
    Untagged: 192.168.10.102:5000/busybox:v0.1
    Untagged: 192.168.10.102:5000/busybox@sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe
    [root@docker1 ~]# docker image ls
    REPOSITORY               TAG                 IMAGE ID            CREATED             SIZE
    busybox                  latest              758ec7f3a1ee        2 weeks ago         1.15 MB
    [root@docker1 ~]# docker pull 192.168.10.102:5000/busybox:v0.1
    v0.1: Pulling from busybox
    Digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe
    Status: Downloaded newer image for 192.168.10.102:5000/busybox:v0.1
    [root@docker1 ~]# docker image ls
    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    192.168.10.102:5000/busybox   v0.1                758ec7f3a1ee        2 weeks ago         1.15 MB

      

    3、安装搭建私有仓库 Harbor

    3.1 认识 Harbor

    3.1.1 Harbor 介绍

    •  Harbor gitlab项目地址:https://github.com/goharbor/harbor
    •  Harbor是一个开源的可信云本机注册表项目,用于存储,签名和扫描内容。Harbor通过添加用户通常需要的功能(如安全性,身份和管理)来扩展开源Docker Distribution。使注册表更接近构建和运行环境可以提高图像传输效率。Harbor支持在注册表之间复制映像,还提供高级安全功能,如用户管理,访问控制和活动审计。
    •  Harbour由Cloud Native Computing Foundation(CNCF)托管。如果您是一个希望帮助塑造云原生技术发展的组织,请考虑加入CNCF。有关谁参与以及Harbour如何扮演角色的详细信息,请阅读CNCF 公告。

    3.1.2 Harbor 特征

    •  云本机注册表:Harbour 支持容器映像和Helm图表,可用作云本机环境(如容器运行时和业务流程平台)的注册表。
    •  基于角色的访问控制:用户和存储库通过“项目”进行组织,用户可以对项目下的图像拥有不同的权限。
    •  基于策略的映像复制:可以基于具有多个过滤器(存储库,标记和标签)的策略在多个注册表实例之间复制(同步)映像。如果遇到任何错误,Harbor将自动重试进行复制。非常适合负载平衡,高可用性,多数据中心,混合和多云场景。
    •  漏洞扫描:Harbor定期扫描图像并警告用户漏洞。
    •  LDAP / AD支持:Harbor与现有企业LDAP / AD集成以进行用户身份验证和管理,并支持将LDAP组导入Harbor并为其分配适当的项目角色。
    •  图像删除和垃圾收集:可以删除图像,并可以回收它们的空间。
    •  公证:可以确保图像的真实性。
    •  图形用户门户:用户可以轻松浏览,搜索存储库和管理项目。
    •  审计:跟踪存储库的所有操作。
    •  RESTful API:适用于大多数管理操作的RESTful API,易于与外部系统集成。
    •  易于部署:提供在线和离线安装程序。

    3.1.3 harbor 配置参数

    (1)参数介绍

    ① 配置参数位于文件harbor.cfg中。

    ② 在harbor.cfg中有两类参数,必需参数和可选参数。

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

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

    ④ 请注意,至少需要更改hostname属性。

    (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:日志文件在被删除之前会被轮换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。

    (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 = sample_admin@mydomain.com
      •  email_password = abc
      •  email_from = admin sample_admin@mydomain.com
      •  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.cfg。否则,用户可能无法在升级后登录。
    •  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”,这样只有管理员才能创建项目。

    (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作为存储后端,则参数可能如下所示:

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

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

    3.2 安装主机的先决条件

    3.2.1 硬件

    资源容量描述
    CPU 最小2 CPU 4 CPU是首选
    内存 最小4GB 8GB是首选
    磁盘 最小40GB 160GB是首选

    3.2.2 软件

    软件描述
    Python 2.7或更高版本 请注意,您可能必须在Linux发行版(Gentoo,Arch)上安装Python,默认情况下不安装Python解释器
    Docker engine 版本1.10或更高版本 有关安装说明,请参阅:https//docs.docker.com/engine/installation/
    Docker Compose 版本1.6.0或更高版本 有关安装说明,请参阅:https//docs.docker.com/compose/install/
    Openssl 最新的是首选 为Harbor生成证书和密钥

    3.2.3 网络端口

    端口协议描述
    443 HTTPS Harbor门户和核心API将接受此端口上的https协议请求
    4443 HTTPS 只有在启用“公证”时才需要连接到Dock的Docker Content Trust服务
    80 HTTP Harbor端口和核心API将接受此端口上的http协议请求

    3.2.4 添加一块50G 新硬盘(如果磁盘足够,可忽略)

    博主也是太长时间没有进行硬盘添加的操作了,熟悉一遍

    (1)查询添加的磁盘的名字

    1
    2
    3
    4
    5
    $ fdisk -l
    Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors
    Units = sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes

    (2)对磁盘进行分区

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $ fdisk /dev/sdb
    Command (m for help): m
    Command (m for help): n
    Partition type:
       p   primary (0 primary, 0 extended, 4 free)
       e   extended
    Using default response p
    Partition number (1-4, default 1):
    First sector (2048-104857599, default 2048):
    Using default value 2048
    Last sector, +sectors or +size{K,M,G} (2048-104857599, default 104857599):
    Using default value 104857599
    Partition 1 of type Linux and of size 50 GiB is set
    Command (m for help): w
    The partition table has been altered!
     
    Calling ioctl() to re-read partition table.
    Syncing disks.

      

    (3)磁盘文件格式化

    1
    $ [root@centos7-1 ~]# mkfs.ext3 /dev/sdb1

      

    (4)挂载磁盘

    1
    2
    3
    $ vim /etc/fstab    设为开机自动挂载
    /dev/sdb1           /data                   ext3    defaults        0 0
    $ mount -a   挂载磁盘

      

    (5)验证

    1
    2
    3
    [root@centos7-1 ~]# df -h /data
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/sdb1        50G   52M   47G   1% /data

      

    3.2.5 安装docker编排工具 Docker Compose

    方案1:直接yum安装

    1
    [root@docker2 ~]# yum -y install docker-compose

      

    方案2:在GitHub上选择自己需要的版本下载安装https://github.com/docker/compose/releases

    1
    2
    3
    4
    5
    6
    7
    $ curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
    $ chmod +x /usr/local/bin/docker-compose
    $ docker-compose version
    docker-compose version 1.23.2, build 1110ad01
    docker-py version: 3.6.0
    CPython version: 3.6.7
    OpenSSL version: OpenSSL 1.1.0f  25 May 2017

      

    3.4 安装搭建Harbor

    3.4.1 下载Harbor 安装包

    资源可以下载的很慢,我已经将1.7.1版本放入我的网盘了,需要的私聊

    1
    2
    [root@docker2 ~]# wget https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.1.tgz
    [root@docker2 ~]# tar -C /data/ -xvf harbor-offline-installer-v1.7.1.tgz

      

    3.4.2 配置Harbor 服务

    (1)修改harbor.cfg 配置文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    [root@docker2 ~]# cd /data/harbor/
    [root@docker2 harbor]# grep "^[^#]" harbor.cfg
    _version = 1.7.0
    hostname = docker2
    ui_url_protocol = http
    max_job_workers = 2
    customize_crt = on
    ssl_cert = /data/cert/server.crt
    ssl_cert_key = /data/cert/server.key
    secretkey_path = /data
    admiral_url = NA
    log_rotate_count = 50
    log_rotate_size = 200M
    http_proxy =
    https_proxy =
    no_proxy = 127.0.0.1,localhost,core,registry
    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
    email_insecure = false
    harbor_admin_password = Harbor12345
    auth_mode = db_auth
    ldap_url = ldaps://ldap.mydomain.com
    ldap_basedn = ou=people,dc=mydomain,dc=com
    ldap_uid = uid
    ldap_scope = 2
    ldap_timeout = 5
    ldap_verify_cert = true
    ldap_group_basedn = ou=group,dc=mydomain,dc=com
    ldap_group_filter = objectclass=group
    ldap_group_gid = cn
    ldap_group_scope = 2
    self_registration = on
    token_expiration = 30
    project_creation_restriction = everyone
    db_host = postgresql
    db_password = along
    db_port = 5432
    db_user = postgres
    redis_host = redis
    redis_port = 6379
    redis_password = along
    redis_db_index = 1,2,3
    clair_db_host = postgresql
    clair_db_password = along
    clair_db_port = 5432
    clair_db_username = postgres
    clair_db = postgres
    clair_updaters_interval = 12
    uaa_endpoint = uaa.mydomain.org
    uaa_clientid = id
    uaa_clientsecret = secret
    uaa_verify_cert = true
    uaa_ca_cert = /path/to/ca.pem
    registry_storage_provider_name = filesystem
    registry_storage_provider_config =
    registry_custom_ca_bundle =

    主要修改了:

      hostname:主机名

      max_job_workers:最大cpu数,小于等于自己服务器的硬件

    (2)定义docker-compose.yml 文件(可省略)

    docker-compose.yml 文件是docker 编排时,对容器的一些操作:

    ① 端口

    ports:

          - 80:80

          - 443:443

          - 4443:4443

    ② 众多存储器路径

    如:volumes:

          - /data/registry:/storage:z

    在生产环境中,尽量将容器的存储卷定义在空间较为充足的磁盘;

    自己根据实际情况进行修改;

    3.4.3 安装启动harbor

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    [root@docker2 harbor]# ./install.sh
     
    [Step 0]: checking installation environment ...
     
    Note: docker version: 18.03.1
     
    Note: docker-compose version: 1.23.2
     
    [Step 1]: loading Harbor images ...
    Loaded image: goharbor/registry-photon:v2.6.2-v1.7.1
    Loaded image: goharbor/harbor-migrator:v1.7.1
    Loaded image: goharbor/harbor-adminserver:v1.7.1
    Loaded image: goharbor/harbor-core:v1.7.1
    Loaded image: goharbor/harbor-log:v1.7.1
    Loaded image: goharbor/harbor-jobservice:v1.7.1
    Loaded image: goharbor/notary-server-photon:v0.6.1-v1.7.1
    Loaded image: goharbor/clair-photon:v2.0.7-v1.7.1
    Loaded image: goharbor/harbor-portal:v1.7.1
    Loaded image: goharbor/harbor-db:v1.7.1
    Loaded image: goharbor/redis-photon:v1.7.1
    Loaded image: goharbor/nginx-photon:v1.7.1
    Loaded image: goharbor/harbor-registryctl:v1.7.1
    Loaded image: goharbor/notary-signer-photon:v0.6.1-v1.7.1
    Loaded image: goharbor/chartmuseum-photon:v0.7.1-v1.7.1
     
     
    [Step 2]: preparing environment ...
    Generated and saved secret to file: /data/secretkey
    Generated configuration file: ./common/config/nginx/nginx.conf
    Generated configuration file: ./common/config/adminserver/env
    Generated configuration file: ./common/config/core/env
    Generated configuration file: ./common/config/registry/config.yml
    Generated configuration file: ./common/config/db/env
    Generated configuration file: ./common/config/jobservice/env
    Generated configuration file: ./common/config/jobservice/config.yml
    Generated configuration file: ./common/config/log/logrotate.conf
    Generated configuration file: ./common/config/registryctl/env
    Generated configuration file: ./common/config/core/app.conf
    Generated certificate, key file: ./common/config/core/private_key.pem, cert file: ./common/config/registry/root.crt
    The configuration files are ready, please use docker-compose to start the service.
     
     
    [Step 3]: checking existing instance of Harbor ...
     
     
    [Step 4]: starting Harbor ...
    Creating network "harbor_harbor" with the default driver
    Creating harbor-log ... done
    Creating registry           ... done
    Creating harbor-db          ... done
    Creating registryctl        ... done
    Creating harbor-adminserver ... done
    Creating redis              ... done
    Creating harbor-core        ... done
    Creating harbor-portal      ... done
    Creating harbor-jobservice  ... done
    Creating nginx              ... done
     
    ✔ ----Harbor has been installed and started successfully.----
     
    Now you should be able to visit the admin portal at http://docker2.
    For more details, please visit https://github.com/goharbor/harbor .

      

    3.4.3 安装后验证

    (1)打开了一些端口

    1
    2
    3
    4
    5
    [root@docker2 harbor]# ss -nutlp |grep docker
    tcp    LISTEN     0      128    127.0.0.1:1514                  *:*                   users:(("docker-proxy",pid=1440,fd=4))
    tcp    LISTEN     0      128      :::80                   :::*                   users:(("docker-proxy",pid=2204,fd=4))
    tcp    LISTEN     0      128      :::443                  :::*                   users:(("docker-proxy",pid=2192,fd=4))
    tcp    LISTEN     0      128      :::4443                 :::*                   users:(("docker-proxy",pid=2181,fd=4))

      

    (2)harbor实际就是启动了一些docker服务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@docker2 ~]# docker ps
    CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS                 PORTS                                                              NAMES
    def22a8eeb9a        goharbor/nginx-photon:v1.7.1             "nginx -g 'daemon of…"   2 hours ago         Up 2 hours (healthy)   0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:4443->4443/tcp   nginx
    a410a38479fa        goharbor/harbor-portal:v1.7.1            "nginx -g 'daemon of…"   2 hours ago         Up 2 hours (healthy)   80/tcp                                                             harbor-portal
    e25f87eb80db        goharbor/harbor-jobservice:v1.7.1        "/harbor/start.sh"       2 hours ago         Up 2 hours                                                                                harbor-jobservice
    2be7211535a2        goharbor/harbor-core:v1.7.1              "/harbor/start.sh"       2 hours ago         Up 2 hours (healthy)                                                                      harbor-core
    26681dde1dec        goharbor/harbor-db:v1.7.1                "/entrypoint.sh post…"   2 hours ago         Up 2 hours (healthy)   5432/tcp                                                           harbor-db
    80f592176896        goharbor/harbor-registryctl:v1.7.1       "/harbor/start.sh"       2 hours ago         Up 2 hours (healthy)                                                                      registryctl
    def7f9892e46        goharbor/redis-photon:v1.7.1             "docker-entrypoint.s…"   2 hours ago         Up 2 hours             6379/tcp                                                           redis
    9af874368813        goharbor/registry-photon:v2.6.2-v1.7.1   "/entrypoint.sh /etc…"   2 hours ago         Up 2 hours (healthy)   5000/tcp                                                           registry
    0f7156ac62f7        goharbor/harbor-adminserver:v1.7.1       "/harbor/start.sh"       2 hours ago         Up 2 hours (healthy)                                                                      harbor-adminserver
    3e45524ef1f0        goharbor/harbor-log:v1.7.1               "/bin/sh -c /usr/loc…"   2 hours ago         Up 2 hours (healthy)   127.0.0.1:1514->10514/tcp                                          harbor-log

    4、使用 Harbor

    4.1 Harbor 页面基础操作

    (1)网页登录http://192.168.130.102

     (2)登录harbor 后一些简单的操作

    (3)用户管理

    注:密码要有一定的复杂度

    (4)邮件配置

    (5)新建一个项目

    4.2 上传下载镜像到 Harbor 仓库

    (1)修改docker配置,添加harbor仓库为新人地址

    1
    2
    3
    4
    5
    6
    7
    [root@docker1 ~]# cat /etc/docker/daemon.json
    {
      "registry-mirrors": ["https://registry.docker-cn.com"],
      "insecure-registries": ["192.168.10.102:5000"],
      "insecure-registries": ["docker2:80"]
    }
    [root@docker1 ~]# systemctl restart docker

      

    (2)把要上传的镜像打上合适的标签

    1
    2
    3
    4
    5
    6
    7
    8
    [root@docker1 ~]# docker tag busybox:latest docker2:80/demo/busybox:v0.1
    [root@docker1 ~]# docker tag nginx:1.14-alpine docker2:80/demo/nginx:v0.1
    [root@docker1 ~]# docker tag nginx:1.14 docker2:80/demo/nginx:v0.2
    [root@docker1 ~]# docker image ls
    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    docker2:80/demo/nginx         v0.2                3f55d5bb33f3        11 days ago         109 MB
    docker2:80/demo/busybox       v0.1                758ec7f3a1ee        2 weeks ago         1.15 MB
    docker2:80/demo/nginx         v0.1                c5b6f731fbc0        2 weeks ago         17.7 MB

      

    (3)登录harbor仓库

    1
    2
    3
    4
    [root@docker1 ~]# docker login docker2:80
    Username: admin
    Password:
    Login Succeeded

      

    (4)上传镜像

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    [root@docker1 ~]# docker push docker2:80/demo/busybox:v0.1
    The push refers to a repository [docker2:80/demo/busybox]
    23bc2b70b201: Pushed
    v0.1: digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe size: 527
    [root@docker1 ~]# docker push docker2:80/demo/nginx  #如果不知道tag,会把这个镜像的所有tag都上传
    The push refers to a repository [docker2:80/demo/nginx]
    59b059d445c1: Layer already exists
    0246bb21855f: Layer already exists
    42acf078bf60: Layer already exists
    7bff100f35cb: Layer already exists
    v0.1: digest: sha256:438d8080098025e9983f253af806c1d1aa6b48be2ef1913991dab506bb3d4f72 size: 1153
    6959f2c2a244: Pushed
    06eb7a5682d6: Pushed
    7b4e562e58dc: Pushed
    v0.2: digest: sha256:1313a52e3fd1718b1c36822cefa0e51950654004dcf12b08affb3067e02c6d9c size: 948

      

    (5)在harbor 上验证上传成功

    (6)拉取harbor 中的镜像

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [root@docker1 ~]# docker rmi docker2:80/demo/busybox:v0.1
    Untagged: docker2:80/demo/busybox:v0.1
    Untagged: docker2:80/demo/busybox@sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe
    [root@docker1 ~]# docker image ls docker2:80/demo/busybox:v0.1
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    [root@docker1 ~]# docker pull docker2:80/demo/busybox:v0.1
    v0.1: Pulling from demo/busybox
    Digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe
    Status: Downloaded newer image for docker2:80/demo/busybox:v0.1
    [root@docker1 ~]# docker image ls docker2:80/demo/busybox:v0.1
    REPOSITORY                TAG                 IMAGE ID            CREATED             SIZE
    docker2:80/demo/busybox   v0.1                758ec7f3a1ee        2 weeks ago         1.15 MB

      

    (7)在harbor web页面可以进行很多实用的操作

    如:给镜像打标、复制镜像、删除镜像等

    4.3 控制harbor 服务

    在harbor 安装路径下,使用docker-compose 命令对harbor 进行控制

    (1)暂停harbor服务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@docker2 harbor]# docker-compose pause
    Pausing harbor-log         ... done
    Pausing harbor-adminserver ... done
    Pausing registry           ... done
    Pausing redis              ... done
    Pausing registryctl        ... done
    Pausing harbor-db          ... done
    Pausing harbor-core        ... done
    Pausing harbor-jobservice  ... done
    Pausing harbor-portal      ... done
    Pausing nginx              ... done

      

    (2)关闭harbor服务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [root@docker2 harbor]# docker-compose stop
    Stopping nginx              ... done
    Stopping harbor-portal      ... done
    Stopping harbor-jobservice  ... done
    Stopping harbor-core        ... done
    Stopping harbor-db          ... done
    Stopping registryctl        ... done
    Stopping redis              ... done
    Stopping registry           ... done
    Stopping harbor-adminserver ... done
    Stopping harbor-log         ... done
    [root@docker2 harbor]# ss -nutl
    Netid State      Recv-Q Send-Q     Local Address:Port                    Peer Address:Port             
    tcp   LISTEN     0      128                    *:22                                 *:*

      

    (3)开启harbor服务

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [root@docker2 harbor]# docker-compose start
    Starting log         ... done
    Starting registry    ... done
    Starting registryctl ... done
    Starting postgresql  ... done
    Starting adminserver ... done
    Starting core        ... done
    Starting portal      ... done
    Starting redis       ... done
    Starting jobservice  ... done
    Starting proxy       ... done
     
  • 相关阅读:
    Linux三剑客之sed深度实践讲解(上)
    Linux第三阶段题型测试
    Linux正则表达式题型
    linux文本处理三剑客命令及用法
    SSH服务协议、部署ssh、scp、sftp服务
    NFS客户端挂载及永久生效
    SSH实现无密码登录
    NFS深度解析及搭建同步NFS服务
    NFS文件系统及搭建NFS共享服务
    Linux系统磁盘管理
  • 原文地址:https://www.cnblogs.com/dengbingbing/p/10399262.html
Copyright © 2020-2023  润新知