Docker 镜像仓库为什么要分库分权限?

先说一个事故案例:

场景:某大型互联网电商公司,使用一个镜像仓库管理所有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 服务器能上传,运维只接受生产库里的镜像,进行镜像漏洞扫描,部署到生产环境。有什么问题欢迎留言讨论。

原文地址:https://blog.51cto.com/jfrogchina/2467946

时间: 2024-10-31 04:25:12

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

构建Docker镜像仓库的另一选择:Nexus3 - DockOne.io

我们知道,构建企业内部私有Docker镜像仓库有很多选择,比如可以采用原生的Docker Registry服务,也可以部署更加专业的工具,例如SUSE team的Portus (https://github.com/SUSE/Portus)或VMware出品的Harbor(https://github.com/vmware/harbor).我们也就曾对Harbor这样的产品做过较为详细的分析(http://mp.weixin.qq.com/s/oQoLgNgnfM8TQHnDDOOIog).然而

Centos7安装Docker镜像仓库Harbor1.5.3

Harbor 详细介绍 1.容器应用的开发和运行离不开可靠的镜像管理.从安全和效率等方面考虑,部署在私有环境内的 Registry 是非常必要的. 2.Harbor 是由 VMware 公司中国团队为企业用户设计的 Registry server 开源项目,包括了权限管理(RBAC).LDAP.审计.管理界面.自我注册.HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能,欢迎使用和反馈意见. 3.作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性

离线手动部署docker镜像仓库——harbor仓库(二)

前言: 在<离线手动部署docker镜像仓库--harbor仓库(一)>中,记录了离线部署harbor仓库的简单过程,这里主要记录修改默认访问端口80端口为1180端口的部署方式和注意点. 实验环境:harbor服务器系统:CentOS Linux release 7.4.1708 (Core)harbor服务器IP:10.0.0.101harbor版本:v1.5.0docker版本:1.13.1另外为了测试pull镜像,使用了另一台test102机器:10.0.0.102 部署过程: 1.下

docker镜像仓库(3)

目录 搭建镜像仓库 harbor基础 harbor使用 搭建镜像仓库 harbor基础 Docker镜像仓库自建仓库的必要性 默认第三方提供的镜像仓库在海外,例如https://hub.docker.com/,太慢了,所以我们要自己搭建 第三方镜像仓库一般不允许有太多的私有镜像 Harbor镜像仓库的搭建前提条件: 需要安装docker 需要有docker-compose Harbor离线版安装下载地址 下载离线安装的版本,上传到服务器,解压https://github.com/goharbor

巧用Docker镜像仓库Harbor部署私有Mirror服务

本文作者付广平,UnitedStack有云存储工程师,北京邮电大学硕士,从事大数据和云计算相关工作,2016年毕业后加入UnitedStack大数据&容器组,负责Docker.Magnum和Sahara相关工作,Openstack.Docker社区活跃者. 作者别出心裁地使用Harbor搭建了私有Mirror服务,加速外部Docker镜像的下载.编者对原文做了少量修改. Harbor是VMware公司最近开源的企业级Docker Registry项目(https://github.com/vmw

docker 镜像仓库Harbor

企业级镜像仓库Harbor Harbor概述 Habor是由VMWare公司开源的容器镜像仓库.事实上,Habor是在Docker Registry上进行了相应的 企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访 问控制 ,AD/LDAP集成以及审计日志等,足以满足基本企业需求. 官方地址:https://vmware.github.io/harbor/cn/ 安装1.解压[[email protected] tools]# tar xf harbor-o

docker 镜像仓库的安装与使用

安装Docker Compose 解决依赖 [[email protected] ~]# curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose % Total % Received % Xferd Average Speed Time Time Time Cur

Linux系统 Docker 镜像仓库Harbor

镜像仓库Harbor 一.Harbor 介绍 Docker容器应用的开发和运行离不开可靠的镜像管理,虽然Docker官方也提供了公共的镜像仓库,但是从安全和效率等方面考虑,部署我们私有环境内的Registry也是非常必要的.Harbor是由VMware公司开源的企业级的Docker Registry管理项目,它包括权限管理(RBAC).LDAP.日志审核.管理界面.自我注册.镜像复制和中文支持等功能. 二. Docker-compose 安装 # curl -L https://github.c

第九篇:Docker镜像仓库

环境说明: 操作系统:centos7内核版本: [[email protected] ~]# uname -r 3.10.0-693.21.1.el7.x86_64 摘要: 仓库(Repository)是集中存放镜像的地方,与之关联的是注册服务器. 那注册服务器和仓库有什么关系呢? 比如仓库地址为:https://dl.dockerpool.com/ubuntu 那么dl.dockerpool.com就是注册服务器,ubuntu是仓库名 也就是说,注册服务器上可以存放多个镜像仓库,而每个镜像仓库