docker api是什么

docker api指的是docker的應用程序接口,是軟件系統不同組成部分銜接的約定,docker主要有三大對外api:1、Docker Registry API;2、Docker Hub API;3、Docker Remote API。

docker api是什么

本教程操作環境:linux5.9.8系統、docker-1.13.1版、Dell G3電腦。

一、什么是API

1. API具體是什么?

API這個詞在維基百科里解釋是這樣的:應用程序接口(英語:application programming interface,縮寫作 API),又稱為應用編程接口,就是軟件系統不同組成部分銜接的約定。看完這個解釋估計你還是有點懵逼,不過沒關系,下面我們會用通俗的語言來介紹什么是API。

我們每個人都有手機,當手機沒電了我們肯定會找固定的充電器和充電線來充電。蘋果的用蘋果,安卓的用安卓。但是你肯定不會用安卓的線去充蘋果的手機,這道理很簡單,因為你的蘋果手機是Lightning 接口,安卓的是micro接口。你要想充電或者對你手機傳輸數據,那么必須買合適的充電線和數據線, 這是對于接口最簡單易懂的認識。

類似的,程序的接口也是如此。每個程序都有固定對外的標準接口,這個接口由開發這個程序的開發者定義的,你要想連接它們,那么就應該遵循它們的接口標準。

2. 什么是REST

現在學習API 經常看到一個詞叫REST,英文全稱是Representational State Transfer。那么什么是REST呢? REST一詞是Apache 基金會主席Roy Fielding博士提出來的,中文意思叫”表現層狀態轉化”。中文不太好理解,不過我們從下面幾個方面去認識你就大概能明白什么是rest。

2.1. 什么是表現層?

這里的表現層指的是資源的表現層,所謂”資源”,就是網絡上的一個具體信息。一個文本,一部電影,一個服務都可以算作一資源。那么這些資源用什么來確定和表現呢?那就得用到URI,比如我們下載一個電影,肯定有對應的URI地址,我們看一部網絡小說,也有對應的URI地址。而且這個地址是唯一的,獨一無二的。資源用URI標識了,我們可以理解為這個資源已經在網絡上“表現”了。所以說到這里,表現層的意思其實就是把”資源”具體呈現出來的形式。

2.2. 什么是狀態轉化?

常識里,我們要把一物體發生狀態改變,肯定需要一些操作和手段。網絡上的資源也是如此,你下載一部電影,首先得下載,然后才能打開欣賞。下載獲取都需要走HTTP協議,HTTP協議里面,四個基本的操作方式:GET、POST、PUT、DELETE(獲取,新建,更新,刪除)。通過這基本的四種方法可以對網絡上的資源進行一些狀態轉化操作。

所以,REST 就是表現層的狀態轉化,大家分開理解上面兩點然后結合在一起就明白了。簡單粗暴的可以理解為:方法 + URI資源。

GET /movie/war/珍珠港

DELETE /movie/war/珍珠港

二、Docker API種類

docker 的api也遵循rest的風格,因此我們了解了上面兩點后,我們開始學習docker本身api的相關知識。

首先,我們把docker當作一種資源,我們可以通過api來對docker進行操作,操作的方法也是http的那幾種方法。

其次,我們要了解docker有哪些對外可使用的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使用前準備

前面我們說過,操作rest api用的就是http的那些方法。那么具體怎么使用這些方法呢?這里我們提供幾種通用的方式來操作調用下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的狀態狀態(json形式,python -mjson.tool借用了這個工具,這樣讓json格式化,好閱讀)

啟用了docker API后,我們還有個問題,那就是在哪查詢docker 現有的API?既然docker提供了那3大API庫:Docker Registry API、Docker Hub API、Docker Remote API。那么在哪里可以查看具體詳細的API,比如Docker Registry API 下面到底有哪些API地址?有查詢鏡像的API嗎?有刪除的嗎?其實這些都有的,我們可以直接去官網API手冊里查看即可,地址就是:https://docs.docker.com/engine/api/v1.38/ (想看什么版本的把最后的v1.38 替換成目標版本號即可)

這里要注意的是,官方不再建議使用API v1.12之前的版本,建議使用v1.24 or 更高的版本。

查看本地docker API版本可以用 docker version 命令:

docker api是什么

四、如何操作docker API

1. 最簡單的curl方式

CURL這個命令,我想大家都熟悉,默認linux下都自帶安裝。很多測試http的方法都可以直接使用 CURL的方式。

比如我們查看docker的images詳細信息,就可以直接用curl 來調取:

?$?curl?-X?GET?http://127.0.0.1:8088/images/json

docker api是什么

這樣顯示會比較錯亂無章,我們可以在命令后面加個 python -mjson.tool 格式化下

$??curl?-X?GET?http://127.0.0.1:8088/images/json?|?python?-mjson.tool

docker api是什么

這樣的結果格式就比較標準化,比較容易閱讀。

查看所有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

2. python程序腳本方式

python 非常強大,這個大家都認可。現在很多自動化場景都是通過python加載第三方對應的庫,然后編寫業務邏輯自動化方式devops運維。docker給python也提供了一個非常強大的庫,名字就叫做docker。我們可以登錄官方的python sdk地址來學習認識python如何具體操作docker。

地址是:https://docker-py.readthedocs.io/en/stable/

2.1. 安裝docker python庫

$ pip install docker

2.2. 開始使用

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的命令。

2.3. 進階使用

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()????????????#?類似docker?start?傳入具體的容器id?,開啟容器

總結: 現在很多企業都已經步入自動化運維時代了,所以掌握api的運用技巧和法則是非常有必要的。上面我們大概介紹了下docker api的入門,其實你要玩得非常好,這里有很大的靈活性和復雜性,不過這里就需要你一些腳本編程方面的知識了。

推薦學習:《docker視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊8 分享