Docker 系列(八):Docker API使用


 

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} 將容器的 TCP 3306 端口映射到宿主機的 3300 端口
  • name 指定了容器的名稱
  • detach=True 后台運行,此時這個 Python 程序不用被掛起
  • container 是被創建容器的對象
 
          


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM