提示:本系列笔记全部存在于
Github
可以直接在
Github 查看全部笔记

针对私有镜像仓库的问题,Docker 官方提供了搭建仓库服务的镜像服务:registry,使用此镜像就可以部署私有仓库。

但官方提供的这个服务特别轻量化,甚至连 UI 管理页面都没有, 这也就带来了较高的管理维护成本。

针对这个问题开源社区有不少为 registry 提供 UI管理 的项目,也有基于 registry,二次开发的项目

其中基于 registry 二次开发的代表项目是 Harbor, 也是企业级中比较常用的解决方案之一

Harbor

Harbor 概述

Harbor 项目是以 registry 为基础的镜像仓库,另外提供了管理 UI, 基于角色的访问控制(Role Based Access Control),AD/LDAP 集成、以及审计日志(Audit logging) 等企业用户需求的功能,同时还原生支持中文。

可以说 Harbor 提供了完备的管理系统以弥补 registry 的不足。

在资源占用方面 Harbor 也比较小。

Harbor 部署

Harbor 下载

HarborGithub 中 提供了两种部署方式

  1. 离线安装
  2. 在线安装

两种部署方式都以 Docker Compose 为基础的部署配置,不同的是 离线安装压缩包内包括了部署使用的镜像。

推荐本地下载离线版本,上传到服务器解压部署。

sudo tar xf /tgz/harbor-offline-installer-v2.4.1.tgz


PS:注意版本号

Harbor 部署配置

Harbor 目录中两个关键文件是: harbor.yml.tmlinstall.sh

harbor.yml.tml 是配置文件模板,需要将此文件改为 harbor.yml,部署时会使用 harbor.yml 配置文件。

install.sh 是执行文件,执行此文件就可以进行部署。

harbor.yml 配置文件中默认了许多属性,可以对需要的属性进行修改。

在此只列出了更改后的属性。

  1. # 设置访问地址,可以使用ip、域名,不可以设置为127.0.0.1或localhost。
  2. # 访问地址
  3. hostname: docker.mwjz.live
  4. # HTTP 访问协议设置
  5. http:
  6. # http访问端口号
  7. port: 8433
  8. # 禁用HTTPS协议访问
  9. #https:
  10. # https port for harbor, default is 443
  11. # port: 443
  12. # The path of cert and key files for nginx
  13. # certificate: /your/certificate/path
  14. # private_key: /your/private/key/path
  15. # admin 用户密码
  16. harbor_admin_password: XXXXXXX
  17. # 数据库设置
  18. database:
  19. # 数据库密码
  20. password: XXXXXX
  21. # Harbor数据挂载目录
  22. data_volume: /volumes/harbor

Harbor 应用的页面访问、 拉取推送 等操作 都是使用配置文件中 hostname 属性值, 所以在此一步到位设置了 网关代理

PS:Harbor 推荐使用 HTTPS 协议,在此使用了网关,所以只设置了 HTTP 协议

配置网关

网关 只需要配置 Nginx 属性即可。

  1. server {
  2. #SSL 访问端口号为 443
  3. listen 443 ssl http2;
  4. #填写绑定证书的域名
  5. server_name docker.mwjz.live;
  6. #上传大小限制
  7. client_max_body_size 3000M;
  8. #日志
  9. error_log /var/log/nginx/docker/error.log;
  10. access_log /var/log/nginx/docker/access.log;
  11. #证书文件
  12. ssl_certificate /etc/nginx/conf.d/ssl/docker/docker.mwjz.live_bundle.crt;
  13. #证书密钥文件
  14. ssl_certificate_key /etc/nginx/conf.d/ssl/docker/docker.mwjz.live.key;
  15. ssl_ciphers SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!3DES:!aNULL:!MD5:!ADH:!RC4;
  16. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  17. ssl_prefer_server_ciphers on;
  18. location / {
  19. proxy_pass http://10.0.24.12:8433;
  20. }
  21. }


重启网关服务

docker exec -it gateway nginx -s reload

执行部署

此时,就可以执行 install.sh 文件进行部署


部署完成后,Harbor 会创建一个名为 harborDocker Compose

并且会启动 9 个容器服务。

让人头疼的是容器命名规则,并没有添加 harbor 前缀,对于强迫症来说真心难受。。。

部署完成后,访问 Harbor ,会跳转到登录页,使用 管理员(admin) 账号登录。

Harbor 页面

Harbor 的主页面是 项目 模块。

项目 是一个镜像组,一个 项目 内可以存储多个镜像。

Harbor 默认创建了一个名为 library 的公开项目。

可以根据实际情况创建自己的项目

在此创建名为一个 mwjz 的私有项目,用来存储 deploy-web-demo 镜像


PS: 其它模块可自行查看

Harbor 持续集成

Harbor 镜像 拉取、推送 路径规则是: 主机名/项目/镜像名称

也就是 mwjz 项目 deploy-web-demo 镜像拉取、推送的地址为: docker.mwjz.live/mwjz/deploy-web-demo

服务器配置

更新 Docker Compose

web 项目 Docker Compose 文件中拉取镜像地址要改为 Harbor 仓库地址。

登录 Harbor

Harbor 仓库 mwjz 是一个私有项目,需要登录才允许 拉取、推送。

服务器中测试拉取操作,不登录情况下会直接返回无权限错误。

使用 Docker 登录 Harbor 仓库时,注意 必须使用 sudo 或者 root 用户登录,否则其它用户无法使用此登录凭证

注意:必须使用 sudo 或者 root 用户登录,否则其它用户无法使用此登录凭证

Harbor 仓库登录成功后, Docker 会在 /root/.docker/config.json 文件中添加当前仓库的登录凭证。

Drone 持续集成需要使用到此登录凭证。


Drone 配置

Secret配置

  1. 镜像拉取登录凭证

    Drone 引擎中容器是一个纯净的运行环境,无法直接使用服务器的登录凭证拉取私有仓库镜像。

    针对这个问题, Drone 预定义了一个 image_pull_secrets 属性,image_pull_secrets 会从 Secret 读取仓库登录凭证,执行登录操作。

    也就是需要在 Secret 配置仓库登录凭证信息:docker_auth_config,属性值就是 /root/.docker/config.json 文件内容。

    PS: 注意,登录凭证必须使用 sudoroot 用户登录,否则不具有拉取权限

  2. 镜像推送账号

    docker_usernamedocker_password 两个 Secret 属性值改为 Harbor 仓库的账号密码。

.drone.yml 配置

.drone.yml 文件主要的改动点是 镜像名称 和 仓库地址

  1. build-image 步骤:

    repo 属性值设置为 docker.mwjz.live/mwjz/deploy-web-demo

    并添加 registry 属性, 属性值为 docker.mwjz.live(Harbor 仓库 hostname)

  2. deploy-project 步骤

    将镜像拉取地址修改为 docker.mwjz.live/mwjz/deploy-web-demo

  3. deploy 管道:

    需要在 deploy 管道中设置 私有仓库登录凭证密钥属性:image_pull_secrets

  1. kind: pipeline # 定义一个管道
  2. type: docker # 定义管道类型
  3. name: build # 定义管道名称
  4. steps:
  5. - name: build-image # 步骤名称
  6. image: plugins/docker # 使用镜像
  7. depends_on: [build-tags, build-project] # 依赖步骤
  8. settings: # 当前设置
  9. username: # 账号名称
  10. from_secret: docker_username
  11. password: # 账号密码
  12. from_secret: docker_password
  13. dockerfile: deploy/Dockerfile # Dockerfile地址, 注意是相对地址
  14. registry: docker.mwjz.live # 私有镜像仓库地址
  15. repo: docker.mwjz.live/mwjz/deploy-web-demo # 镜像名称
  16. ---
  17. kind: pipeline
  18. type: docker
  19. name: deploy
  20. image_pull_secrets: # 私有镜像拉取凭证密钥
  21. - docker_auth_config
  22. steps:
  23. - name: deploy-project
  24. image: appleboy/drone-ssh
  25. settings:
  26. host:
  27. from_secret: server_host
  28. user:
  29. from_secret: server_username
  30. password:
  31. from_secret: server_password
  32. port: 22
  33. # insecure: false 如果拉取的镜像地址使用的是http协议,则将此属性设置为true
  34. command_timeout: 3m
  35. script:
  36. - echo ====开始部署=======
  37. - docker pull docker.mwjz.live/mwjz/deploy-web-demo:latest
  38. - docker-compose -p web down
  39. - docker volume rm web-nginx
  40. - docker-compose -f /yml/docker-compose/web.yml -p web up -d
  41. - docker rmi $(docker images | grep deploy-web-demo | grep none | awk '{print $3}')
  42. - echo ====部署成功=======

执行测试

全部准备完成后, 可以修改项目版本号,进行测试构建。

构建时可能还会有其它问题,但一般都是小问题,可以检查配置或查询 Google 解决。

实在解决不了可以留言。




私有化轻量级持续集成部署方案--06-私有镜像仓库-Harbor的更多相关文章

  1. 私有化轻量级持续集成部署方案--04-私有代码仓库服务-Gitea

    提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 企业级最流行的私有代码仓库是 Gitlab, 一开始我也打算部署 Gitlab作为私有代码仓库. 但部署完 d 成后 ...

  2. 私有化轻量级持续集成部署方案--07-私有NPM仓库-Verdaccio

    提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 对于个人来说,私有NPM仓库 作用性基本很小,但是对于企业,私有NPM仓库 可以保护代码暴露,具有很大的意义. 也是 ...

  3. 私有化轻量级持续集成部署方案--05-持续部署服务-Drone(上)

    提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 持续部署概述 持续部署是能以自动化方式,频繁而且持续性的,将软件部署到生产环境.使软件产品能够快速迭代. 在之前部署 ...

  4. 私有化轻量级持续集成部署方案--03-部署web服务(上)

    提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 这一篇主要讲述部署一个 Web 项目,项目是我曾经搞的一个 VUE 模板项目:https://github.com/ ...

  5. 私有化轻量级持续集成部署方案--03-部署web服务(下)

    提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 配置接口代理 前后端分离情况下,前端请求后端接口最常用的一种方式就是使用反向代理,反向代理会让浏览器认为是同源路径, ...

  6. 私有化轻量级持续集成部署方案--02-Nginx网关服务

    提示:本系列笔记全部存在于 Github, 可以直接在 Github 查看全部笔记 这一篇中使用 Nginx 部署网关中心,用来代理服务器中服务.网关中心有优点也有缺点,也可以不采用网关系统. 部署 ...

  7. Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成——部署方案优化

    Devops 开发运维高级篇之Jenkins+Docker+SpringCloud微服务持续集成--部署方案优化 之前我们做的方案部署都是只能选择一个微服务部署并只有一台生产服务器,每个微服务只有一个 ...

  8. 私有镜像仓库Harbor基础介绍与部署

    企业级私有镜像仓库Harbor 一:介绍 Harbor,是一个英文单词,意思是港湾,港湾是干什么的呢,就是停放货物的,而货物呢,是装在集装箱中的,说到集装箱,就不得不提到Docker容器,因为dock ...

  9. 容器技术之Docker私有镜像仓库harbor

    前文我们聊到了docker的私有镜像仓库docker-distribution的搭建和简单的使用,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13058338 ...

随机推荐

  1. mysql之突破secure_file_priv写webshell

    在某些情况下,当我们进入了一个网站的phpMyAdmin时,想通过select into outfile来写shell,但是通常都会报错. 这是因为在mysql 5.6.34版本以后 secure_f ...

  2. 用 vite 构建项目,同时支持微前端

    得益于 esbuild 的超高性能,vite 在诞生之初就备受关注,且一直保持着活跃的开发迭代.截至目前,vite 已经迭代到了 2.7.10 版本,各方面也基本具备了在生产使用的条件.这段时间,我在 ...

  3. Git 基本操作指南

    Git 基本操作指南 内容概要 这个作业属于哪个课程 2022面向对象程序设计 这个作业要求在哪里 2022面向对象程序设计寒假作业1 这个作业的目标 Git & Github 作业正文 如下 ...

  4. 小程序onShareAppMessage有点迷

    小程序遇到的问题 起因 目前项目需求是分享时携带参数去进行裂变,但是在查看微信文档后发现有onShareAppMessage这个页面处理事件可以使用.事件可以使用return一个Object,用于自定 ...

  5. python pip无法安装到2.7

    问题 pip默认指向python3.6,没有pip2,pip2.7 解决办法 加上应用路径 加上系统环境变量 参考 https://www.cnblogs.com/fanyuchen/p/712768 ...

  6. 快速删除IDEA/WebStrom/Rider中的代码空行

    使用替换 ^\s*\n 并打开正则匹配模式   Visual Studio中未测试,大家可以去试一试

  7. golang中bufio和ioutil的使用

    bufio bufio包实现了带缓冲区的读写,是对文件读写的封装 bufio缓冲写数据 模式 含义 os.O_WRONLY 只写 os.O_CREATE 创建文件 os.O_RDONLY 只读 os. ...

  8. log4j学习记录以及相关配置(精简版)

    使用log4j时关键配置 log4j的maven依赖 <dependency> <groupId>log4j</groupId> <artifactId> ...

  9. cobbler最小化安装centos8

    centos8 已经发布了GA版本,迫不及待的想尝鲜了,然后现实总是那么残酷,一直安装失败,具体安装步骤如下: 假设cobbler已配置完成. 1.下载centos8 iso镜像 wget http: ...

  10. GAN入门

    1 GAN基本概念 1.1 什么是生成对抗网络? 生成对抗网络(GAN, Generative adversarial network) 在 2014 年被 Ian Goodfellow 提出. GA ...