在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
网友评论