docker registry http api v2(原创请注明出处)
来源:互联网 发布:淘宝人群画像分析工具 编辑:程序博客网 时间:2024/05/28 15:48
概要
专有名词解释
- repository name(存储库名称)
存储库指在库中存储的镜像
- 语法
- 经典存储库名称由两级路径构成,每级路径小于30个字符,v2的api不强制要求这样的格式
- 每级路径名至少有一个小写字母或者数字,使用句号,破折号和下划线分隔。 更严格来说,它必须符合正则表达式:[a-z0-9]+(?:[._-][a-z0-9]+)*
- 多级路径用/分隔
- 存储库名称总长度(包括/)不能超过256个字符
- digest(概要)
概要是镜像各个层的唯一标识。虽然算法允许使用任意算法,但是为了兼容性应该使用sha256。例:sha256:6c3c624b58dbbcd3c0dd82b4c53f04194d1247c6eebdaab7c610cf7d66709b3b
- 语法
digest := algorithm ":" hexalgorithm := /[A-Fa-f0-9_+.-]+/hex := /[A-Fa-f0-9]+/
- 生成摘要的伪代码
let C = 'a small string'let B = sha256(C)let D = 'sha256:' + EncodeHex(B)let ID(C) = D
PULL镜像过程
镜像由一个json清单和 层叠文件组成,pull镜像的过程就是检索这两个组件的过程。
拉取镜像的第一步就是获取清单,清单由下面几个字段组成:
字段描述name镜像名称tag镜像当前版本的tagfsLayers层描述列表(包含摘要)signature一个JWS签名,用来验证清单内容
当获取清单之后,客户端需要验证签名(signature),以确保名称和层是有效的。确认后,客户端可以使用digest去下载各个层,在v2API中,层存储在blobs中以digest作为键值。
- Pulling an Image Manifest(拉取镜像清单)
- API
>>> HEAD /v2/<name>/manifests/<reference> #检查镜像清单是否存在>>> GET /v2/<name>/manifests/<reference> #拉取镜像清单Note
reference可以是tag或者是digest
- Pulling a Layer(拉取层)
- API
>>> GET /v2/<name>/blobs/<digest>
PUSHING镜像过程
推镜像和拉取镜像过程相反,先推各个层到registry仓库,然后上传清单。
- Pushing a Layer(上传层)
上传层分为两步,第一步使用post请求在registry仓库启动上传服务,返回一个url,这个url可以用来上传数据和检查状态。
- Existing Layers(检查层是否存在)
- API
>>> HEAD /v2/<name>/blobs/<digest>
RETURN
若返回200 OK则表示存在,不用上传
- Starting An Upload(启动上传服务)
- API
>>> POST /v2/<name>/blobs/uploads/
- RETURN
如果post请求返回202 accepted,一个url会在location字段返回.
202 AcceptedLocation: /v2/<name>/blobs/uploads/<uuid>Range: bytes=0-<offset>Content-Length: 0Docker-Upload-UUID: <uuid> # 可以用来查看上传状态和实现断点续传
- Uploading the Layer(上传层)
- Upload Progress(上传进度)
- API
>>> GET /v2/<name>/blobs/uploads/<uuid>>>> Host: <registry host>
- RETURN
204 No ContentLocation: /v2/<name>/blobs/uploads/<uuid>Range: bytes=0-<offset>Docker-Upload-UUID: <uuid>
- Monolithic Upload(整块上传)
- API
>>> PUT /v2/<name>/blobs/uploads/<uuid>?digest=<digest>>>> Content-Length: <size of layer>>>> Content-Type: application/octet-stream<Layer Binary Data>
- Chunked Upload(分块上传)
- API
>>> PATCH /v2/<name>/blobs/uploads/<uuid>>>> Content-Length: <size of chunk>>>> Content-Range: <start of range>-<end of range>>>> Content-Type: application/octet-stream<Layer Chunk Binary Data>
- RETURN
- 如果服务器不接受这个块,则返回:
416 Requested Range Not SatisfiableLocation: /v2/<name>/blobs/uploads/<uuid>Range: 0-<last valid range>Content-Length: 0Docker-Upload-UUID: <uuid>
- 成功返回:
202 AcceptedLocation: /v2/<name>/blobs/uploads/<uuid>Range: bytes=0-<offset>Content-Length: 0Docker-Upload-UUID: <uuid>
- Completed Upload(上传完成)
分块上传在最后一块上传完毕后,需要提交一个上传完成的请求
- API
>>> PUT /v2/<name>/blob/uploads/<uuid>?digest=<digest>>>> Content-Length: <size of chunk>>>> Content-Range: <start of range>-<end of range>>>> Content-Type: application/octet-stream<Last Layer Chunk Binary Data>
- RETURN
201 CreatedLocation: /v2/<name>/blobs/<digest>Content-Length: 0Docker-Content-Digest: <digest>
- Canceling an Upload(取消上传)
这个请求执行后uuid将失效,当上传超时或者没有完成,客户端都应该发送这个请求。
- API
>>> DELETE /v2/<name>/blobs/uploads/<uuid>
- Cross Repository Blob Mount(交叉挂载层)
此api可把客户端有访问权限的已有存储库中的层挂载到当前储存库中。
- API
>>> POST /v2/<name>/blobs/uploads/?mount=<digest>&from=<repository name>Content-Length: 0
- RETURN
- 成功返回:
201 CreatedLocation: /v2/<name>/blobs/<digest>Content-Length: 0Docker-Content-Digest: <digest>
- 失败返回:
202 AcceptedLocation: /v2/<name>/blobs/uploads/<uuid>Range: bytes=0-<offset>Content-Length: 0Docker-Upload-UUID: <uuid>
- Deleting a Layer(删除层)
- API
>>> DELETE /v2/<name>/blobs/<digest>
- RETURN
- 成功返回:
202 AcceptedContent-Length: None
- 失败返回404错误。
- Pushing an Image Manifest(上传镜像清单)
当镜像层上传完毕后,可以上传清单。
- API
>>> PUT /v2/<name>/manifests/<reference>Content-Type: <manifest media type>{ "name": <name>, "tag": <tag>, "fsLayers": [ { "blobSum": <digest> }, ... ] ], "history": <v1 images>, "signature": <JWS>, ...}
- RETURN
如果清单中有层是未知的,则返回:
{ "errors:" [{ "code": "BLOB_UNKNOWN", "message": "blob unknown to registry", "detail": { "digest": <digest> } }, ... ]}
检索功能
- Listing Repositories(列出存储库)
- API
>>> GET /v2/_catalog
- RETURN
200 OKContent-Type: application/json{ "repositories": [ <name>, ... ]}
- Pagination(部分列出存储库)
- API
>>> GET /v2/_catalog?n=<integer>Note
integer表示要列出库的个数
- RETURN
200 OKContent-Type: application/jsonLink: <<url>?n=<n from the request>&last=<last repository in response>>; rel="next"{ "repositories": [ <name>, ... ]}
- Listing Image Tags(列出镜像tag)
- API
>>> GET /v2/<name>/tags/list
- RETURN
200 OKContent-Type: application/json{ "name": <name>, "tags": [ <tag>, ... ]}
- Pagination(部分列出镜像tag)
- API
>>> GET /v2/<name>/tags/list?n=<integer>
- RETURN
200 OKContent-Type: application/jsonLink: <<url>?n=<n from the request>&last=<last tag value from previous response>>; rel="next"{ "name": <name>, "tags": [ <tag>, ... ]}
Deleting an Image(删除镜像)
- API
>>> DELETE /v2/<name>/manifests/<reference>
- RETURN
- 成功
202 AcceptedContent-Length: None
- 失败返回404错误
2 0
- docker registry http api v2(原创请注明出处)
- ubuntu下部署带认证的私有docker registry(原创请注明出处)
- Docker Registry HTTP API V2
- docker registry http api v2
- 尊重原创,转载请注明出处
- Core Aduio API--Vista中音量控制的新特点(原创,转载请注明出处)
- 转载请注明出处
- 关于原始输入--XP新技术(原创,转载请注明出处)
- [原创]WCF入门级使用教程(转载请注明出处)
- S3C2450自动升级[原创作品,转载请注明出处]
- S3C2450自动升级[原创作品,转载请注明出处]
- Discuz的安装 (原创帖,转载请注明出处)
- LAMP环境搭建 (原创帖,转载请注明出处)
- 查看/关闭SElinux (原创帖,转载请注明出处)
- Apache2.4权限配置(原创帖-转载请注明出处)
- 文章为原创,转载请注明出处,欢迎评论。
- 李望 原创作品转载请注明出处 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-10000290
- 转载请注明出处:http://blog.csdn.net/zhangphil
- 发现和记录--String.Format 将指定的 String 中的每个格式项替换为相应对象的值的文本等效项
- block访问外部变量
- Unity3D研究院之获取某个方法执行的时间
- 一步步学spark之一scala函数式编程中闭包,Curry3.0
- 1248 NYOJ 海岛争霸
- docker registry http api v2(原创请注明出处)
- RecycleView嵌套ListView和gridView不显示的问题解决
- 集群部署时ehcache的diskStore的设置
- TCP/IP——TCP建立连接与释放连接
- 初次使用QT5串口类QSerialPort
- CAS 原理
- Linux Shell系列教程之(二)第一个Shell脚本
- C++函数后面加const修饰
- win7下配置FTP服务