当前位置: 首页 > news >正文

[开源夏令营][四] Docker remote API 之 镜像篇

列出镜像

列出镜像,有两个可选參数,一个是all,一个是filter,all可选值有,0/False/false,1/True/true,默觉得0;filter是一个包括一个过滤对象的json,形式如‘{"dangling":["true"]}'

GET /images/json

我们能够尝试请求一下

curl -s -XGET theegg.me/docker/images/json?all=0 | python -mjson.tool

能够看到例如以下的返回值:

[
    {
        "Created": 1405461399,
        "Id": "88b42ffd1f7cc87c46edf70924b3e24f18da0eb69337deff4db2979d6e1032d8",
        "ParentId": "c69cab00d6ef21152755a3de928625d7a02860ebe918b8fe9d1dd6aba15229b2",
        "RepoTags": [
            "fedora:latest"
        ],
        "Size": 373742581,
        "VirtualSize": 373742581
    },
    {
        "Created": 1403128361,
        "Id": "e54ca5efa2e962582a223ca9810f7f1b62ea9b5c3975d14a5da79d3bf6020f37",
        "ParentId": "6c37f792ddacad573016e6aea7fc9fb377127b4767ce6104c9f869314a12041e",
        "RepoTags": [
            "ubuntu:latest"
        ],
        "Size": 8,
        "VirtualSize": 276100357
    }
]

返回值相应的含义:

Created:创建的时间,这是一个UNIX时间,以1970为起点,单位为秒

Id:是一个SHA256值,是该镜像的标识。

ParentId:是一个SHA256值,是该镜像的父镜像的标识。

RepoTags:是一个字符串数组,是标明在仓库中它的标签。一个镜像可能会带有多个标签。

Size:是镜像的实际的大小,即镜像占硬盘空间的大小。

VirtualSize:是镜像的虚拟大小,或者就是镜像的大小。镜像的实际大小为父镜像的虚拟大小减去该镜像的虚拟大小。


创建镜像

POST /images/create

请求參数:

-   **fromImage** – 镜像的名字
-   **fromSrc** – 镜像的来源,即标准输入
-   **repo** – 仓库
-   **tag** – 标签
-   **registry** – 从哪个registry

演示样例请求:

curl -s -XPOST theegg.me/docker/images/create?fromImage=base

返回:

開始:

{
    "status": "Pulling repository base"
}

过程中:

{
    "status": "Downloading", 
    "progressDetail": {
        "current": 528384, 
        "total": 94863360, 
        "start": 1405907686
    }, 
    "progress": "[>                                                  ] 528.4 kB/94.86 MB 6m30s", 
    "id": "27cf78414709"
}

出错时:(来自官方文档,但实际curl操作的时候是显示504超时,原因还没有查明)

{"error":"Invalid..."}

返回值含义:

status:表示状态,当前操作状态

progressDetail:表示进度细节,里面包括三个值,current当前位置,total总共多少,start从何处開始

progress:表示进度,是一个能直接输出的进度显示条(ascii图)

id:标示符

error:出错信息


插入文件到镜像中

POST /images/(name)/insert
将url指定的文件插入到名字为name的镜像的路径path中
演示样例请求:


不清楚为什么无法请求


检查镜像

GET /images/(name)/json


返回一些指定镜像名的底层信息


演示样例请求:
curl -s -XGET theegg.me/docker/images/base/json | python -mjson.tool


{
    "Architecture": "",
    "Author": "",
    "Comment": "",
    "Config": null,
    "Container": "3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0",
    "ContainerConfig": {
        "AttachStderr": false,
        "AttachStdin": false,
        "AttachStdout": false,
        "Cmd": [
            "/bin/bash"
        ],
        "CpuShares": 0,
        "Cpuset": "",
        "Domainname": "",
        "Entrypoint": null,
        "Env": null,
        "ExposedPorts": null,
        "Hostname": "",
        "Image": "base",
        "Memory": 0,
        "MemorySwap": 0,
        "NetworkDisabled": false,
        "OnBuild": null,
        "OpenStdin": true,
        "PortSpecs": null,
        "StdinOnce": false,
        "Tty": true,
        "User": "",
        "Volumes": null,
        "WorkingDir": ""
    },
    "Created": "2013-03-23T22:24:18.818426-07:00",
    "DockerVersion": "",
    "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
    "Os": "",
    "Parent": "27cf784147099545",
    "Size": 77
}



返回值解析:
Architecture:架构
Author:作者
Comment:评注
Config:配置
Container:当前使用该镜像的容器
ContainerConfig:容器的配置
Created:创建时间
DockerVersion:Docker的版本号
Id:Id值
Os:操作系统
Parent:父镜像的Id
Size:大小


ContainerConfig中:
AttachStderr:错误输出是否有附着
AttachStdin:标准输入是否有附着
AttachStdout:标准输出是否有附着
Cmd:运行的命令,是一个数组
CpuShares:共享CPU值
Cpuset:所属CPU集合
Domainname:域名
Entrypoint:实体点
Env:环境
ExposedPorts:对外暴露的port
Hostname:主机名
Image:镜像名
Memory:内存占用
MemorySwap:内存交换
NetworkDisabled:是否禁用网络
OnBuild:在构建
OpenStdin:是否打开标准输入
PortSpecs:指定port
StdinOnce:以前使用标准输入
Tty:是否使用TTY
User:用户
Volumes: 使用卷
WorkingDir:工作文件夹


返回状态码:
200:没有错误
404:没有找到指定镜像
500:server错误


获取镜像历史

GET /images/(name)/history


返回镜像name的历史


演示样例请求:
curl -XGET -s theegg.me/docker/images/base/history | python -mjson.tool
[
    {
        "Created": 1364102658,
        "CreatedBy": "/bin/bash",
        "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
        "Size": 77,
        "Tags": [
            "base:latest",
            "base:ubuntu-12.10",
            "base:ubuntu-quantal",
            "base:ubuntu-quantl"
        ]
    },
    {
        "Created": 1364068391,
        "CreatedBy": "",
        "Id": "27cf784147099545",
        "Size": 175306958,
        "Tags": null
    }
]


返回值:
是一个数组,表示一系列镜像




返回状态码:
200:没有错误
404:没有找到指定镜像
500:server错误


上传镜像到registry

POST /images/(name)/push


将名为name的镜像上传到registry
请求參数:
registry:你想要上传到的registry


请求头部:
X-Registry-Auth:包括一个base64编码的AuthConfig对象,即{'username': string, 'password': string, 'email': string, 'serveraddress' : string}


返回状态码:
返回状态码:
200:没有错误
404:没有找到指定镜像
500:server错误


将镜像打上仓库的标签

POST /images/(name)/tag


将名为name的镜像打上仓库的标签
curl -XPOST theegg.me/docker/images/base/tag?repo=a -i


HTTP/1.1 201 Created
Server: nginx
Date: Tue, 29 Jul 2014 02:26:24 GMT
Content-Type: text/plain; charset=utf-8
Content-Length: 0
Connection: keep-alive


请求參数:
repo:指定要打的标签的仓库名
force:是否强制,默觉得false


返回状态码:
201:没有错误
400:參数有误
404:没有找到指定的镜像
409:矛盾
500:server错误


删除一个镜像

DELETE /images/(name)


从文件系统上删除名为name的镜像
curl -XDELETE theegg.me/docker/images/base
[
    {
        "Untagged": "base:latest"
    }
]




请求參数:
force:是否强制
noprune:是否啰嗦(待确定)


返回状态码:
200:没有错误
404:没有找到指定镜像
500:server错误


搜索镜像

GET /images/search


在Docker Hub上搜索指定镜像
演示样例请求:
curl -XGET -s theegg.me/docker/images/search?term=sshd | python -mjson.tool




[
    {
        "description": "SSH Daemon created in the ssh daemon documentation example",
        "is_official": false,
        "is_trusted": false,
        "name": "dhrp/sshd",
        "star_count": 5
    },
    {
        "description": "Ubuntu 13.10 with openssh based on the stackbrew/ubuntu:13.10 image.",
        "is_official": false,
        "is_trusted": false,
        "name": "stephens/sshd",
        "star_count": 2
    },...
]




返回的是一个镜像数组,每一个镜像有:
description:描写叙述信息
is_official:是否官方
is_trusted:是否受信任
name:名字
star_count:标星数


返回状态码:
200:没有错误
500:server错误


相关文章:

  • MySQL:NULL?
  • nsq使用的TOML配置文件规范文档中文版
  • 禁用缓存的设置
  • 网络安全--边界安全-防火墙(2)
  • ecshop物流跟踪实现
  • Linux下查看操作系统信息、内存情况及cpu信息:cpu个数、核心数、线程数
  • happy,
  • 百度员工离职总结:如何做个好员工
  • 设计模式:适配器模式(Adapter)
  • [1127]图形打印 sdutOJ
  • Linux DNS正向解析和反向解析配置实例(一)
  • 什么是 BULK INSERT
  • chrome是什么?
  • javaScript中的this指针
  • Oracle的常见错误及解决办法
  • hexo+github搭建个人博客
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • angular学习第一篇-----环境搭建
  • canvas 绘制双线技巧
  • C语言笔记(第一章:C语言编程)
  • Docker容器管理
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • Javascripit类型转换比较那点事儿,双等号(==)
  • Javascript 原型链
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • PAT A1092
  • php面试题 汇集2
  • SpriteKit 技巧之添加背景图片
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 后端_MYSQL
  • 简单易用的leetcode开发测试工具(npm)
  • 排序(1):冒泡排序
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 听说你叫Java(二)–Servlet请求
  • 微信支付JSAPI,实测!终极方案
  • 一些关于Rust在2019年的思考
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • # MySQL server 层和存储引擎层是怎么交互数据的?
  • # 数论-逆元
  • (AtCoder Beginner Contest 340) -- F - S = 1 -- 题解
  • (Matalb时序预测)PSO-BP粒子群算法优化BP神经网络的多维时序回归预测
  • (附源码)spring boot建达集团公司平台 毕业设计 141538
  • (七)理解angular中的module和injector,即依赖注入
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)为C# Windows服务添加安装程序
  • .NET 的程序集加载上下文
  • .net 生成二级域名
  • .NET中使用Redis (二)
  • @property括号内属性讲解
  • @SuppressWarnings(unchecked)代码的作用
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • []利用定点式具实现:文件读取,完成不同进制之间的
  • [2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序