先说一个事故案例:

场景:某大型互联网电商公司,使用一个镜像仓库管理所有Docker镜像。开发者打出的镜像上传到唯一的镜像库,测试通过后,运维环境的 Kubernetes 直接从这个库里拉取镜像,所有人对镜像库都有 CRUD 的权限。

事故:由于镜像存储容量过大,开发者打算清理下Snapshot 的镜像,在镜像清理的时候,误将生产环境的镜像进行了删除,导致上线出现问题。本质是镜像缺乏成熟度的区分管理,

解决办法:为通一个项目的镜像通过升级,放在3个镜像仓库内,开发库,测试库,生产库。不同的镜像库对应管理不同成熟度的镜像。

从上图可以看到,Michael Huttermann 在2012年展示的流水线质量关卡的概念。上图的意思,是每个流水线必须具备一定的质量关卡,特别是在测试环境,也就是说,未经自动化测试的 Docker 镜像,是不能被放到线上环境运行的。为了区分不同成熟度的制品,需要为不同成熟度阶段的制品建立不同的制品仓库,也就是开发库,测试库,生产库。

根据镜像成熟度区分的原则,我推荐上图的镜像存储方式。我们为开发者提供镜像的开发库,供他们将打好的镜像 Push 到开发库,推送到镜像库之后,即开始开发者自我验证功能。自我验证通过后,镜像仓库会复制(也叫Promote升级)到测试库,随后调用测试环境的 Jenkins 流水线,执行自动化测试案例,当测试完成后,记录测试结果的关键信息到该镜像的元数据上。同时通知测试人员进行 UAT 测试,待所有的测试(人工+自动化)完成之后,边将该镜像升级到发布库,也叫生产库。

现在我们为每个项目建立了三个镜像仓库,那么你可能会问,难道我需要配置3个镜像仓库地址吗?这里我们推荐下面的镜像仓库工作模型。

来看看上述模型的工作原理:

  • 首先需要有一个虚拟仓库(Virtual Repository)来聚合三个本地仓库(Local)和远程仓库(Remote)。目前JFrog Artifactory支持了虚拟仓库,为研发团队提供唯一的 Docker 镜像中心访问地址,而不需要在多个镜像中心之间切换。
  • 开发者通过远程仓库用于代理和缓存 DockerHub 的官方镜像源。
  • 镜像通过 Jenkins流水线,在三个本地仓库之间进行升级。
  • 终端用户,例如生产环境的 Docker 客户端,访问 Docker 生产环境的虚拟仓库,该仓库提供对外的服务。

好的,了解了镜像升级,虚拟仓库的概念之后,你可能会问,如何做这些仓库的权限配置呢?

我画了下面的表格,来帮助你理解不同团队对不同成熟度的镜像仓库应该基本什么样的权限。

开发只对开发库有CRUD权限,对生产库无权限,这样就能避免开发对生产库的误操作。测试团队只接受通过开发自测,升级到测试库的镜像,这样降低测试团队的无效测试率。运维对生产库有CRUD 的权限。那么这里你可能注意到了 CI 服务器对三个仓库都有权限,那是应为镜像的跨仓库复制,打标签,都是通过CI 服务器自动化完成的。

总结

通过开发,测试,生产的三库分离设置,来存放不同成熟度的 Docker 镜像,这样方便做镜像仓库的清理,只清理开发库的镜像,同时,生产库只有CI 服务器能上传,运维只接受生产库里的镜像,进行镜像漏洞扫描,部署到生产环境。有什么问题欢迎留言讨论。

Docker 镜像仓库为什么要分库分权限?的更多相关文章

  1. 你必须知道的Docker镜像仓库的搭建

    近期工作中发现用到的容器镜像越来越多(不多的时候没考虑过镜像仓库的问题),同一个容器镜像也存在多个版本,那么镜像仓库的搭建需求就涌现出来,本文就目前的几个常用镜像仓库的搭建进行介绍,我们可以根据需要选 ...

  2. 019.nexus搭建docker镜像仓库/maven仓库

    一.安装docker CE 参考docker doc https://docs.docker.com/install/linux/docker-ce/centos/ 二.docker启动nexus3 ...

  3. Docker镜像仓库的搭建--> Harbor篇

    简介 Harbor是VMware公司开源的一个企业级Docker Registry项目,项目地址:https://github.com/goharbor/harbor Harbor作为一个企业级私有R ...

  4. 搭建docker镜像仓库(二):使用harbor搭建本地镜像仓库

    目录 一.系统环境 二.前言 三.Harbor 四.使用harbor搭建私有镜像仓库 4.1 环境介绍 4.2 k8smaster节点安装配置harbor 4.2.1 安装harbor离线包 4.2. ...

  5. Docker镜像仓库Harbor之Swagger REST API整合配置

    转载自:https://cloud.tencent.com/developer/article/1010618 1.Swagger 介绍 Swagger 是一个规范和完整的框架,用于生成.描述.调用和 ...

  6. docker 镜像仓库 Harbor 部署 以及 跨数据复制

    docker 镜像仓库 Harbor 部署 跨数据复制 Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目 它主要 提供 Dcoker Registry 管理 ...

  7. 离线手动部署docker镜像仓库——harbor仓库(HTTPS)

    实验环境: harbor服务器系统:CentOS Linux release 7.5.1804 (Core)harbor服务器IP:10.1.12.114harbor版本:v1.5.0docker版本 ...

  8. Docker笔记2:Docker 镜像仓库

    Docker 镜像的官方仓库位于国外服务器上,在国内下载时比较慢,但是可以使用国内镜像市场的加速器(比如阿里云加速器)以提高拉取速度. Docker 官方的镜像市场,可以和 Gitlab 或 GitH ...

  9. 部署docker镜像仓库及高可用

      下载地址: https://github.com/goharbor/harbor/releases   安装harbor服务器: 安装harbor root@harbor-vm1:/usr/loc ...

随机推荐

  1. OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=SSLv2/v3 read server hello A: unknown protocol

    gitlab版本为社区版: gitlab-ce_11.5.4-ce.0_amd64.deb 目录:/var/cache/apt/archives 配置邮箱的主要参数: user['git_user_e ...

  2. 一起了解 .Net Foundation 项目 No.7

    .Net 基金会中包含有很多优秀的项目,今天就和笔者一起了解一下其中的一些优秀作品吧. 中文介绍 中文介绍内容翻译自英文介绍,主要采用意译.如与原文存在出入,请以原文为准. Entity Framew ...

  3. javascript30--day03--Css Variables

     相关视频链接:https://www.bilibili.com/video/av8481988/?p=5 相关github地址:https://github.com/soyaine/JavaScri ...

  4. Git安装配置及第一次上传项目到GitHub

    平时的学习工作少不了保存自己的Code到代码库,这里必须要使用到Git与GitHub. 1.   关于Git的安装 下载Git:下载地址:https://git-scm.com/downloads  ...

  5. TortoiseGit 绑定 GitHub/Gitee ssh秘钥

    小乌龟生成私钥和公钥 打开PuTTYgen 生成公钥/私钥文件 打开Pageant添加私钥.ppk文件 打开公钥文件获取key 打开GitHub/Gitee添加公钥 Gitee GitHub

  6. HDFS基本命令fs的使用操作

    HDFS(Hadoop Distributed File System)就是hadoop分布式文件系统,fs是操作HDFS文件的一个常用命令. 1.hadoop fs -help 查看fs使用帮助 2 ...

  7. js中(function(){})()的写法用处

    直到今天我才明白的一个玩意!!! 来来来,首先嘛,JS中函数有两种命名方式 1.一种是声明式. 而声明式会导致函数提升,function会被解释器优先编译.即我们用声明式写函数,可以在任何区域声明,不 ...

  8. Java基础之二、类的知识

    类定义---方法及其处理的数据对象的集合结构 将现实的对象(物体)和概念映射到程序中的对象(变量)中 1:使用new运算符创建的类类型的主体称为实例,创建实例的操作称为实例化, new Account ...

  9. Oracle实例占用超高CPU排查

    CPU主要功能:处理指令.执行操作.要求进行动作.控制时间.处理数据. 结合数据库实例CPU占用高,可能的原因是数据库在执行大量的操作(全表查询.大量排序等). 由于公司没有DBA,遇到数据库问题只能 ...

  10. 小白的linux笔记5:关于权限那些事

    在设置smb时发现,目录的权限是个影响访问的大问题,还是得研究清楚. 关于文件权限 查看当前目录下文件和文件夹的权限状态:ls -l drwxrwxr--.  4 root root    4096 ...