一、什么是API

1. API具体是什么?

API这个词在维基百科里解释是这样的:应用程序接口(英语application programming interface,缩写作 API),又称为应用编程接口,就是软件系统不同组成部分衔接的约定。
简单理解就是,我们不同的安卓和系统的手机就要用不同的数据线充电,类似的,程序的接口也是如此。每个程序都有固定对外的标准接口,这个接口由开发这个程序的开发者定义的,你要想连接它们,那么就应该遵循它们的接口标准

2. 什么是REST

现在学习API 经常看到一个词叫REST,英文全称是Representational State Transfer,中文意思叫"表现层状态转化"

2.1. 什么是表现层?

表现层指的是资源的表现层,所谓"资源",就是网络上的一个具体信息。一个文本,一部电影,一个服务都可以算作一资源表现层的意思其实就是把"资源"具体呈现出来的形式。比如,我们可以通过一个URL连接下载视频,图片等!

2.2. 什么是状态转化?

简单理解就是对资源增删改查
GET、POST、PUT、DELETE(获取,新建,更新,删除)通过这基本的四种方法可以对网络上的资源进行一些状态转化操作

二、Docker API种类

  • Docker Registry API (docker镜像仓库的api)
  • Docker Hub API (Docker Hub API是用户管理操作的API)
  • Docker Remote API (用于控制主机 Docker 服务端的 API)

Docker Remote API

Docker Remote API是由docker守护进程提供的,默认情况下,docker守护进程绑定到一个宿主机的嵌套字里,即unix:///var/run/run/docker.sock

Remote API 的基本操作

编辑/usr/lib/system/system/docker.service 文件,把 Docker 守护进程绑定到该宿主机的所有网络接口的 2375 端口上

ExecStart=/usr/bin/docker-current -d --selinu-enabled -H tcp://0.0.0.0:2375
# systemctl --system daemon-reload

通过 Docker 客户端命令的-H 标志来测试一下刚才的配置是否生效

# docker daemon -H unix:///var/run/docker.sock -H 0.0.0.0:2375
WARN[0000] /!\ DON'T BIND ON ANY IP ADDRESS WITHOUT setting
-tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING /!\
WARN[0000] devmapper: Usage of loopback devices is strongly discouraged for
production use. Please use `--storage-opt dm.thinpooldev` or use `man docker` to refer
to dm.thinpooldev section.
WARN[0000] devmapper: Base device already exists and has filesystem xfs on it.
User specified filesystem will be ignored.
INFO[0000] [graphdriver] using prior storage driver "devicemapper"
INFO[0000] Graph migration to content-addressability took 0.00 seconds
INFO[0000] Firewalld running: false
INFO[0000] Default bridge (docker0)is assigned with an IP address
172.17.0.0/16. Daemon option --bip can be used to set a preferred IP address
INFO[0000] Loading containers: start.
.
INFO[0000] Loading containers: done.
INFO[0000] Daemon has completed initialization
INFO[0000] Docker daemon
commit=3999ccb-unsupported execdriver=native-0.2 graphdriver=devicemapper
version=1.10.3
INFO[0001] API listen on [::]:2375
INFO[0001] API listen on /var/run/docker.sock
# docker -H 127.0.0.1:2375 info
Containers: 1
Running: 1
Paused: 0
Stopped: 0
Images: 22
Server Version: 1.10.3
Storage Driver: devicemapper
Pool Name: docker-253:1-285241608-pool
Pool Blocksize: 65.54 kB
Base Device Size: 10.74 GB
Backing Filesystem: xfs
Data file: /dev/loop0
Metadata file: /dev/loop1
Data Space Used: 5.105 GB
Data Space Total: 107.4 GB
Data Space Available: 90.75 GB
Metadata Space Used: 10.23 MB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.137 GB
Udev Sync Supported: true
Deferred Removal Enabled: false
Deferred Deletion Enabled: false
Deferred Deleted Device Count: 0
Data loop file: /var/lib/docker/devicemapper/devicemapper/data
WARNING: Usage of loopback devices is strongly discouraged for production
use. Either use `--storage-opt dm.thinpooldev` or use `--storage-opt
dm.no_warn_on_loop_devices=true` to suppress this warning.
Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata
Library Version: 1.02.135-RHEL7 (2016-09-28)
Execution Driver: native-0.2
Logging Driver: json-file
Plugins:
Volume: local
Network: host bridge null
Kernel Version: 3.10.0-229.el7.x86_64
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
Number of Docker Hooks: 2
CPUs: 1
Total Memory: 1.954 GiB
Name: docker
ID:
HRBL:3YXE:HAAO:MRAG:NKQO:MZWC:7EVD:Q2QK:UYK6:C7NF:GOYU:ELS
R
WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled
Registries: docker.io (secure)

docker_host 环境变量,这样即省掉了每次都需要设置-H 标志的麻烦

# export DOCKER_HOST="tcp://127.0.0.1:2375"

测试 Docker Remote API

通过 Docker 程序建立并确认了与 Docker 守护进程之间的网络连通
性,接着来直接连接到 API

[root@docker ~]# curl http://127.0.0.1:2375/info
{"ID":"HRBL:3YXE:HAAO:MRAG:NKQO:MZWC:7EVD:Q2QK:UYK6:C7NF:GOYU:EL
SR","Containers":1,"ContainersRunning":1,"ContainersPaused":0,"ContainersStopped":0,"Images":
22,"Driver":"devicemapper","DriverStatus":[["Pool
Name","docker-253:1-285241608-pool"],["Pool Blocksize","65.54 kB"],["Base Device
Size","10.74 GB"],["Backing Filesystem","xfs"],["Data file","/dev/loop0"],["Metadata
file","/dev/loop1"],["Data Space Used","5.106 GB"],["Data Space Total","107.4 GB"],["Data Space
Available","90.75 GB"],["Metadata Space Used","10.23 MB"],["Metadata Space Total","2.147
GB"],["Metadata Space Available","2.137 GB"],["Udev Sync Supported","true"],["Deferred
Removal Enabled","false"],["Deferred Deletion Enabled","false"],["Deferred Deleted Device
Count","0"],["Data loop file","/var/lib/docker/devicemapper/devicemapper/data"],["Metadata loop
file","/var/lib/docker/devicemapper/devicemapper/metadata"],["Library Version","1.02.135-RHEL7
(2016-09-28)
"]],"SystemStatus":null,"Plugins":{"Volume":["local"],"Network":["host","bridge","null"],"Authori
zation":null},"MemoryLimit":true,"SwapLimit":true,"CpuCfsPeriod":true,"CpuCfsQuota":true,"CP
UShares":true,"CPUSet":true,"IPv4Forwarding":true,"BridgeNfIptables":false,"BridgeNfIp6tables"
:false,"Debug":false,"NFd":21,"OomKillDisable":true,"NGoroutines":28,"SystemTime":"2016-12-3
0T03:24:27.654171066Z","ExecutionDriver":"native-0.2","LoggingDriver":"json-file","NEventsLis
tener":0,"KernelVersion":"3.10.0-229.el7.x86_64","PkgVersion":"docker-common-1.10.3-59.el7.Ce
ntOS.x86_64","OperatingSystem":"CentOS Linux 7 (Core)
","OSType":"linux","Architecture":"x86_64","IndexServerAddress":"https://index.docker.io/v1/","I
ndexServerName":"docker.io","RegistryConfig":{"InsecureRegistryCIDRs":["127.0.0.0/8"],"Index
Configs":{"docker.io":{"Name":"docker.io","Mirrors":null,"Secure":true,"Official":true}},"Mirrors
":null},"InitSha1":"2195bfa7012bb8ffc50f899b658b487b565336e1","InitPath":"","NCPU":1,"Mem
Total":2098581504,"DockerRootDir":"/var/lib/docker","HttpProxy":"","HttpsProxy":"","NoProxy":
"","Name":"docker","Labels":null,"ExperimentalBuild":false,"ServerVersion":"1.10.3","ClusterStor
e":"","ClusterAdvertise":"","Registries":[{"Name":"docker.io","Secure":true}]}

通过 API 来管理 Docker 镜像。

获取 Docker 守护进程中所有进程中所有镜像的列表

# curl http://127.0.0.1:2375/images/json | python -m json.tool% Total % Received % Xferd Average Speed Time Time Time
CurrentDload Upload Total Spent Left
Speed
100 6781 0 6781 0 0 245k 0 --:--:-- --:--:-- --:--:-- 254k
[{"Created": 1482998541,"Id":
"sha256:0c27604c726690da5f7368af31765903bbf196b8e5808c876a2abd25b681a17f","Labels": null,"ParentId": "","RepoDigests": null,"RepoTags": ["odoo:latest"],"Size": 0,"VirtualSize": 0},{"Created": 1482966589,"Id":
"sha256:411afb6272fbf5258c421ca5dd10bf212cddb40d78ac3962114b67bb78cc7c62",
"Labels": {},"ParentId": "","RepoDigests": ["docker.io/python@sha256:05d7f756d1980a83ca7419109334a6df47824e02eae93996c3d201
f96baf7cf3"],"RepoTags": ["docker.io/python:latest"],"Size": 687122335,"VirtualSize": 687122335
},
这里使用了/images/json 这个接入点,它将返回 Docker 守护进程中的所有镜
像的列表。
最后,也像命令行一样,也可以在 docker hub 上查找镜像。
# curl http://192.168.200.22:2375/images/search?term="jamtur01" | python
-mjson.tool % Total % Received % Xferd Average Speed Time Time
Time CurrentDload Upload Total Spent
Left Speed
100 4387 0 4387 0 0 1023 0 --:--:-- 0:00:04 --:--:--
1023
[{"description": "","index_name": "docker.io","is_automated": true,"is_official": false,"is_trusted": true,"name": "jamtur01/docker-presentation","registry_name": "docker.io","star_count": 5},{"description": "","index_name": "docker.io","is_automated": false,"is_official": false,"is_trusted": false,"name": "jamtur01/dockerjenkins","registry_name": "docker.io","star_count": 3}

通过 API 管理 Docker 容器

Docker Remote API 同样也可以使用/container 参数列出所有正在的容器

# curl -s "http://127.0.0.1:2375/containers/json" | python -m json.tool
[{"Command": "/entrypoint.sh /etc/docker/registry/config.yml","Created": 1483003943,"HostConfig": {"NetworkMode": "default"},"Id":"09dda7fe410ba278db18ca1c0aade605083ac6151ce6e005527304f7cc3c5331","Image": "docker.io/registry:latest","ImageID":
"sha256:c9bd19d022f6613fa0e3d73b2fe2b2cffe19ed629a426db9a652b597fccf07d4","Labels": {},"Names": ["/registry"],"NetworkSettings": {"Networks": {"bridge": {"Aliases": null,"EndpointID":
"98594476f7c321b1301ea67aadbadbe412a6d44e49e3d6fb5ee152ba12eaab7f","Gateway": "172.17.0.1","GlobalIPv6Address": "","GlobalIPv6PrefixLen": 0,"IPAMConfig": null,"IPAddress": "172.17.0.2","IPPrefixLen": 16,"IPv6Gateway": "","Links": null,"MacAddress": "02:42:ac:11:00:02","NetworkID": ""}}},"Ports": [{"IP": "0.0.0.0","PrivatePort": 5000,"PublicPort": 5000,"Type": "tcp"}],"Status": "Up 53 minutes"} ]

使用 POST 请求来调用/containers/create 接入点来创建容器

# curl -X POST -H "Content-Type: application/json"
http://127.0.0.1:2375/containers/create -d '{"image":"docker.io/python"}'
{"Id":"e7f1abb491ebfb1bb71b81ec9cb0eb5f72e7d4ce03bcaa5b491565c663ff1929",
"Warnings":null}

Docker API的相关推荐

  1. docker api 基本介绍和使用

    目录 一.什么是API 二.Docker API种类 三.API使用前准备 四.如何操作docker API 一.什么是API 1. API具体是什么? API这个词在维基百科里解释是这样的:应用程序 ...

  2. ASP.NETCore微服务(七)——【docker部署linux上线】(ECS+linux+docker+API上线部分)

    ASP.NETCore微服务(七)--[docker部署linux上线](ECS+linux+docker+API上线部分) 对应练习sql下载路径(0积分):[ASP.NETCore微服务(一)-- ...

  3. java连接unix_Java 使用 UnixSocket 调用 Docker API

    在 Docker 官网查阅 API 调用方式 例如:查询正在运行的容器列表,HTTP 方式如下: $ curl --unix-socket /var/run/docker.sock http:/v1. ...

  4. 【docker系列】docker API管理接口增加CA安全认证

    前文中我们曾经介绍过<使用IDEA远程工具>连接Docker REST API,我们会发现一个问题,任何知道Docker 服务器IP.端口的第三方都可以访问这个API,非常的不安全.为了保 ...

  5. Portainer添加远程Docker(Docker API)

    在需要被连接的docker服务器上编辑service文件 vi /usr/lib/systemd/system/docker.service 在[Service]下找ExecStart这行,添加-H ...

  6. mac下开启docker API远程调用

    2019独角兽企业重金招聘Python工程师标准>>> Socat 安装 通过源码方式安装 1 2 3 4 5 6 $ wget http://www.dest-unreach.or ...

  7. 打通docker api

    1.在安装 Docker 的 Centos7 机器中增加配置 vim /usr/lib/systemd/system/docker.service 2.在文件中 [Service] 部分,增加: Ex ...

  8. Docker Remote API v1.12使用

    为什么80%的码农都做不了架构师?>>>    Docker Remore API的使用范例: 为了可以远程使用docker API,需要设置以下docker的运行模式,默认监听在s ...

  9. Docker Remote API使用准备

    1 修改配置文件 CentOS: /etc/sysconfig/docker Ubuntu: /etc/init/docker.conf 1.添加: DOCKER_OPTS='-H tcp://0.0 ...

  10. ASP.NET Core微服务(七)——【docker部署linux上线】(RDS+API接口测试部分)

    ASP.NET Core微服务(七)--[docker部署linux上线]: 本文测试采用阿里云的RDS(sqlserver服务器)+ECS(linux服務器)进行测试,由于是测试,[按量付费]买个最 ...

最新文章

  1. [工具向]__androidstudio签名打包apk及配置自动签名
  2. spring session工程发布--一种新的管理httpsession的方法
  3. 时光不老,我们不散!
  4. Mysql商品和图片表_【mysql】数据库设计模式:多个图片怎么和商品关联
  5. citrix协议ICA技术原理
  6. 「Python」pandas入门教程
  7. 优雅且高效的使用Chrome Developer Tools
  8. linux更改cxxflags环境变量,在64位的ubuntu 14.04 上开展32位Qt 程序开发环境配置(pro文件中增加 QMAKE_CXXFLAGS += -m32 命令)...
  9. 避免流量高峰期CDN问题的10个方法
  10. 计算机的网络技术的普及,计算机网络技术的普及与应用-网络技术论文-计算机论文(7页)-原创力文档...
  11. word把对应图片变成嵌入的ActiveX控件。
  12. python以追加方式打开文件 线程安全吗_Python多线程同步---文件读写控制方法
  13. iOS_基于百度地图的开发
  14. 一种并行随机梯度下降法
  15. 品牌在抖音开通蓝V企业号的价值、权益及内容布局一键解析
  16. java 文本框 虚体字_虚字的意思、虚的繁体字、虚的笔顺笔画、虚字部首和繁体字虚的意思...
  17. 农业银行网上银行服务器未响应,农业银行k宝没反应原因分析及解决方法
  18. python turtle画彩虹的代码_python绘制彩虹图
  19. BES蓝牙耳机进入待机状态设计
  20. 数字货币的路在哪里?

热门文章

  1. 第三集 be 动词一般动词的过去式
  2. c语言极限,C语言问题合集
  3. 微信公众号无服务器 外部链接,新技能Get丨微信公众号如何插入外部链接?
  4. “大数据应用场景”之隔壁老王(连载一)
  5. linux 两块硬盘合并成一块
  6. (附源码)springboot教材订购系统 毕业设计 081419
  7. linux phy fixed-link
  8. 微生物组-扩增子16S分析和可视化(线上/线下同时开课,2022.4)
  9. 计算机名校远程在职硕士信息汇总Online Master
  10. [句型] 二十四、特殊疑问句 [ where ] [ what ] [ why ]