前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker系列学习文章 - docker API基本介绍和使用(十)

Docker系列学习文章 - docker API基本介绍和使用(十)

原创
作者头像
宝哥@上云专家
修改2018-12-13 11:15:49
6.5K0
修改2018-12-13 11:15:49
举报
文章被收录于专栏:宝哥的专栏宝哥的专栏

一、什么是API

1. API具体是什么?

API这个词在维基百科里解释是这样的:应用程序接口(英语:application programming interface,缩写作 API),又称为应用编程接口,就是软件系统不同组成部分衔接的约定。看完这个解释估计你还是有点懵逼,不过没关系,下面我们会用通俗的语言来介绍什么是API。

我们每个人都有手机,当手机没电了我们肯定会找固定的充电器和充电线来充电。苹果的用苹果,安卓的用安卓。但是你肯定不会用安卓的线去充苹果的手机,这道理很简单,因为你的苹果手机是Lightning 接口,安卓的是micro接口。你要想充电或者对你手机传输数据,那么必须买合适的充电线和数据线, 这是对于接口最简单易懂的认识。

类似的,程序的接口也是如此。每个程序都有固定对外的标准接口,这个接口由开发这个程序的开发者定义的,你要想连接它们,那么就应该遵循它们的接口标准。

2. 什么是REST

现在学习API 经常看到一个词叫REST,英文全称是Representational State Transfer。那么什么是REST呢? REST一词是Apache 基金会主席Roy Fielding博士提出来的,中文意思叫"表现层状态转化"。中文不太好理解,不过我们从下面几个方面去认识你就大概能明白什么是rest。

2.1. 什么是表现层?

这里的表现层指的是资源的表现层,所谓"资源",就是网络上的一个具体信息。一个文本,一部电影,一个服务都可以算作一资源。那么这些资源用什么来确定和表现呢?那就得用到URI,比如我们下载一个电影,肯定有对应的URI地址,我们看一部网络小说,也有对应的URI地址。而且这个地址是唯一的,独一无二的。资源用URI标识了,我们可以理解为这个资源已经在网络上“表现”了。所以说到这里,表现层的意思其实就是把"资源"具体呈现出来的形式。

2.2. 什么是状态转化?

常识里,我们要把一物体发生状态改变,肯定需要一些操作和手段。网络上的资源也是如此,你下载一部电影,首先得下载,然后才能打开欣赏。下载获取都需要走HTTP协议,HTTP协议里面,四个基本的操作方式:GET、POST、PUT、DELETE(获取,新建,更新,删除)。通过这基本的四种方法可以对网络上的资源进行一些状态转化操作。

所以,REST 就是表现层的状态转化,大家分开理解上面两点然后结合在一起就明白了。简单粗暴的可以理解为:方法 + URI资源。

GET /movie/war/珍珠港

DELETE /movie/war/珍珠港

...

二、Docker API种类

docker 的api也遵循rest的风格,因此我们了解了上面两点后,我们开始学习docker本身api的相关知识。

首先,我们把docker当作一种资源,我们可以通过api来对docker进行操作,操作的方法也是http的那几种方法。

其次,我们要了解docker有哪些对外可使用的api,这里docker官方主要有三大对外api

  • Docker Registry API
  • Docker Hub API
  • Docker Remote API

1. Docker Registry API

这个是docker镜像仓库的api,通过操作这套API,你可以自由的自动化、程序化的管理你的镜像仓库。

2. Docker Hub API

Docker Hub API是用户管理操作的API,docker hub是使用校验和公共 namespaces 的方式来存储账户信息、认证账户、进行账户授权。API同时也允许操作相关的用户仓库和 library 仓库。

3. Docker Remote API

这套API用于控制主机 Docker 服务端的 API,等价于 docker命令行客户端。 有了它,你能远程操作docker容器,更重要的是你可以通过程序自动化运维docker进程。

三、API使用前准备

前面我们说过,操作rest api用的就是http的那些方法。那么具体怎么使用这些方法呢?这里我们提供几种通用的方式来操作调用下docker 的API,然后体验下。在体验之前,我们需要开启docker rest api,不然没开启,你是不能用的。具体开启的方法:

代码语言:shell
复制
$ vim /usr/lib/systemd/system/docker.service

在 ExecStart=/usr/bin/dockerd 后面直接添加 -H tcp://0.0.0.0:8088 -H unix:///var/run/docker.sock (注意端口8088自己随便定义,别跟当前的冲突即可)

代码语言:shell
复制
$ systemctl daemon-reload
$ systemctl restart docker

重启完成后,我们执行 curl 127.0.0.1:8088/info | python -mjson.tool 命令即可查看docker的状态状态(json形式,python -mjson.tool借用了这个工具,这样让json格式化,好阅读)

启用了docker API后,我们还有个问题,那就是在哪查询docker 现有的API?既然docker提供了那3大API库:Docker Registry API、Docker Hub API、Docker Remote API。那么在哪里可以查看具体详细的API,比如Docker Registry API 下面到底有哪些API地址?有查询镜像的API吗?有删除的吗?其实这些都有的,我们可以直接去官网API手册里查看即可,地址就是:https://docs.docker.com/engine/api/v1.38/ (想看什么版本的把最后的v1.38 替换成目标版本号即可)

这里要注意的是,官方不再建议使用API v1.12之前的版本,建议使用v1.24 or 更高的版本。

查看本地docker API版本可以用 docker version 命令:

四、如何操作docker API

1. 最简单的curl方式

CURL这个命令,我想大家都熟悉,默认linux下都自带安装。很多测试http的方法都可以直接使用 CURL的方式。

比如我们查看docker的images详细信息,就可以直接用curl 来调取:

代码语言:shell
复制
 $ curl -X GET http://127.0.0.1:8088/images/json

这样显示会比较错乱无章,我们可以在命令后面加个 python -mjson.tool 格式化下

代码语言:shell
复制
$  curl -X GET http://127.0.0.1:8088/images/json | python -mjson.tool

这样的结果格式就比较标准化,比较容易阅读。

查看所有containers容器:

代码语言:shell
复制
$ curl -X GET http://127.0.0.1:8088/containers/json | python -mjson.tool

创建一个containers容器:

这里创建一个mariadb数据库的容器,设置了密码是123456,监听端口是3306

代码语言:shell
复制
$ curl -X POST -H "Content-Type: application/json" -d '{
    "Image": "mariadb",
    "Env": ["MYSQL_ROOT_PASSWORD=123456"],
    "ExposedPorts": {
        "3306/tcp": {}
    },
    "HostConfig": {
        "PortBindings": {
            "3306/tcp": [{"HostIp": "","HostPort": "3306"}]
        }
    },
    "NetworkSettings": {
        "Ports": {
            "5000/tcp": [{"HostIp": "0.0.0.0","HostPort": "3306"}]
        }
    }
}' http://127.0.0.1:8088/containers/create

启动/停止/重启 一个containers容器:

代码语言:shell
复制
$ curl -X POST http://127.0.0.1:8088/containers/{id}/start   (注意这里是POST方法)
$ curl -X POST http://127.0.0.1:8088/containers/{id}/stop   (注意这里是POST方法)
$ curl -X POST http://127.0.0.1:8088/containers/{id}/restart   (注意这里是POST方法)
...

具体还有很多API方法,大家都可以登录上面提到的链接进行查看

https://docs.docker.com/engine/api/v1.38

2. python程序脚本方式

python 非常强大,这个大家都认可。现在很多自动化场景都是通过python加载第三方对应的库,然后编写业务逻辑自动化方式devops运维。docker给python也提供了一个非常强大的库,名字就叫做docker。我们可以登录官方的python sdk地址来学习认识python如何具体操作docker。

地址是:https://docker-py.readthedocs.io/en/stable/

2.1. 安装docker python库

$ pip install docker

2.2. 开始使用

代码语言:python
复制
import docker
client = docker.DockerClient(base_url='unix://var/run/docker.sock', version="auto")
client.containers.run("ubuntu", "echo hello world")

这是一个很简单的使用例子,我们可以分析下:

第一行表示引入第三方库docker。

第二行用于配置Docker服务端的基本信息,包含了base_url(Docker服务端的地址)以及version(auto可以自动检查docker的版本)。

第三行则是相当于运行了一个docker run ubuntu echo hello world的命令。

2.3. 进阶使用

代码语言:python
复制
import docker
client = docker.DockerClient(base_url="tcp://ip:port")
client.images.list()       # 类似docker images命令,显示image的信息列表
client.containers.list()       #  类似docker ps命令
client.containers.list(all=True)       # 类似docker ps -a命令
container = client.containers.get(container_id)           # 获取daodocker容器,这里container_id 是你要输入的具体容器id
container.start()            # 类似docker start 传入具体的容器id ,开启容器

总结: 现在很多企业都已经步入自动化运维时代了,所以掌握api的运用技巧和法则是非常有必要的。上面我们大概介绍了下docker api的入门,其实你要玩得非常好,这里有很大的灵活性和复杂性,不过这里就需要你一些脚本编程方面的知识了。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、什么是API
  • 二、Docker API种类
  • 三、API使用前准备
  • 四、如何操作docker API
相关产品与服务
容器镜像服务
容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档