Docker API種類
docker 的api遵循rest的風格,可以查看https://docs.docker.com/engine/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使用前准備
在體驗之前,我們需要開啟docker rest api。具體開啟的方法:
$ 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自己隨便定義,別跟當前的沖突即可)
$ systemctl daemon-reload $ systemctl restart docker
命令行執行測試:curl 127.0.0.1:8088/info | python -mjson.tool
如何操作docker API
最簡單的curl方式
CURL這個命令,我想大家都熟悉,默認linux下都自帶安裝。很多測試http的方法都可以直接使用 CURL的方式。
比如我們查看docker的images詳細信息,就可以直接用curl 來調取:
$ curl -X GET http://127.0.0.1:8088/images/json
這樣顯示會比較錯亂無章,我們可以在命令后面加個 python -mjson.tool 格式化下
$ curl -X GET http://127.0.0.1:8088/images/json | python -mjson.tool
這樣的結果格式就比較標准化,比較容易閱讀。
查看所有containers容器:
$ curl -X GET http://127.0.0.1:8088/containers/json | python -mjson.tool
創建一個containers容器:
這里創建一個mariadb數據庫的容器,設置了密碼是123456,監聽端口是3306
$ 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容器:
$ 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
python程序腳本方式
Docker給python提供了一個非常強大的庫,名字就叫做docker。我們可以登錄官方的python sdk地址來學習認識python如何具體操作docker。
地址是:https://docker-py.readthedocs.io/en/stable/
安裝docker python庫
$ pip install docker
開始使用
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的命令。
進階使用
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() #啟動容器
端口映射
import docker client = docker.DockerClient(base_url="tcp://ip:port") container = client.containers.run('mysql/mysql-server:5.7',ports={'3306/tcp': 3300}, auto_remove=True, name='shark_mysql', detach=True) # 查看容器對象的方法和屬性 print(dir(container)) print(container.short_id)
端口{'3306/tcp': 3300}
將容器的 TCP3306
端口映射到宿主機的3300
指定了容器的名稱name
后台運行,此時這個 Python 程序不用被掛起detach=True
container
是被創建容器的對象