?
本文檔使用 php中文網(wǎng)手冊(cè) 發(fā)布
安裝和使用插件
開發(fā)一個(gè)插件
調(diào)試插件
Docker Engine 的插件系統(tǒng)允許您使用 Docker Engine 安裝,啟動(dòng),停止和移除插件。
有關(guān) Docker Engine 1.12及更早版本中提供的傳統(tǒng)插件系統(tǒng)的信息,請(qǐng)參閱了解傳統(tǒng) Docker 引擎插件。
注意:Windows 守護(hù)程序目前不支持 Docker Engine 托管插件。
插件以 Docker 鏡像的形式發(fā)布,可以托管在 Docker Hub 或私有注冊(cè)表中。
要安裝插件,請(qǐng)使用docker plugin install
從 Docker Hub 或您的私人注冊(cè)表中提取插件的命令,并在必要時(shí)提示您授予權(quán)限或功能,并啟用該插件。
要檢查已安裝插件的狀態(tài),請(qǐng)使用該docker plugin ls
命令。成功啟動(dòng)的插件在輸出中列為啟用。
在安裝插件之后,您可以將其用作另一個(gè) Docker 操作的選項(xiàng),例如創(chuàng)建卷。
在以下示例中,您將安裝sshfs
插件,驗(yàn)證它是否已啟用,并使用它來創(chuàng)建卷。
注意:本示例僅用于說明目的。創(chuàng)建卷后,在檢查卷時(shí),遠(yuǎn)程主機(jī)的SSH密碼將作為純文本公開。您應(yīng)該在完成示例后立即刪除該卷。
安裝sshfs
插件。$ docker 插件安裝 vieux / sshfs 插件“vieux / sshfs”正在請(qǐng)求以下權(quán)限: - network:host - capabilities:CAP_SYS_ADMIN 您是否授予上述權(quán)限?y / N y vieux / sshfs 該插件請(qǐng)求2個(gè)權(quán)限:
- It needs access to the `host` network.- It needs the `CAP_SYS_ADMIN` capability, which allows the plugin to run the `mount` command.
檢查插件是否在輸出中啟用docker plugin ls
。$ docker plugin ls ID名稱標(biāo)簽說明已啟用69553ca1d789 vieux / sshfs最新sshfs
插件true
使用插件創(chuàng)建一個(gè)卷。本示例將/remote
主機(jī)上的目錄掛載1.2.3.4
到名為的卷中sshvolume
。該卷現(xiàn)在可以安裝到容器中。$ docker volume create \ -d vieux / sshfs \ --name sshvolume \ -o sshcmd=user@1.2.3.4:/ remote \ -o password = $(cat file_containing_password_for_remote_host)sshvolume
確認(rèn)卷已成功創(chuàng)建。$ docker卷ls DRIVER名稱vieux / sshfs sshvolume
啟動(dòng)一個(gè)使用該卷的容器sshvolume
。$ docker run --rm -v sshvolume:/ data busybox ls / data <機(jī)器上的/ remote的內(nèi)容1.2.3.4>
刪除卷sshvolume
docker卷rm sshvolume sshvolume要禁用某個(gè)插件,請(qǐng)使用該docker plugin disable
命令。要完全刪除它,請(qǐng)使用該docker plugin remove
命令。有關(guān)其他可用的命令和選項(xiàng),請(qǐng)參閱命令行參考。
rootfs
目錄代表插件的根文件系統(tǒng)。在這個(gè)例子中,它是從 Dockerfile 創(chuàng)建的:
注意:
/run/docker/plugins
目錄在插件的文件系統(tǒng)內(nèi)部用于 docker 與插件進(jìn)行通信。
$ git clone https://github.com/vieux/docker-volume-sshfs $ cd docker-volume-sshfs $ docker build -t rootfsimage .$ id=$(docker create rootfsimage true) # id was cd851ce43a403 when the image was created $ sudo mkdir -p myplugin/rootfs $ sudo docker export "$id" | sudo tar -x -C myplugin/rootfs $ docker rm -vf "$id"$ docker rmi rootfsimage
config.json
文件描述了該插件。請(qǐng)參閱插件配置參考。
考慮下面的config.json
文件。
{"description": "sshFS plugin for Docker","documentation": "https://docs.docker.com/engine/extend/plugins/","entrypoint": ["/docker-volume-sshfs"],"network": { "type": "host" },"interface" : { "types": ["docker.volumedriver/1.0"], "socket": "sshfs.sock"},"linux": {"capabilities": ["CAP_SYS_ADMIN"]}}
這個(gè)插件是一個(gè)音量驅(qū)動(dòng)程序。它需要一個(gè)host
網(wǎng)絡(luò)和CAP_SYS_ADMIN
能力。它取決于/docker-volume-sshfs
入口點(diǎn)并使用/run/docker/plugins/sshfs.sock
套接字與Docker引擎進(jìn)行通信。這個(gè)插件沒有運(yùn)行時(shí)參數(shù)。
通過運(yùn)行docker plugin create <plugin-name> ./path/to/plugin/data
插件數(shù)據(jù)包含插件配置文件config.json
和子目錄中的根文件系統(tǒng),可以創(chuàng)建一個(gè)新的插件rootfs
。
之后,插件<plugin-name>
將顯示在docker plugin ls
。可以使用插件將插件推送到遠(yuǎn)程注冊(cè)表docker plugin push <plugin-name>
。
插件的 stdout 被重定向到 dockerd 日志。這些條目有一個(gè)plugin=<ID>
后綴。以下是docker f52a3df433b9aceee436eaada0752f5797aab1de47e5485f1690a073b860ff62
守護(hù)程序日志中 pluginID 及其相應(yīng)日志條目的幾個(gè)命令示例。
$ docker plugin install tiborvass/sample-volume-plugins INFO[0036] Starting... Found 0 volumes on startup plugin=f52a3df433b9aceee436eaada0752f5797aab1de47e5485f1690a073b860ff62
$ docker volume create -d tiborvass/sample-volume-plugins samplevol INFO[0193] Create Called... Ensuring directory /data/samplevol exists on host... plugin=f52a3df433b9aceee436eaada0752f5797aab1de47e5485f1690a073b860ff62 INFO[0193] open /var/lib/docker/plugin-data/local-persist.json: no such file or directory plugin=f52a3df433b9aceee436eaada0752f5797aab1de47e5485f1690a073b860ff62 INFO[0193] Created volume samplevol with mountpoint /data/samplevol plugin=f52a3df433b9aceee436eaada0752f5797aab1de47e5485f1690a073b860ff62 INFO[0193] Path Called... Returned path /data/samplevol plugin=f52a3df433b9aceee436eaada0752f5797aab1de47e5485f1690a073b860ff62
$ docker run -v samplevol:/tmp busybox sh INFO[0421] Get Called... Found samplevol plugin=f52a3df433b9aceee436eaada0752f5797aab1de47e5485f1690a073b860ff62 INFO[0421] Mount Called... Mounted samplevol plugin=f52a3df433b9aceee436eaada0752f5797aab1de47e5485f1690a073b860ff62 INFO[0421] Path Called... Returned path /data/samplevol plugin=f52a3df433b9aceee436eaada0752f5797aab1de47e5485f1690a073b860ff62 INFO[0421] Unmount Called... Unmounted samplevol plugin=f52a3df433b9aceee436eaada0752f5797aab1de47e5485f1690a073b860ff62
docker-runc
,默認(rèn)的 docker 容器運(yùn)行時(shí)可用于調(diào)試插件。如果插件日志被重定向到文件,這特別有用。
$ docker-runc list ID PID STATUS BUNDLE CREATED f52a3df433b9aceee436eaada0752f5797aab1de47e5485f1690a073b860ff62 2679 running /run/docker/libcontainerd/f52a3df433b9aceee436eaada0752f5797aab1de47e5485f1690a073b860ff622017-02-06T21:53:03.031537592Z r
$ docker-runc exec f52a3df433b9aceee436eaada0752f5797aab1de47e5485f1690a073b860ff62 cat /var/log/plugin.log
如果插件具有內(nèi)置的 shell,那么可以按照如下方式執(zhí)行插件:
$ docker-runc exec -t f52a3df433b9aceee436eaada0752f5797aab1de47e5485f1690a073b860ff62 sh
要驗(yàn)證 docker 守護(hù)程序與之通信的插件 API 套接字是否響應(yīng),請(qǐng)使用 curl。在本例中,我們將使用 curl 7.47.0 從 docker 主機(jī)到卷和網(wǎng)絡(luò)插件進(jìn)行 API 調(diào)用,以確保插件正在偵聽所述套接字。對(duì)于運(yùn)行良好的插件,這些基本要求應(yīng)該可以工作。請(qǐng)注意,插件套接字在主機(jī)下可用/var/run/docker/plugins/<pluginID>
curl -H "Content-Type: application/json" -XPOST -d '{}' --unix-socket /var/run/docker/plugins/e8a37ba56fc879c991f7d7921901723c64df6b42b87e6a0b055771ecf8477a6d/plugin.sock http:/VolumeDriver.List{"Mountpoint":"","Err":"","Volumes":[{"Name":"myvol1","Mountpoint":"/data/myvol1"},{"Name":"myvol2","Mountpoint":"/data/myvol2"}],"Volume":null}
curl -H "Content-Type: application/json" -XPOST -d '{}' --unix-socket /var/run/docker/plugins/45e00a7ce6185d6e365904c8bcf62eb724b1fe307e0d4e7ecc9f6c1eb7bcdb70/plugin.sock http:/NetworkDriver.GetCapabilities{"Scope":"local"}
當(dāng)使用 curl 7.5或更高版本時(shí),URL應(yīng)該是表單的形式http://hostname/APICall
,其中hostname
是安裝插件的有效主機(jī)名,并且APICall
是對(duì)插件 API 的調(diào)用。
例如, http://localhost/VolumeDriver.List