Docker 外掛程式 API
Docker 外掛程式是 Docker Engine 的外部程序擴充功能,可為 Docker Engine 新增功能。
本文檔說明 Docker Engine 外掛程式 API。如需檢視 Docker Engine 管理的外掛程式資訊,請參閱Docker Engine 外掛程式系統。
本頁面適用於想要開發自己的 Docker 外掛程式的人員。如果您只想瞭解或使用 Docker 外掛程式,請參閱這裡。
什麼是外掛程式
外掛程式是在與 Docker Daemon 相同或不同的主機上執行的程序,它會將檔案放置在 Daemon 主機上外掛程式探索中所述的外掛程式目錄之一來註冊自身。
外掛程式具有方便閱讀的名稱,這些名稱是簡短的小寫字串。例如,flocker
或 weave
。
外掛程式可以在容器內部或外部執行。目前建議在容器外部執行它們。
外掛程式探索
每當使用者或容器嘗試按名稱使用外掛程式時,Docker 就會在外掛程式目錄中尋找它們來探索外掛程式。
可以將三種類型的檔案放入外掛程式目錄中。
.sock
檔案是 Unix 網域 Socket。.spec
檔案是包含 URL 的文字檔,例如unix:///other.sock
或tcp://localhost:8080
。.json
檔案是包含外掛程式的完整 JSON 規格的文字檔。
具有 Unix 網域 Socket 檔案的外掛程式必須與 Docker Daemon 在同一個主機上執行。如果您指定遠端 URL,則具有 .spec
或 .json
檔案的外掛程式可以在不同的主機上執行。
Unix 網域 Socket 檔案必須位於 /run/docker/plugins
下,而規格檔案可以位於 /etc/docker/plugins
或 /usr/lib/docker/plugins
下。
檔案的名稱(不包括副檔名)決定外掛程式名稱。
例如,flocker
外掛程式可能會在 /run/docker/plugins/flocker.sock
建立 Unix Socket。
如果您想將定義彼此隔離,您可以將每個外掛程式定義到一個單獨的子目錄中。例如,您可以在 /run/docker/plugins/flocker/flocker.sock
下建立 flocker
Socket,並且只將 /run/docker/plugins/flocker
掛載到 flocker
容器內。
Docker 總是先在 /run/docker/plugins
中搜尋 Unix Socket。如果 Socket 不存在,它會檢查 /etc/docker/plugins
和 /usr/lib/docker/plugins
下的規格或 JSON 檔案。目錄掃描會在找到第一個具有指定名稱的外掛程式定義後立即停止。
JSON 規格
這是外掛程式的 JSON 格式
{
"Name": "plugin-example",
"Addr": "https://example.com/docker/plugin",
"TLSConfig": {
"InsecureSkipVerify": false,
"CAFile": "/usr/shared/docker/certs/example-ca.pem",
"CertFile": "/usr/shared/docker/certs/example-cert.pem",
"KeyFile": "/usr/shared/docker/certs/example-key.pem"
}
}
TLSConfig
欄位是選用的,只有在存在此設定時才會驗證 TLS。
外掛程式生命週期
插件應該在 Docker 之前啟動,在 Docker 之後停止。例如,在為支援 systemd
的平台打包插件時,您可以使用 systemd
依賴關係 來管理啟動和關閉順序。
升級插件時,您應該先停止 Docker 守護行程,升級插件,然後重新啟動 Docker。
外掛程式啟動
當插件第一次被引用時——使用者透過名稱引用它(例如 docker run --volume-driver=foo
)或已設定為使用插件的容器正在啟動——Docker 會在插件目錄中尋找指定的插件,並透過握手來啟用它。請參閱下面的握手 API。
插件不會在 Docker 守護行程啟動時自動啟用。它們只會在需要時,也就是按需延遲啟用。
Systemd Socket 啟動
插件也可以由 systemd
進行 Socket 啟用。官方的 插件助手