Docker API

在Docker生态系统中一共有3种API,这三种API都是RESTful风格的

  • Registry API:提供了与来存储Docker镜像的Docker Registry集成的功能。
  • Docker Hub API:提供了与Docker HUB集成的功能
  • Docker Remote API:提供与Docker守护进程进行集成的功能

本文只针对RedHat、CentOS操作系统,重点介绍Docker Remote API

Remote API

默认情况下,Docker进程只监听本地socket,在本地查询Docker API

echo -e "GET /info HTTP/1.0\r\n" | sudo nc -U /var/run/docker.sock

修改配置文件/usr/lib/systemd/system/docker.service,修改前

ExecStart=/usr/bin/dockerd -H fd:// 

修改后:

ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375

关闭所有容器,然后重新启动docker

systemctl stop docker
systemctl start docker

这个时候,再执行docker ps,发现被阻塞住了,原因是docker默认连接是本地socket,但是刚才被我改成tcp socket了,所以需要修改一下连接参数

docker -H 127.0.0.1:2375 info 

或者是

export DOCKER_HOST="tcp://127.0.0.1:2375"
docker info

请记住,与Docker守护进程之间的网络连接是没有经过认证的,是对外开放的。

因为Docker Remote API是标准的RESTful风格的接口,所以也可以使用http客户端来访问接口

curl http://127.0.0.1:2375/info

搜索镜像

curl http://127.0.0.1:2375/images/search?term=nginx | python -m json.tool

查看正在运行的镜像

curl http://127.0.0.1:2375/containers | python -m json.tool

更详细的接口文档,请查看https://docs.docker.com/engine/api/v1.39/

Docker SDK

这里拿Python举例。首先安装依赖库

pip install docker

下面是一个示例脚本

#!/usr/bin/python

import docker

client = docker.from_env()

info = client.info()
print("CgroupDriver: ", info["CgroupDriver"])

response = client.login(username="admin", password="Harbor12345", registry="harbor.docker-plus.xyz")
print(response)

images = client.api.search("nginx")
for image in images[:2]:
    print(image["description"])

总结一下,可以和dockerd通信的方式有三种

  • Docker Client
  • HTTP API
  • SDK

你可能感兴趣的:(Docker API)