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 服务器能上传,运维只接受生产库里的镜像,进行镜像漏洞扫描,部署到生产环境。有什么问题欢迎留言讨论。
Docker 镜像仓库为什么要分库分权限?的更多相关文章
- 你必须知道的Docker镜像仓库的搭建
近期工作中发现用到的容器镜像越来越多(不多的时候没考虑过镜像仓库的问题),同一个容器镜像也存在多个版本,那么镜像仓库的搭建需求就涌现出来,本文就目前的几个常用镜像仓库的搭建进行介绍,我们可以根据需要选 ...
- 019.nexus搭建docker镜像仓库/maven仓库
一.安装docker CE 参考docker doc https://docs.docker.com/install/linux/docker-ce/centos/ 二.docker启动nexus3 ...
- Docker镜像仓库的搭建--> Harbor篇
简介 Harbor是VMware公司开源的一个企业级Docker Registry项目,项目地址:https://github.com/goharbor/harbor Harbor作为一个企业级私有R ...
- 搭建docker镜像仓库(二):使用harbor搭建本地镜像仓库
目录 一.系统环境 二.前言 三.Harbor 四.使用harbor搭建私有镜像仓库 4.1 环境介绍 4.2 k8smaster节点安装配置harbor 4.2.1 安装harbor离线包 4.2. ...
- Docker镜像仓库Harbor之Swagger REST API整合配置
转载自:https://cloud.tencent.com/developer/article/1010618 1.Swagger 介绍 Swagger 是一个规范和完整的框架,用于生成.描述.调用和 ...
- docker 镜像仓库 Harbor 部署 以及 跨数据复制
docker 镜像仓库 Harbor 部署 跨数据复制 Harbor 是 Vmwar 公司开源的 企业级的 Docker Registry 管理项目 它主要 提供 Dcoker Registry 管理 ...
- 离线手动部署docker镜像仓库——harbor仓库(HTTPS)
实验环境: harbor服务器系统:CentOS Linux release 7.5.1804 (Core)harbor服务器IP:10.1.12.114harbor版本:v1.5.0docker版本 ...
- Docker笔记2:Docker 镜像仓库
Docker 镜像的官方仓库位于国外服务器上,在国内下载时比较慢,但是可以使用国内镜像市场的加速器(比如阿里云加速器)以提高拉取速度. Docker 官方的镜像市场,可以和 Gitlab 或 GitH ...
- 部署docker镜像仓库及高可用
下载地址: https://github.com/goharbor/harbor/releases 安装harbor服务器: 安装harbor root@harbor-vm1:/usr/loc ...
随机推荐
- Python编程:从入门到实践——【作业】——第六章(字典)
第六章作业 6-1 人 : 使用一个字典来存储一个熟人的信息, 包括名. 姓. 年龄和居住的城市. 该字典应包含键first_name . last_name . age 和city . 将存储在该字 ...
- linux中目录处理命令
目录 mkdir cd pwd rmdir cp mv rm mkdir 解释 命令名称:mkdir 命令英文原意:make directories 命令所在路径:/bin/mkdir 执行权限:所有 ...
- 了解JavaScript的语法基础,值和变量
通过JavaScript语法基础学习了解到1.怎么使用js/*通常js的引入和css一样,分为内部,外部和行内引入,执行自上而下,有着先后顺序*/:2.js的语法/*2.1js是用字母,数字.特殊字符 ...
- 开源工作流管理系统节点接收人设置“指定节点处理人”系列讲解
关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单 拖拽式表单 工作流系统CCBPM节点访问规则接收人规则 适配数据库: o ...
- 微信小程序入门笔记-审核上线(5)
1.点击上传 2.填写版本号.备注 3.https://mp.weixin.qq.com/回到微信公众平台,点击版本管理就可以看到开发版本 4.点击提交审核(提交之前填写小程序基本资料,才可提交审核) ...
- redis集群redis-cluster搭建
redis集群搭建--参考微信公众号(诗情画意程序员):https://mp.weixin.qq.com/s/s5eJE801TInHgb8bzCapJQ 这是来自redis官网的一段介绍,大概意思就 ...
- clr via c# 接口
1,常用接口及其定义 public interface IDisposable{ void Dispose(); } public interface IEnumerable}{ IEnumerato ...
- grep 基本用法
grep usage: grep [options]... pattern [file]... 如果file缺省,会从 stdin 读取 $ grep --help -i 忽略大小写 -n 显示行号 ...
- .NET Core DI简单介绍
依赖注入的基础 我们都知道DI,,他是一种开发模式.他是将服务可被应用程序任何位置的代码使用,当某个代码组件(如一个类)需要引用某些外部代码(一个服务)时.都有两种选择 1:直接在调用代码种创建服务组 ...
- Java模拟客户端向服务器上传文件
先来了解一下客户端与服务器Tcp通信的基本步骤: 服务器端先启动,然后启动客户端向服务器端发送数据. 服务器端收到客户端发送的数据,服务器端会响应应客户端,向客户端发送响应结果. 客户端读取服务器发送 ...