打赏
Fork me on GitHub

5.Docker Compose 部署 Harbor

什么是 Harbor

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

Harbor 特性

  • 基于角色的访问控制 : 用户与 Docker 镜像仓库通过 “项目” 进行组织管理,一个用户可以对多个镜像仓库在同一命名空间(project)里有不同的权限。
  • 镜像复制 : 镜像可以在多个 Registry 实例中复制(同步)。尤其适合于负载均衡,高可用,混合云和多云的场景。
  • 图形化用户界面 : 用户可以通过浏览器来浏览,检索当前 Docker 镜像仓库,管理项目和命名空间。
  • AD/LDAP 支持 : Harbor 可以集成企业内部已有的 AD/LDAP,用于鉴权认证管理。
  • 审计管理 : 所有针对镜像仓库的操作都可以被记录追溯,用于审计管理。
  • 国际化 : 已拥有英文、中文、德文、日文和俄文的本地化版本。更多的语言将会添加进来。
  • RESTful API : RESTful API 提供给管理员对于 Harbor 更多的操控,使得与其它管理软件集成变得更容易。
  • 部署简单 : 提供在线和离线两种安装工具, 也可以安装到 vSphere 平台 (OVA 方式) 虚拟设备。

Harbor 组件

  • Proxy: Harbor 的 registry, UI, token 等服务,通过一个前置的反向代理统一接收浏览器、Docker 客户端的请求,并将请求转发给后端不同的服务。
  • Registry: 负责储存 Docker 镜像,并处理 docker push/pull 命令。由于我们要对用户进行访问控制,即不同用户对 Docker image 有不同的读写权限,Registry 会指向一个 token 服务,强制用户的每次 docker pull/push 请求都要携带一个合法的 token, Registry 会通过公钥对 token 进行解密验证。
  • Core services: 这是 Harbor 的核心功能,主要提供以下服务:
    • UI: 提供图形化界面,帮助用户管理 registry 上的镜像(image), 并对用户进行授权。
    • WebHook: 为了及时获取 registry 上 image 状态变化的情况, 在 Registry 上配置 webhook,把状态变化传递给 UI 模块。
    • Token: 负责根据用户权限给每个 docker push/pull 命令签发 token. Docker 客户端向 – Registry 服务发起的请求,如果不包含 token,会被重定向到这里,获得 token 后再重新向 Registry 进行请求。
  • Database: 为 core services 提供数据库服务,负责储存用户权限、审计日志、Docker image 分组信息等数据。
  • Job Services: 提供镜像远程复制功能,可以把本地镜像同步到其他 Harbor 实例中。
  • Log Collector: 为了帮助监控 Harbor 运行,负责收集其他组件的 log,供日后进行分析。

安装 Harbor

官方 GitHub 上下载最新离线安装版(我已经下载并放置在群分享的 Linux 目录下)并上传至服务器

解压安装包

  1. tar -zxvf harbor-offline-installer-v1.8.0.tgz
  2. # 输出如下
  3. harbor/harbor.v1.8.0.tar.gz
  4. harbor/prepare
  5. harbor/LICENSE
  6. harbor/install.sh
  7. harbor/harbor.yml

修改配置文件

  1. vi harbor.yml
  2. # 修改为域名或你服务器 IP
  3. hostname192.168.141.150

执行安装脚本

  1. ./install.sh
  2. # 输出如下
  3. [Step 0]: checking installation environment ...
  4. Note: docker version18.09.6
  5. Note: docker-compose version1.24.0
  6. [Step 1]: loading Harbor images ...
  7. 23d9f72a5270Loading layer [==================================================>] 33.25MB/33.25MB
  8. 1d4a1da12c02Loading layer [==================================================>] 50.51MB/50.51MB
  9. 8eb1a006f3b0Loading layer [==================================================>] 3.584kB/3.584kB
  10. 41b6f75847f4Loading layer [==================================================>] 3.072kB/3.072kB
  11. ec9bd6e4d4e8Loading layer [==================================================>] 2.56kB/2.56kB
  12. 6d852bb664c2Loading layer [==================================================>] 3.072kB/3.072kB
  13. 0e4ed2b5a5b8Loading layer [==================================================>] 3.584kB/3.584kB
  14. 8dfb2b644f30Loading layer [==================================================>] 12.29kB/12.29kB
  15. Loaded image: goharbor/harbor-log:v1.8.0
  16. d8c53538042bLoading layer [==================================================>] 63.34MB/63.34MB
  17. 1b5fb7ee22e0Loading layer [==================================================>] 47.96MB/47.96MB
  18. a8bdca5e9d71Loading layer [==================================================>] 6.656kB/6.656kB
  19. f7cec940b52cLoading layer [==================================================>] 2.048kB/2.048kB
  20. 301a4a2af7dbLoading layer [==================================================>] 7.68kB/7.68kB
  21. e588e1e3a775Loading layer [==================================================>] 2.56kB/2.56kB
  22. 539f28a5d0eaLoading layer [==================================================>] 2.56kB/2.56kB
  23. 8b4a72241226Loading layer [==================================================>] 2.56kB/2.56kB
  24. Loaded image: goharbor/harbor-db:v1.8.0
  25. c88db349fb2fLoading layer [==================================================>] 8.972MB/8.972MB
  26. 1f2d4d72bba2Loading layer [==================================================>] 35.77MB/35.77MB
  27. dddbcf598df5Loading layer [==================================================>] 2.048kB/2.048kB
  28. 0ced476c2d9cLoading layer [==================================================>] 3.072kB/3.072kB
  29. af24eb0bf40bLoading layer [==================================================>] 35.77MB/35.77MB
  30. Loaded image: goharbor/chartmuseum-photon:v0.8.1-v1.8.0
  31. b185d348bd7dLoading layer [==================================================>] 2.56kB/2.56kB
  32. f032ded7f92eLoading layer [==================================================>] 1.536kB/1.536kB
  33. c6c822edbc47Loading layer [==================================================>] 66.9MB/66.9MB
  34. 73ef3c4363bfLoading layer [==================================================>] 39.75MB/39.75MB
  35. 0c490e002448Loading layer [==================================================>] 144.4kB/144.4kB
  36. 31afe2abafb4Loading layer [==================================================>] 3.004MB/3.004MB
  37. Loaded image: goharbor/prepare:v1.8.0
  38. 257ebcc1c9c4Loading layer [==================================================>] 8.967MB/8.967MB
  39. 7579d3c94fcaLoading layer [==================================================>] 38.68MB/38.68MB
  40. 323611f7dd17Loading layer [==================================================>] 38.68MB/38.68MB
  41. Loaded image: goharbor/harbor-jobservice:v1.8.0
  42. 587a5757a7f6Loading layer [==================================================>] 3.548MB/3.548MB
  43. Loaded image: goharbor/nginx-photon:v1.8.0
  44. a61ab2060e6eLoading layer [==================================================>] 8.967MB/8.967MB
  45. 25359ae00f57Loading layer [==================================================>] 5.143MB/5.143MB
  46. 610a1668f8bfLoading layer [==================================================>] 15.13MB/15.13MB
  47. db2252abd9e0Loading layer [==================================================>] 26.47MB/26.47MB
  48. 4f406312560bLoading layer [==================================================>] 22.02kB/22.02kB
  49. 1cee0947e5a7Loading layer [==================================================>] 3.072kB/3.072kB
  50. 48db2b9b0752Loading layer [==================================================>] 46.74MB/46.74MB
  51. Loaded image: goharbor/notary-server-photon:v0.6.1-v1.8.0
  52. aaf447150765Loading layer [==================================================>] 113MB/113MB
  53. 6835441e1a1dLoading layer [==================================================>] 10.94MB/10.94MB
  54. 9f4739e3a532Loading layer [==================================================>] 2.048kB/2.048kB
  55. 928f489135f0Loading layer [==================================================>] 48.13kB/48.13kB
  56. 1495a1a09adaLoading layer [==================================================>] 3.072kB/3.072kB
  57. 1a5f5b141717Loading layer [==================================================>] 10.99MB/10.99MB
  58. Loaded image: goharbor/clair-photon:v2.0.8-v1.8.0
  59. 66006ea937c6Loading layer [==================================================>] 337.8MB/337.8MB
  60. d272ba122880Loading layer [==================================================>] 106.5kB/106.5kB
  61. Loaded image: goharbor/harbor-migrator:v1.8.0
  62. 05bc5efb1724Loading layer [==================================================>] 8.967MB/8.967MB
  63. af3a6f89469aLoading layer [==================================================>] 46.85MB/46.85MB
  64. 452d238b3e48Loading layer [==================================================>] 5.632kB/5.632kB
  65. 36e1cb2d6ffaLoading layer [==================================================>] 27.14kB/27.14kB
  66. 5385ffb8451eLoading layer [==================================================>] 46.85MB/46.85MB
  67. Loaded image: goharbor/harbor-core:v1.8.0
  68. 268091c30a67Loading layer [==================================================>] 71.66MB/71.66MB
  69. 4433bcd802e7Loading layer [==================================================>] 3.072kB/3.072kB
  70. 420b26399278Loading layer [==================================================>] 59.9kB/59.9kB
  71. 8864c4b9ac3dLoading layer [==================================================>] 61.95kB/61.95kB
  72. Loaded image: goharbor/redis-photon:v1.8.0
  73. 63645c97bf5dLoading layer [==================================================>] 8.968MB/8.968MB
  74. ccb295818ad9Loading layer [==================================================>] 3.072kB/3.072kB
  75. 1ec2d1eefa8fLoading layer [==================================================>] 2.56kB/2.56kB
  76. b88acf0f9f5fLoading layer [==================================================>] 20.1MB/20.1MB
  77. 0e7375de12e6Loading layer [==================================================>] 20.1MB/20.1MB
  78. Loaded image: goharbor/registry-photon:v2.7.1-patch-2819-v1.8.0
  79. 444b0c8bfeeeLoading layer [==================================================>] 3.548MB/3.548MB
  80. ed0415346760Loading layer [==================================================>] 6.568MB/6.568MB
  81. 572bd51089e0Loading layer [==================================================>] 160.8kB/160.8kB
  82. 1410c2919a92Loading layer [==================================================>] 215kB/215kB
  83. 8ecdca210598Loading layer [==================================================>] 3.584kB/3.584kB
  84. Loaded image: goharbor/harbor-portal:v1.8.0
  85. 7fb66591fb58Loading layer [==================================================>] 8.968MB/8.968MB
  86. 42ec4a6394bfLoading layer [==================================================>] 3.072kB/3.072kB
  87. be6c2180cb57Loading layer [==================================================>] 20.1MB/20.1MB
  88. d956d9e974c5Loading layer [==================================================>] 3.072kB/3.072kB
  89. e2e0b4f17ad8Loading layer [==================================================>] 7.465MB/7.465MB
  90. 7e29d670afe9Loading layer [==================================================>] 27.56MB/27.56MB
  91. Loaded image: goharbor/harbor-registryctl:v1.8.0
  92. 453732ea69d4Loading layer [==================================================>] 13.72MB/13.72MB
  93. c985f3824f33Loading layer [==================================================>] 26.47MB/26.47MB
  94. 76eaa2763221Loading layer [==================================================>] 22.02kB/22.02kB
  95. 0ef55a752948Loading layer [==================================================>] 3.072kB/3.072kB
  96. c5749b90723dLoading layer [==================================================>] 45.33MB/45.33MB
  97. Loaded image: goharbor/notary-signer-photon:v0.6.1-v1.8.0
  98. [Step 2]: preparing environment ...
  99. prepare base dir is set to /usr/local/docker/harbor/harbor
  100. Generated configuration file/config/log/logrotate.conf
  101. Generated configuration file/config/nginx/nginx.conf
  102. Generated configuration file/config/core/env
  103. Generated configuration file/config/core/app.conf
  104. Generated configuration file/config/registry/config.yml
  105. Generated configuration file/config/registryctl/env
  106. Generated configuration file/config/db/env
  107. Generated configuration file/config/jobservice/env
  108. Generated configuration file/config/jobservice/config.yml
  109. Generated and saved secret to file/secret/keys/secretkey
  110. Generated certificate, key file/secret/core/private_key.pem, cert file/secret/registry/root.crt
  111. Generated configuration file/compose_location/docker-compose.yml
  112. Clean up the input dir
  113. [Step 3]: starting Harbor ...
  114. Creating network "harbor_harbor" with the default driver
  115. Creating harbor-log ... done
  116. Creating harbor-db ... done
  117. Creating registryctl ... done
  118. Creating redis ... done
  119. Creating registry ... done
  120. Creating harbor-core ... done
  121. Creating harbor-jobservice ... done
  122. Creating harbor-portal ... done
  123. Creating nginx ... done
  124. ✔ ----Harbor has been installed and started successfully.----
  125. Now you should be able to visit the admin portal at http://192.168.141.150.
  126. For more details, please visit https://github.com/goharbor/harbor .

验证安装是否成功

通过浏览器访问 http://192.168.141.150 ,看到登录页面

 

输入账号 admin,密码 Harbor12345,登录成功后

Harbor 启动和停止

Harbor 的日常运维管理是通过 docker-compose 来完成的,Harbor 本身有多个服务进程,都放在 docker 容器之中运行,我们可以通过 docker ps 命令查看。

  1. docker ps | grep goharbor
  2. # 输出如下
  3. 07b401504357 goharbor/nginx-photon:v1.8.0 "nginx -g 'daemon of…" 23 minutes ago Up 23 minutes (healthy0.0.0.0:80->80/tcp nginx
  4. 050f39a147bc goharbor/harbor-portal:v1.8.0 "nginx -g 'daemon of…" 23 minutes ago Up 23 minutes (healthy80/tcp harbor-portal
  5. 305077bc0a3e goharbor/harbor-jobservice:v1.8.0 "/harbor/start.sh" 23 minutes ago Up 23 minutes harbor-jobservice
  6. 4eb33b09b268 goharbor/harbor-core:v1.8.0 "/harbor/start.sh" 23 minutes ago Up 23 minutes (healthy) harbor-core
  7. e9efb7a6abf9 goharbor/registry-photon:v2.7.1-patch-2819-v1.8.0 "/entrypoint.sh /etc…" 24 minutes ago Up 23 minutes (healthy5000/tcp registry
  8. f9bc75d47752 goharbor/harbor-registryctl:v1.8.0 "/harbor/start.sh" 24 minutes ago Up 23 minutes (healthy) registryctl
  9. 76d33d1755f6 goharbor/redis-photon:v1.8.0 "docker-entrypoint.s…" 24 minutes ago Up 23 minutes 6379/tcp redis
  10. 3870b3b93f46 goharbor/harbor-db:v1.8.0 "/entrypoint.sh post…" 24 minutes ago Up 23 minutes (healthy5432/tcp harbor-db
  11. 6e848e4d8bc2 goharbor/harbor-log:v1.8.0 "/bin/sh -c /usr/loc…" 24 minutes ago Up 24 minutes (healthy127.0.0.1:1514->10514/tcp harbor-log
  1. # 启动
  2. docker-compose start
  3. # 停止
  4. docker-comose stop
  5. # 重启
  6. docker-compose restart

说明:

  • nginx: nginx 负责流量转发和安全验证,对外提供的流量都是从 nginx 中转,所以开放 https 的 443 端口,它将流量分发到后端的 ui 和正在 docker 镜像存储的 docker registry。
  • harbor-jobservice: harbor-jobservice 是 harbor 的 job 管理模块,job 在 harbor 里面主要是为了镜像仓库之前同步使用的;
  • harbor-ui: harbor-ui 是 web 管理页面,主要是前端的页面和后端 CURD 的接口;
  • registry: registry 就是 docker 原生的仓库,负责保存镜像。
  • harbor-adminserver: harbor-adminserver 是 harbor 系统管理接口,可以修改系统配置以及获取系统信息。
  • harbor-db: harbor-db 是 harbor 的数据库,这里保存了系统的 job 以及项目、人员权限管理。由于本 harbor 的认证也是通过数据,在生产环节大多对接到企业的 ldap 中;
  • harbor-log: harbor-log 是 harbor 的日志服务,统一管理 harbor 的日志。通过 inspect 可以看出容器统一将日志输出的 syslog。

这几个容器通过 Docker link 的形式连接在一起,这样,在容器之间可以通过容器名字互相访问。对终端用户而言,只需要暴露 proxy (即 Nginx)的服务端口。

配置客户端

在 /etc/docker/daemon.json 中增加如下内容(如果文件不存在请新建该文件)

  1. {
  2. "registry-mirrors"[
  3. "https://registry.docker-cn.com"
  4. ],
  5. "insecure-registries"[
  6. "192.168.141.150"
  7. ]
  8. }

注意: 该文件必须符合 JSON 规范,否则 Docker 将不能启动。

重启服务

  1. systemctl daemon-reload
  2. systemctl restart docker

检查客户端配置是否生效

使用 docker info 命令手动检查,如果从配置中看到如下内容,说明配置成功

  1. Insecure Registries:
  2. 192.168.141.150
  3. 127.0.0.0/8

Harbor 上传镜像

新建项目

我们以推送 Nginx 为例,首先需要在 Harbor 上创建一个 公开/私有 的项目

推送镜像

  1. # 在项目中标记镜像
  2. docker tag nginx 192.168.141.150/myshop/nginx:latest
  3. # 登录 Harbor
  4. docker login 192.168.141.150 -u admin -Harbor12345
  5. # 推送镜像到项目
  6. docker push 192.168.141.150/myshop/nginx:latest

查看镜像

Harbor 下载镜像

在其它机器下载镜像只需要配置好客户端即可

  1. docker pull 192.168.141.150/myshop/nginx:latest
posted @ 2019-12-08 21:34  l-coil  阅读(364)  评论(0编辑  收藏  举报