Docker的私有库房

保证docker正在运转状况

Docker harbor私有仓库部署与管理

  1. 下载registry镜像

    Docker harbor私有仓库部署与管理

  2. 修正镜像装备文件/etc/docker/daemon.json,增加私有库房装备,修正完后重启docker

    Docker harbor私有仓库部署与管理
    Docker harbor私有仓库部署与管理

  3. 创立私有库房容器

    Docker harbor私有仓库部署与管理

  4. 推送镜像到私有库房中

    • 给镜像打上私有库房标签

      Docker harbor私有仓库部署与管理

    • push推送打过标签的镜像

      Docker harbor私有仓库部署与管理

  5. 检查当时库房中的镜像

    Docker harbor私有仓库部署与管理

    • 检查该镜像标签列表
      Docker harbor私有仓库部署与管理
      Docker harbor私有仓库部署与管理
      Docker harbor私有仓库部署与管理
  6. 删去镜像,后边进行拉取镜像测验

    Docker harbor私有仓库部署与管理

  7. 从私有库房拉取镜像

    Docker harbor私有仓库部署与管理

  8. 其他主机拉取该镜像

    Docker harbor私有仓库部署与管理

    • 修正该主机docker装备文件,增加私有库房(可装备多个)

      Docker harbor私有仓库部署与管理
      Docker harbor私有仓库部署与管理

    • 再次拉取镜像

      Docker harbor私有仓库部署与管理

因为docker的私有库房并不便利,而且检查的时分是以键值对显示,所以用起来并不便利。

Harbor 简介

什么是Harbor

Harbor 是 VMware 公司开源的企业级 Docker Registry 项目,其目标是协助用户迅速搭建一个企业级的 Docker Registry 服务。

Harbor以 Docker 公司开源的 Registry 为根底,供给了图形办理 UI 、依据人物的拜访操控(Role Based AccessControl) 、AD/LDAP 集成、以及审计日志(Auditlogging) 等企业用户需求的功用,一起还原生支撑中文。

Harbor 的每个组件都是以 Docker 容器的方式构建的,运用 docker-compose 来对它进行布置。用于布置 Harbor 的 docker-compose 模板坐落 harbor/docker-compose.yml。

Harbor的特性

  1. 依据人物操控:用户和库房都是依据项目进行组织的,而用户在项目中能够具有不同的权限。
  2. 依据镜像的仿制战略:镜像能够在多个Harbor实例之间进行仿制(同步)。
  3. 支撑 LDAP/AD:Harbor 能够集成企业内部已有的 AD/LDAP(类似数据库的一张表),用于对现已存在的用户认证和办理。
  4. 镜像删去和废物收回:镜像能够被删去,也能够收回镜像占用的空间。
  5. 图形化用户界面:用户能够经过阅读器来阅读,查找镜像库房以及对项目进行办理。
  6. 审计办理:一切针对镜像库房的操作都能够被记载追溯,用于审计办理。
  7. 支撑 RESTful API:RESTful API 供给给办理员关于 Harbor 更多的操控, 使得与其它办理软件集成变得更简单。
  8. Harbor和docker registry的关系:Harbor实质上是对docker registry做了封装,扩展了自己的事务模板。

Harbor的构成

Harbor 在架构上首要有 Proxy、Registry、Core services、Database(Harbor-db)、Log collector(Harbor-log)、Job services 六个组件。

  • Proxy: 是一个 nginx 的前端署理,Harbor 的 Registry、UI、Token 服务等组件,都处在 nginx 反向署理后边。 该署理将来自阅读器、docker clients 的恳求转发到后端不同的服务上。

  • Registry: 担任贮存 Docker 镜像,并处理 Docker push/pull 指令。因为要对用户进行拜访操控,即不同用户对 Docker 镜像 有不同的读写权限,Registry 会指向一个 Token 服务,强制用户的每次 Docker pull/push 恳求都要带着一个合法的 Token, Registry 会经过公钥对 Token 进行解密验证。

  • Core services: Harbor的中心功用,首要供给以下3个服务:

    1. UI(harbor-ui): 供给图形化界面,协助用户办理 Registry 上的镜像(image), 并对用户进行授权。
    2. WebHook:为了及时获取Registry 上image 状况变化的状况,在Registry 上装备 Webhook,把状况变化传递给 UI 模块。
    3. Token 服务:担任依据用户权限给每个 Docker push/pull 指令签发 Token。Docker 客户端向 Registry 服务建议的恳求, 假如不包括 Token,会被重定向到 Token 服务,取得 Token 后再重新向 Registry 进行恳求。
  • Database(harbor-db):为core services供给数据库服务,担任贮存用户权限、审计日志、Docker 镜像分组信息等数据。

  • Job services: 首要用于镜像仿制,本地镜像能够被同步到长途 Harbor 实例上。

  • Log collector(harbor-log): 担任收集其他组件的日志到一个当地。

Harbor 的每个组件都是以 Docker 容器的方式构建的,因而,运用 Docker Compose 来对它进行布置。

一共分为7个容器运转,经过在docker-compose.yml地点目录中履行 docker-compose ps 指令来检查, 名称分别为:nginx、harbor-jobservice、harbor-ui、harbor-db、harbor-adminserver、registry、harbor-log。
其中 harbor-adminserver 首要是作为一个后端的装备数据办理,并没有太多的其他功用。harbor-ui 所要操作的一切数据都经过 harbor-adminserver 这样一个数据装备办理中心来完结。

Harbor架构图

Docker harbor私有仓库部署与管理

Harbor 布置

  • Harbor服务器: 192.168.44.20
    • docker-ce、docker-compose、harbor-offline-v1.2.2
  • client服务器: 192.168.44.30
    • docker-ce

操作过程

  1. 先布置 Docker-Compose 服务,可看Docker-compose – ()中的布置过程。

  2. 布置 Harbor 服务

    • 方法一:下载或上传 Harbor 装置程序
      • Harbor的压缩包下载地址:github.com/goharbor/ha…
wget http://harbor.orientsoft.cn/harbor-1.2.2/harbor-offline-installer-v1.2.2.tgz
tar zxvf harbor-offline-installer-v1.2.2.tgz -C /usr/local/
    • 将已有的包上传到主机,进行布置
      Docker harbor私有仓库部署与管理
      Docker harbor私有仓库部署与管理
  1. 修正harbor装置的装备文件
    Docker harbor私有仓库部署与管理
    Docker harbor私有仓库部署与管理

关于 Harbor.cfg 装备文件中有两类参数:所需参数和可选参数

  1. 所需参数:这些参数需求在装备文件 Harbor.cfg 中设置。假如用户更新它们并运转 install.sh 脚本重新装置 Harbor, 参数将收效。详细参数如下:

    • hostname:用于拜访用户界面和 register 服务。它应该是目标机器的 IP 地址或完全限定的域名(FQDN),例如 192.168.44.10 或 hub.abc.cn。不要运用 localhost 或 127.0.0.1 为主机名。

    • ui_url_protocol:(http 或 https,默以为 http)用于拜访 UI 和令牌/告诉服务的协议。假如公证处于启用状况,则此参数必须为 https。

    • max_job_workers:镜像仿制作业线程。

    • db_password:用于db_auth 的MySQL数据库root 用户的暗码。

    • customize_crt:该特点可设置为翻开或封闭,默许翻开。翻开此特点时,准备脚本创立私钥和根证书,用于生成/验证注册表令牌。当由外部来源供给密钥和根证书时,将此特点设置为 off。

    • ssl_cert:SSL 证书的途径,仅当协议设置为 https 时才应用。

    • secretkey_path:用于在仿制战略中加密或解密长途 register 暗码的密钥途径。

  2. 可选参数:这些参数关于更新是可选的,即用户能够将其保存为默许值,并在发动 Harbor 后在 Web UI 上进行更新。假如进入 Harbor.cfg,只会在第一次发动 Harbor 时收效,随后对这些参数的更新,Harbor.cfg 将被疏忽。

  • 留意:假如挑选经过 UI 设置这些参数,请保证在发动 Harbor 后立即履行此操作。详细来说,必须在注册或在 Harbor 中创立任何新用户之前设置所需的 auth_mode。当体系中有用户时(除了默许的 admin 用户), auth_mode 不能被修正。 详细参数如下:
    • Email:Harbor 需求该参数才干向用户发送“暗码重置”电子邮件,而且只要在需求该功用时才启用。请留意,在默许状况下 SSL 衔接时没有启用。假如 SMTP 服务器需求 SSL,但不支撑 STARTTLS,那么应该经过设置启用 SSL email_ssl = TRUE。

    • harbor_admin_password:办理员的初始暗码,只在 Harbor 第一次发动时收效。之后, 此设置将被疏忽,而且应在 UI 中设置办理员的暗码。请留意,默许的用户名/暗码是admin/Harbor12345。

    • auth_mode:运用的认证类型,默许状况下,它是 db_auth,即凭据存储在数据库中。关于LDAP身份验证,请将其设置为 ldap_auth。

    • self_registration:启用/禁用用户注册功用。禁用时,新用户只能由 Admin 用户创立,只要办理员用户能够在 Harbor 中创立新用户。留意:当 auth_mode 设置为 ldap_auth 时,自注册功用将一直处于禁用状况,而且该标志被疏忽。

    • Token_expiration:由令牌服务创立的令牌的到期时刻(分钟),默以为 30 分钟。

    • project_creation_restriction:用于操控哪些用户有权创立项目的标志。默许状况下,每个人都能够创立一个项目。 假如将其值设置为“adminonly”,那么只要 admin 能够创立项目。

    • verify_remote_cert:翻开或封闭,默许翻开。此标志决定了当Harbor与长途 register 实例通信时是否验证 SSL/TLS 证书。 将此特点设置为 off 将绕过 SSL/TLS 验证,这在长途实例具有自签名或不可信证书时常常运用。

别的,默许状况下,Harbor 将镜像存储在本地文件体系上。在生产环境中,能够考虑 运用其他存储后端而不是本地文件体系,如 S3、Openstack Swif、Ceph 等对象存储。但需求更新common/templates/registry/config.yml 文件。
Harbor的默许镜像存储途径在 /data/registry 目录下,映射到docker容器里面的 /storage 目录下。 这个参数是在 docker-compose.yml 中指定的,在 docker-compose up -d 运转之前修正。 假如期望将 Docker 镜像存储到其他的磁盘途径,能够修正这个参数。


  1. 发动 Harbor。在装备好了 harbor.cfg 之后,履行 ./prepare 指令,为 harbor 发动的容器生成一些必要的文件(环境),再履行指令 ./install.sh 以 pull 镜像并发动容器

    Docker harbor私有仓库部署与管理

  2. 检查 Harbor 发动镜像,必定要在模板文件目录/usr/local/harbor/中履行

    Docker harbor私有仓库部署与管理

docker-compose up -d      #发动
docker-compose stop       #中止
docker-compose restart    #重新发动

处理容器状况不正常

Docker harbor私有仓库部署与管理

  1. 先测验进行重启

    Docker harbor私有仓库部署与管理

  2. 假如重启失利,先履行docker-compose down,封闭并清除一切容器,再docker-compose up -d发动

    Docker harbor私有仓库部署与管理
    Docker harbor私有仓库部署与管理
    Docker harbor私有仓库部署与管理

  3. 假如状况都为UP还登录不了,在/etc/sysctl.conf中翻开ip转发功用net.ipv4.ip_forward=1,再重启network和docker,然后进行前两步的重启

创立新项目

  1. 阅读器拜访:http://192.168.44.20 登录 Harbor WEB UI 界面,默许的办理员用户名和暗码是 admin/Harbor12345

    Docker harbor私有仓库部署与管理

  2. 输入用户名和暗码登录界面后能够创立一个新项目。点击“+项目”按钮

    Docker harbor私有仓库部署与管理

  3. 填写项目名称为“myproject-test”,点击“确定”按钮,创立新项目

    Docker harbor私有仓库部署与管理
    Docker harbor私有仓库部署与管理

  4. 此刻可运用 Docker 指令在本地经过 127.0.0.1 来登录和推送镜像。默许状况下,Registry 服务器在端口 80 上侦听。

    Docker harbor私有仓库部署与管理

推送镜像

  1. 登录Harbor
    Docker harbor私有仓库部署与管理

Docker harbor私有仓库部署与管理

  1. 下载镜像进行测验

    Docker harbor私有仓库部署与管理

  2. 将镜像打标签。格局docker tag 镜像:标签 库房IP/项目名称/镜像名:标签

    Docker harbor私有仓库部署与管理

  3. 上传镜像到 Harbor

    Docker harbor私有仓库部署与管理

  4. 在 Harbor 界面 myproject-test 目录下可看见此镜像及相关信息

    Docker harbor私有仓库部署与管理

在其他客户端上传镜像

以上操作都是在 Harbor 服务器本地操作。假如其他客户端登录到 Harbor,就会报如下过错。呈现这问题的原因为Docker Registry 交互默许运用的是 HTTPS,可是搭建私有镜像默许运用的是 HTTP 服务,所以与私有镜像交互时呈现以下过错。

docker login -u admin -p Harbor12345 http://192.168.44.20
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get https://192.168.44.20/v2/: dial tcp 192.168.44.20:443: connect: connection refused
  1. 在 Docker 客户端装备操作
//处理办法是:在 Docker server 发动的时分,增加发动参数,默许运用 HTTP 拜访。
vim /usr/lib/systemd/system/docker.service
--13行--修正
ExecStart=/usr/bin/dockerd -H fd:// --insecure-registry 192.168.44.20 --containerd=/run/containerd/containerd.sock
或
ExecStart=/usr/bin/dockerd --insecure-registry 192.168.44.20
//重启 Docker,再次登录
systemctl daemon-reload
systemctl restart docker
//再次登录 Harbor
docker login -u admin -p Harbor12345 http://192.168.44.20
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Login Succeeded
//将主动保存凭据到/root/.docker/config.json,下次登录时可直接运用凭据登录 Harbor
//下载镜像进行测验
docker pull 192.168.44.20/myproject-test/nginx:v1
//上传镜像进行测验
docker pull cirros
docker tag cirros:latest 192.168.44.20/myproject-test/cirros:v2
docker push 192.168.44.20/myproject-test/cirros:v2
  1. 改写 Harbor 的 Web 办理界面进行检查,会发现 myproject-test 项目里面有两个镜像

保护办理Harbor

  1. 经过 Harbor Web 创立项目

    • 在 Harbor 库房中,任何镜像在被 push 到 regsitry 之前都必须有一个自己所属的项目。
    • 单击“+项目”,填写项目名称,项目等级若设置为”私有”,则不勾选。假如设置为公共库房,则一切人对此项目下的镜像具有读权限,指令行中不需求履行”Docker login”即可下载镜像,镜像操作与 Docker Hub 一致。
  2. 创立 Harbor 用户

  • (1)创立用户并分配权限
    • 在 Web 办理界面中单击体系办理 -> 用户办理 -> +用户,
    • 填写用户名为“test-zhangsan”,邮箱为“test-zhangsan@test.com”,全名为“zhangsan”,暗码为“Abc123456”,注释为“办理员”(可省掉)。
  • 附:用户创立成功后,单击左边“…”按钮可将上述创立的用户设置为办理员人物或进行删去操作,本例不作任何设置。
人物 权限阐明
访客 关于指定项目具有只读权限
开发人员 关于指定项目具有读写权限,但没有删去权限
保护人员 关于指定项目具有读写权限,也能够修正其它装备,比方创立 Webhooks
项目办理员 除了读写权限,一起具有用户办理/镜像扫描等办理权限
  • (2)增加项目成员

    • 单击项目 -> myproject-kgc-> 成员 -> + 成员,填写上述创立的用户 kgc-zhangsan 并分配人物为“开发人员”。
    • 附:此刻单击左边“…”按钮仍然可对成员人物进行改变或者删去操作
  • (3)在客户端上运用一般账户操作镜像

//删去上述打标签的本地镜像
docker rmi 192.168.44.20/myproject-test/cirros:v2
//先退出当时用户,然后运用上述创立的账户 test-zhangsan 登录
docker logout 192.168.44.20
docker login 192.168.44.20
或
docker login -u test-zhangsan -p Abc123456 http://192.168.44.20
//下载和上传镜像进行测验
docker pull 192.168.44.20/myproject-test/cirros:v2
docker tag cirros:latest 192.168.44.20/myproject-test/cirros:v3
docker push 192.168.44.20/myproject-test/cirros:v3
  1. 检查日志

    • Web 界面日志,操作日志按时刻顺序记载用户相关操作
  2. 修正 Harbor.cfg 装备文件

    • 要更改 Harbor的装备文件中的可选参数时,请先中止现有的 Harbor实例并更新 Harbor.cfg;然后运转 prepare 脚原本填充装备; 最终重新创立并发动 Harbor 的实例。
运用 docker-compose 办理 Harbor 时,必须在与 docker-compose.yml 相同的目录中运转。
cd /usr/local/harbor
docker-compose down -v
vim harbor.cfg			#只能修正可选参数
./prepare
docker-compose up -d
//假如有以下报错,需求开启防火墙 firewalld 服务处理
Creating network "harbor_harbor" with the default driver
ERROR: Failed to Setup IP tables: Unable to enable SKIP DNAT rule:  (iptables failed: iptables --wait -t nat -I DOCKER -i br-b53c314f45e8 -j RETURN: iptables: No chain/target/match by that name.
 (exit status 1))
systemctl restart firewalld.service
docker-compose up -d
  1. 移除 Harbor 服务容器一起保存镜像数据/数据库,并进行迁移
    • 在Harbor服务器上操作

(1)移除 Harbor 服务容器

cd /usr/local/harbor
docker-compose down -v

(2)把项目中的镜像数据进行打包

//持久数据,如镜像,数据库等在宿主机的/data/目录下,日志在宿主机的/var/log/Harbor/目录下
ls /data/registry/docker/registry/v2/repositories/myproject-test
cd /data/registry/docker/registry/v2/repositories/myproject-test
tar zcvf test-registry.tar.gz ./*
  1. 如需重新布置,需求移除 Harbor 服务容器全部数据
cd /usr/local/harbor
docker-compose down -v
rm -r /data/database
rm -r /data/registry

总结

harbor 私有库房的镜像格局:harbor_url/项目名称/image_name : tag

  • 公有项目:任何人不用登录库房就能拉取项目中的镜像
  • 私有项目:需求先登录库房,且具有权限的用户才干拉取镜像