本文收录在容器技术学习系列文章总目录

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

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

(1)拉取镜像

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

(2)启动registry 容器

  1. [root@docker2 ~]# docker run --name registry -p 5000:5000 -v /data/registry:/var/lib/registry -d registry:2.6.2
  2. a43f802e737eba89879a4dc02562b38e0042db981f9bdb91782b453f0bac4119
  3. [root@docker2 ~]# docker port registry
  4. 5000/tcp -> 0.0.0.0:5000
  5. [root@docker2 ~]# ss -nutlp |grep 5000
  6. tcp LISTEN 0 128 :::5000 :::* users:(("docker-proxy",pid=4901,fd=4))
  7. [root@docker2 ~]# docker inspect -f {{."Mounts"}} registry
  8. [{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. [root@docker1 ~]# docker tag busybox:latest 192.168.10.102:5000/busybox:v0.1
  2. [root@docker1 ~]# docker image ls
  3. REPOSITORY TAG IMAGE ID CREATED SIZE
  4. 192.168.10.102:5000/busybox v0.1 758ec7f3a1ee 13 days ago 1.15 MB
  5. busybox latest 758ec7f3a1ee 13 days ago 1.15 MB

  

(2)尝试删除镜像

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

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

(3)修改重启docker服务

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

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

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

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

  

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

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

  

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

  1. [root@docker1 ~]# docker rmi 192.168.10.102:5000/busybox:v0.1
  2. Untagged: 192.168.10.102:5000/busybox:v0.1
  3. Untagged: 192.168.10.102:5000/busybox@sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe
  4. [root@docker1 ~]# docker image ls
  5. REPOSITORY TAG IMAGE ID CREATED SIZE
  6. busybox latest 758ec7f3a1ee 2 weeks ago 1.15 MB
  7. [root@docker1 ~]# docker pull 192.168.10.102:5000/busybox:v0.1
  8. v0.1: Pulling from busybox
  9. Digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe
  10. Status: Downloaded newer image for 192.168.10.102:5000/busybox:v0.1
  11. [root@docker1 ~]# docker image ls
  12. REPOSITORY TAG IMAGE ID CREATED SIZE
  13. 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. registry_storage_provider_name = swift
  2. registry_storage_provider_config = usernameadminpasswordADMIN_PASSauthurlhttp// 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. $ fdisk -l
  2. Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors
  3. Units = sectors of 1 * 512 = 512 bytes
  4. Sector size (logical/physical): 512 bytes / 512 bytes
  5. I/O size (minimum/optimal): 512 bytes / 512 bytes

(2)对磁盘进行分区

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

  

(3)磁盘文件格式化

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

  

(4)挂载磁盘

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

  

(5)验证

  1. [root@centos7-1 ~]# df -h /data
  2. Filesystem Size Used Avail Use% Mounted on
  3. /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. $ curl -L https://github.com/docker/compose/releases/download/1.23.2/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose
  2. $ chmod +x /usr/local/bin/docker-compose
  3. $ docker-compose version
  4. docker-compose version 1.23.2, build 1110ad01
  5. docker-py version: 3.6.0
  6. CPython version: 3.6.7
  7. OpenSSL version: OpenSSL 1.1.0f 25 May 2017

  

3.4 安装搭建Harbor

3.4.1 下载Harbor 安装包

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

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

  

3.4.2 配置Harbor 服务

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

  1. [root@docker2 ~]# cd /data/harbor/
  2. [root@docker2 harbor]# grep "^[^#]" harbor.cfg
  3. _version = 1.7.0
  4. hostname = docker2
  5. ui_url_protocol = http
  6. max_job_workers = 2
  7. customize_crt = on
  8. ssl_cert = /data/cert/server.crt
  9. ssl_cert_key = /data/cert/server.key
  10. secretkey_path = /data
  11. admiral_url = NA
  12. log_rotate_count = 50
  13. log_rotate_size = 200M
  14. http_proxy =
  15. https_proxy =
  16. no_proxy = 127.0.0.1,localhost,core,registry
  17. email_identity =
  18. email_server = smtp.mydomain.com
  19. email_server_port = 25
  20. email_username = sample_admin@mydomain.com
  21. email_password = abc
  22. email_from = admin <sample_admin@mydomain.com>
  23. email_ssl = false
  24. email_insecure = false
  25. harbor_admin_password = Harbor12345
  26. auth_mode = db_auth
  27. ldap_url = ldaps://ldap.mydomain.com
  28. ldap_basedn = ou=people,dc=mydomain,dc=com
  29. ldap_uid = uid
  30. ldap_scope = 2
  31. ldap_timeout = 5
  32. ldap_verify_cert = true
  33. ldap_group_basedn = ou=group,dc=mydomain,dc=com
  34. ldap_group_filter = objectclass=group
  35. ldap_group_gid = cn
  36. ldap_group_scope = 2
  37. self_registration = on
  38. token_expiration = 30
  39. project_creation_restriction = everyone
  40. db_host = postgresql
  41. db_password = along
  42. db_port = 5432
  43. db_user = postgres
  44. redis_host = redis
  45. redis_port = 6379
  46. redis_password = along
  47. redis_db_index = 1,2,3
  48. clair_db_host = postgresql
  49. clair_db_password = along
  50. clair_db_port = 5432
  51. clair_db_username = postgres
  52. clair_db = postgres
  53. clair_updaters_interval = 12
  54. uaa_endpoint = uaa.mydomain.org
  55. uaa_clientid = id
  56. uaa_clientsecret = secret
  57. uaa_verify_cert = true
  58. uaa_ca_cert = /path/to/ca.pem
  59. registry_storage_provider_name = filesystem
  60. registry_storage_provider_config =
  61. 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. [root@docker2 harbor]# ./install.sh
  2.  
  3. [Step 0]: checking installation environment ...
  4.  
  5. Note: docker version: 18.03.1
  6.  
  7. Note: docker-compose version: 1.23.2
  8.  
  9. [Step 1]: loading Harbor images ...
  10. Loaded image: goharbor/registry-photon:v2.6.2-v1.7.1
  11. Loaded image: goharbor/harbor-migrator:v1.7.1
  12. Loaded image: goharbor/harbor-adminserver:v1.7.1
  13. Loaded image: goharbor/harbor-core:v1.7.1
  14. Loaded image: goharbor/harbor-log:v1.7.1
  15. Loaded image: goharbor/harbor-jobservice:v1.7.1
  16. Loaded image: goharbor/notary-server-photon:v0.6.1-v1.7.1
  17. Loaded image: goharbor/clair-photon:v2.0.7-v1.7.1
  18. Loaded image: goharbor/harbor-portal:v1.7.1
  19. Loaded image: goharbor/harbor-db:v1.7.1
  20. Loaded image: goharbor/redis-photon:v1.7.1
  21. Loaded image: goharbor/nginx-photon:v1.7.1
  22. Loaded image: goharbor/harbor-registryctl:v1.7.1
  23. Loaded image: goharbor/notary-signer-photon:v0.6.1-v1.7.1
  24. Loaded image: goharbor/chartmuseum-photon:v0.7.1-v1.7.1
  25.  
  26. [Step 2]: preparing environment ...
  27. Generated and saved secret to file: /data/secretkey
  28. Generated configuration file: ./common/config/nginx/nginx.conf
  29. Generated configuration file: ./common/config/adminserver/env
  30. Generated configuration file: ./common/config/core/env
  31. Generated configuration file: ./common/config/registry/config.yml
  32. Generated configuration file: ./common/config/db/env
  33. Generated configuration file: ./common/config/jobservice/env
  34. Generated configuration file: ./common/config/jobservice/config.yml
  35. Generated configuration file: ./common/config/log/logrotate.conf
  36. Generated configuration file: ./common/config/registryctl/env
  37. Generated configuration file: ./common/config/core/app.conf
  38. Generated certificate, key file: ./common/config/core/private_key.pem, cert file: ./common/config/registry/root.crt
  39. The configuration files are ready, please use docker-compose to start the service.
  40.  
  41. [Step 3]: checking existing instance of Harbor ...
  42.  
  43. [Step 4]: starting Harbor ...
  44. Creating network "harbor_harbor" with the default driver
  45. Creating harbor-log ... done
  46. Creating registry ... done
  47. Creating harbor-db ... done
  48. Creating registryctl ... done
  49. Creating harbor-adminserver ... done
  50. Creating redis ... done
  51. Creating harbor-core ... done
  52. Creating harbor-portal ... done
  53. Creating harbor-jobservice ... done
  54. Creating nginx ... done
  55.  
  56. ----Harbor has been installed and started successfully.----
  57.  
  58. Now you should be able to visit the admin portal at http://docker2.
  59. For more details, please visit https://github.com/goharbor/harbor .

  

3.4.3 安装后验证

(1)打开了一些端口

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

  

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

  1. [root@docker2 ~]# docker ps
  2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
  3. 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
  4. a410a38479fa goharbor/harbor-portal:v1.7.1 "nginx -g 'daemon of…" 2 hours ago Up 2 hours (healthy) 80/tcp harbor-portal
  5. e25f87eb80db goharbor/harbor-jobservice:v1.7.1 "/harbor/start.sh" 2 hours ago Up 2 hours harbor-jobservice
  6. 2be7211535a2 goharbor/harbor-core:v1.7.1 "/harbor/start.sh" 2 hours ago Up 2 hours (healthy) harbor-core
  7. 26681dde1dec goharbor/harbor-db:v1.7.1 "/entrypoint.sh post…" 2 hours ago Up 2 hours (healthy) 5432/tcp harbor-db
  8. 80f592176896 goharbor/harbor-registryctl:v1.7.1 "/harbor/start.sh" 2 hours ago Up 2 hours (healthy) registryctl
  9. def7f9892e46 goharbor/redis-photon:v1.7.1 "docker-entrypoint.s…" 2 hours ago Up 2 hours 6379/tcp redis
  10. 9af874368813 goharbor/registry-photon:v2.6.2-v1.7.1 "/entrypoint.sh /etc…" 2 hours ago Up 2 hours (healthy) 5000/tcp registry
  11. 0f7156ac62f7 goharbor/harbor-adminserver:v1.7.1 "/harbor/start.sh" 2 hours ago Up 2 hours (healthy) harbor-adminserver
  12. 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. [root@docker1 ~]# cat /etc/docker/daemon.json
  2. {
  3. "registry-mirrors": ["https://registry.docker-cn.com"],
  4. "insecure-registries": ["192.168.10.102:5000"],
  5. "insecure-registries": ["docker2:80"]
  6. }
  7. [root@docker1 ~]# systemctl restart docker

  

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

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

  

(3)登录harbor仓库

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

  

(4)上传镜像

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

  

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

(6)拉取harbor 中的镜像

  1. [root@docker1 ~]# docker rmi docker2:80/demo/busybox:v0.1
  2. Untagged: docker2:80/demo/busybox:v0.1
  3. Untagged: docker2:80/demo/busybox@sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe
  4. [root@docker1 ~]# docker image ls docker2:80/demo/busybox:v0.1
  5. REPOSITORY TAG IMAGE ID CREATED SIZE
  6. [root@docker1 ~]# docker pull docker2:80/demo/busybox:v0.1
  7. v0.1: Pulling from demo/busybox
  8. Digest: sha256:cbcde3595079b1f7a6b046e96e7547fe786d5c2c8eba678bc260161bc01b8dbe
  9. Status: Downloaded newer image for docker2:80/demo/busybox:v0.1
  10. [root@docker1 ~]# docker image ls docker2:80/demo/busybox:v0.1
  11. REPOSITORY TAG IMAGE ID CREATED SIZE
  12. 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. [root@docker2 harbor]# docker-compose pause
  2. Pausing harbor-log ... done
  3. Pausing harbor-adminserver ... done
  4. Pausing registry ... done
  5. Pausing redis ... done
  6. Pausing registryctl ... done
  7. Pausing harbor-db ... done
  8. Pausing harbor-core ... done
  9. Pausing harbor-jobservice ... done
  10. Pausing harbor-portal ... done
  11. Pausing nginx ... done

  

(2)关闭harbor服务

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

  

(3)开启harbor服务

  1. [root@docker2 harbor]# docker-compose start
  2. Starting log ... done
  3. Starting registry ... done
  4. Starting registryctl ... done
  5. Starting postgresql ... done
  6. Starting adminserver ... done
  7. Starting core ... done
  8. Starting portal ... done
  9. Starting redis ... done
  10. Starting jobservice ... done
  11. Starting proxy ... done

Docker系列08—搭建使用私有docker registry的更多相关文章

  1. Docker容器之搭建本地私有仓库

    Docker容器之搭建本地私有仓库 本地私有仓库搭建的具体步骤 首先下载 registry 镜像 docker pull registry 在 daemon.json 文件中添加私有镜像仓库的地址并重 ...

  2. 8天入门docker系列 —— 第六天 搭建自己的私有镜像仓库Registry

    这一篇我们来聊聊私有仓库的搭建,其实不管你是通过docker build还是compose的方式进行构建,最终还是要将生成好的镜像push到远程的仓库中,这样多个 平台可以方便的获取你registry ...

  3. Docker系列教程01-Centos7安装新版Docker教程(10步)

    最近一直忙于开发,没有时间好好总结一下docker的知识.其实现在docker的教程已经很多很多了,但是很多系统的教程都是基于Ubuntu系统,因为官方推荐使用Ubuntu系统啊,原因在于Ubuntu ...

  4. Docker系列10—容器编排工具Docker Compose详解

    本文收录在容器技术学习系列文章总目录 1.Docker Compose 概述 Compose是一个用于定义和运行多容器Docker应用程序的工具.使用Compose,您可以使用Compose文件来配置 ...

  5. docker 系列 - 基础镜像环境和Docker常用命令整理

    =======================docker 基础镜像环境 alpine=======================可以使用 docker search 命令搜索指定的 image, ...

  6. docker系列(三):docker容器

    1 引言 在前面博文中,我们介绍了镜像.如果说镜像犹如面向对象中的类,本节要说的容器就是由类实例化出来的对象了,有了类才可以创建容器. 先从拉取一个官方提供的ubuntu最新镜像: $ docker ...

  7. docker系列详解<一>之docker安装

    1.Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 uname -r 命令查看你当前的内核版本 $ ...

  8. Docker系列08:容器监控

    1 监控解决方案 cadvisor+influxdb+grafana cAdvisor:Google开源的工具,用于监控Docker主机和容器系统资源,通过图形页面实时显示数据,但不存储:它通过宿主机 ...

  9. 【Docker系列】:全面认识Docker和基本指令

    Docker逐渐成为虚拟化技术的佼佼者,Docker技术也是架构师的必备技能. 什么是Docker Docker 是一个开源的应用容器引擎,基于Go语言,诞生于2013年初,最初发起者是dotClou ...

随机推荐

  1. 对象转JSON

    /// <summary> /// 把对象序列化 JSON 字符串 /// </summary> /// <typeparam name="T"> ...

  2. web项目部署到服务器中浏览器中显示乱码

    项目部署之后浏览器打开查看时页面乱码 这里可能需要修改一下tomcat配置文件,首先找到Tomcat的安装路径下的conf/server.xml文件,找到之后可以CTRL+F搜索如下的内容: < ...

  3. jieba中文分词

      jieba中文分词¶   中文与拉丁语言不同,不是以空格分开每个有意义的词,在我们处理自然语言处理的时候,大部分情况下,词汇是对句子和文章的理解基础.因此需要一个工具去把完整的中文分解成词. ji ...

  4. 类型后面加问号 int?

    类型后面加问号 int? 单问号---用于给变量设初值的时候,给变量(int类型)赋值为null,而不是0! 双问号---用于判断并赋值,先判断当前变量是否为null,如果是就可以赋一个新值,否则跳过 ...

  5. pta-树种统计

    树种统计 (25 分) 随着卫星成像技术的应用,自然资源研究机构可以识别每一棵树的种类.请编写程序帮助研究人员统计每种树的数量,计算每种树占总数的百分比. 输入格式: 输入首先给出正整数N(≤10​5 ...

  6. Consider defining a bean named 'entityManagerFactory' in your configuration解决办法

    错误信息: *************************** APPLICATION FAILED TO START *************************** Descriptio ...

  7. Python基础之面向对象思维解决游戏《天龙八部》

    一.程序设计思维: 以面向对象的思维设计<天龙八部>游戏技能,使得技能效果在增加或者减少时,游戏技能整体框架不改变,仅仅增加或者减少技能效果 二.思路流程图如下: 三.变成框架实现代码: ...

  8. PDF转换成Word,ppt转换成word

    pdf与word我没找到直接转换的方式,不过可以用间接方式嘛! pdf ==>picture ==>word!ppt转word的原理也是先把ppt转成图片,再把图片插入word! 先准备好 ...

  9. QT中foreach的使用

    在标准C++中,并没有foreach关键字. 但是在QT中,可以使用这一个关键字,其主要原因是QT自己增加了这一个关键字,就像slots和signals.emit等一样.增加的foreach关键字在编 ...

  10. 老桂.net core系列课程

    为了支持"首届dnc开源峰会"(dncNew.com)顺利举办,本人<.net core系列课程>进行一波优惠,每个课程优惠在立即购买上方,领取现金券即可.课程地址为腾 ...