• Docker API 入门指南

    Docker提供了一个用于与Docker守护进程交互的API(称为Docker Engine API),以及用于Go和Python的SDK。SDK允许您快速轻松地构建和扩展Docker应用程序和解决方案。如果Go或Python不适合您,您可以直接使用Docker Engine API。Docker Engine API是一个RESTful API,由HTTP客户端(如wget或curl)或HTTP库(它是大多数现代编程语言的一部分)访问。

    1. 安装SDK

    实验环境为 CentOS 7.4,go version go1.12.4 linux/amd64, python 2.7.5, docker 18.09.4

    Docker API 入门指南

    若使用GoSDK,运行以下命令获取客户端:

    go get github.com/docker/docker/client
    
    

    本文使用Python SDK:

    pip install docker

    Tips:

    Docker守护程序和客户端不一定需要始终是相同的版本,如果守护程序比客户端更新,则客户端不知道守护程序中的新功能或已弃用的API端点,如果客户端比守护程序更新,则客户端可以请求守护程序不知道的API端点。添加新功能时会发布新版API。Docker API是向后兼容的,因此,除非需要利用新功能,否则无需更新使用API的代码。

    远程访问API 配置

    在/etc/systemd/system/目录下创建docker-tcp.socket 文件,并向文件中写入以下配置内容,让我们可以通过2375端口访问docker服务:

    [Unit]Description=Docker Socket for the API[Socket]ListenStream=2375BindIPv6Only=bothService=docker.service[Install]WantedBy=sockets.target

    启用新的socket

    systemctl enable docker-tcp.socketsystemctl stop dockersystemctl start docker-tcp.socketsystemctl start docker

    输入命令测试配置:

    docker-Htcp://127.0.0.1:2375ps

    2. 使用python API操作docker

    要与Docker守护程序通信,首先需要实例化客户端,最简单的方法是调用from_env() 函数,它可以通过实例化DockerClient类来手动配置

    importdockerclient = docker.from_env()

    from_env()

    从环境变量中返回一个配置过的客户端,环境变量通常设置:

    DOCKER_HOST: Docker 宿主机URL地址

    DOCKER_TLS_VERIFY: 根据CA证书验证主机

    DOCKER_CERT_PATH:连接到Docker主机时使用的TLS证书的目录的路径

    参数:

    version: 使用API版本 (str)

    timeout: 默认调用API超时时间 (int)

    ssl_version:有效ssl版本 (int)

    assert_hostname:验证服务器的主机名(bool)

    environment:读取环境变量 (dict)

    credstore_env:调用凭证存储过程时覆盖环境变量(dict)

    DockerClient:用于与Docker服务器通信的客户端。

    importdockerclient = docker.DockerClient(base_url='unix://var/run/docker.sock')

    创建容器

    >>> container = client.containers.create(‘busybox:1.0’)

    查看容器列表

    >>> containers = client.containers.lists(all=True)
    
    

    使用API 拉取镜像

    >>> image = client.images.pull(‘busybox:latest’)
    
    

    推送镜像到仓库

    >>> for line in client.push('yourname/app', stream=True, decode=True):    print(line)

    删除镜像

    >>> client.remove(image=‘busybox’, force=True, noprune=True)

    查找镜像

    >>> client.search(term=‘busybox’)
    本文只列出部分Python Docker API,若想了解更多API操作,可参考:https://docker-py.readthedocs.io/en/stable/index.html
    «
    »
以专业成就每一位客户,让企业IT只为效果和安全买单

以专业成就每一位客户,让企业IT只为效果和安全买单