Docker Remote API 是将会用来取代 Docker 命令的工具。本文将会用 curl
操作 Docker Remote API。
准备:
示例系统是 Ubuntu,配置文件在 /etc/default/docker
。
需要把此文件的 DOCKER_OPTS
改为 DOCKER_OPTS="-H 127.0.0.1:5555 -H unix:///var/run/docker.sock"
。
修改完毕后,重启 Docker。
Docker 常用端口为 4243,本文遵照原文,改为 5555,生产环境一定要注意该端口不要被未授权 IP 访问。
1 操作容器的api:
列出所有容器
GET /containers/json
创建新容器
POST /containers/create
检查容器
GET /containers/(id)/json
用于获取容器底层信息。
进程列表
GET /containers/(id)/top
获取容器内运行进程的列表。
容器日志
GET /containers/(id)/logs
获取容器内 stdout
和 stderr
的输出。
导出容器
GET /containers/(id)/export
相当于 docker export
,可以直接 curl
到一个镜像文件。
启动容器
POST /containers/(id)/start
停止容器
POST /containers/(id)/stop
重启容器
Restart a Container
KILL容器
POST /containers/(id)/kill
2 用于操作镜像的 Docker Remote API:
创建一个镜像
镜像可以从两个方式获取:
- 从 registry 中 pull 一个。
- 导入一个。
用法:
POST /images/create
POST /images/create?fromImage=base
获取名叫 base
的镜像。
POST /images/create?fromSrc=url
从 url
导入镜像。
Flux7 这里就有一个 BUG。
shell操作中带有&
的情况下,是需要非常小心的。
图片中的命令需要改正为:curl -v -X POST "http://localhost:5555/images/create?fromImage=base&tag=latest"
从容器创建镜像
POST /commit
列出镜像
GET /images/json
插入文件
POST /images/(name)/insert
POST /images/test/insert?path=/usr&url=myurl
如图,将 url
提供的文件插入到 name
对应的镜像的 path
目录中。
删除镜像
DELETE /images/(name)
推送镜像到 registry
POST /images/(name)/push
为镜像做标签
POST /images/(name)/tag
搜索镜像
GET /images/search
查看镜像历史
GET /images/(name)/history
构建镜像
POST /build
这个需要解释一下:POST 传入的 Dockerfile 文件必须是 tar.gz
格式。或者不传入 Dockerfile,而是用 remote
参数指定一个,这种情况下不要求格式。
使用 POST 传入文件的用法:
再例如使用 remote 传入 Dockerfile 的 url
用法:
命令 # curl localhost/Dockerfile #用于展示存储Dockerfile的URI
FROM ubuntu
RUN mkdir /myvol
RUN echo "hello world" > /myvol/greating
VOLUME /myvol
命令 # curl -X POST "127.0.0.1:4243/build?t=asd&remote=http%3A%2F%2Flocalhost%2FDockerfile"
命令 # docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
asd latest 1946f0511bda 36 seconds ago 188.3 MB