[开源夏令营][四] 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错误

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

时间: 2024-08-27 21:08:02

[开源夏令营][四] Docker remote API 之 镜像篇的相关文章

关于docker rest api接口组件docker remote api的使用

前提: docker remote api 是docker自带的一个rest api 管理. 只要在配置文件里面申明下就可以了. 下面是docker remote api的官方的功能目录: Docker Remote API v1.3 3.1 Inside 'docker run' 3.2 Hijacking 3.3 CORS Requests 2.1 Containers 2.2 Images 2.3 Misc List containers Create a container Inspec

docker remote api

使用三种方式实现从docker hub 下载镜像,并推送到私有仓库 Docke client docker pull nginx docker tag nginx opshar.xxxx.com/app/nginx docker login opshar.xxxx.com docker push opshar.xxxx.com/app/nginx python sdk首先下载pip install docker #!/usr/bin/pythonimport sys, json, docker.

docker remote api 的安全隐患

开启docker的api,首先要知道docker的守护进程daemon,在下认为daemon作为Client和service连接的一个桥梁,负责代替将client的请求传递给service端. 默认情况daemon只由root控制,但我们可以通过-H绑定到端口上,这样通过端口访问的方式执行命令. 我用的是Ubuntu17的虚拟机+docker17.03.0-ce,网上介绍两种方法 1.  直接执行 docker -d -H unix:///var/run/docker.sock -H 0.0.0

Docker开启Remote API 访问 2375端口

Docker常见端口 我看到的常见docker端口包括: 2375:未加密的docker socket,远程root无密码访问主机2376:tls加密套接字,很可能这是您的CI服务器4243端口作为https 443端口的修改2377:群集模式套接字,适用于群集管理器,不适用于docker客户端5000:docker注册服务4789和7946:覆盖网络 开启配置 方法一 首先是怎么配置远程访问的API: sudo vim /etc/default/docker 加入下面一行 DOCKER_OPT

docker 开启remote api

docker官方文档上有相关说明(Configure and run Docker on various distributions),ubuntu上是可行的 sudo vi /etc/default/docker DOCKER_OPTS="-H tcp://0.0.0.0:2375" 参考一 Ubuntu14.04使用参考一推荐的方法开启remote api没有成功 参考二 使用参考二的方法开启remote api成功了

Docker 1 12新功能探索(8) Remote Api 1 24

Docker的Remote Api并不是1.12才有的,Docker1.12的Remote Api升到了1.24.Remote api的使用在1.12中没有大的变化,稍微大一点的变化是到这个版本之后,二进制文件分裂成了主client的docker以及主server的dockerd了.在centos上通过systemd的配置变化不大,无非是将tcp://ip:port设定到启动的Option中而已,下面来看一下如何设定和简单使用. 事前确认 可以看到只有unix socket的方式 [[email

构建微服务的开源技术之 Docker

一.前言 Docker 是最近在云计算领域出现的新技术.目前,Docker 和以其为代表的容器技术的热度已经改过了之前的 OpenStack.Docker 以及其所代表的容器技术的流行,即使因为软件技术的进步,更是由于其符合云计算对软件领域所带来新思想.在如今的互联网和企业应用开发领域,微服务和 DevOps 是两个思想颇为深入人心.而 Docker 技术的出现和其对整个容器技术及其生态圈发展的促进,解决了这个微服务和 DevOps 这两个思想实践中的很多难题,使得前面两种思想大规模地实现成为了

CSDN开源夏令营学生报名已经开始,你准备好了吗?

6月16日起,CSDN开源夏令营正式进入学生报名阶段.全日制高校在校学生可在7月4日前通过CSDN开源夏令营官网报名参与此活动. 6月16日起,CSDN开源夏令营正式进入学生报名阶段.全日制高校在校学生可在7月4日前通过CSDN开源夏令营官网报名参与此活动. 开源夏令营是CSDN推出的一个以促进国内开源生态建设为目的技术公益活动,本活动面向开源软件.开源社区和国内高校学生,旨在引导高校学生利用其暑期空闲时间,为开源软件.开源社区做出贡献,推动国内开源软件和开源社区的发展,推动开源在高校的深入,搭

【开源夏令营优秀开题报告】专题之四-桌面端合集

CSDN开源夏令活动已经正式进入第一实习阶段,我们遴选出部分优秀提案开题报告进行展示.本文是桌面端开题报告展示. 编者按:CSDN开源夏令活动,已经正式进入第一实习阶段,我们遴选出了部分提案的优秀开题报告进行展示.优秀开题报告作者将得到CSDN高校俱乐部发出的"2014开源夏令营荣誉证书"及纪念品一份. 提案一:Linux程序快速启动工具 提案简介:本提案主要开发新型的Linux下程序启动操作方式. 提案地址:http://code.csdn.net/os_camp/33/propos