Node-RED使用指南:27:使用docker節點操作容器

在這裏插入圖片描述
這篇文章開始繼續劍走偏鋒,Node-RED設計使用的場景是IoT,但是作爲一個流編排引擎,顯然它能做的事情更多,比如使用容器化的方式進行構建、打包、部署等操作也是可行的,這篇文章繼續介紹在Node-RED中操作容器的幾種方式。

環境準備

  • Node-RED
    以容器方式啓動Node-RED服務,啓動命令如下所示:

啓動命令:docker run -it -p 1880:1880 -v $PWD/data:/data -e TZ=Asia/Shanghai --name nodered -d nodered/node-red:1.0.4

方式1: 使用node-red-contrib-docker-stream節點

事前準備:安裝節點

可以使用社區提供的node-red-contrib-docker-stream節點對docker進行操作,安裝方式可以參看:

事前準備:打開Docker的Remote API

打開Docker的Remote API支持,缺省在Linux下是開啓的,MacOS的開啓方法可以參看:

功能驗證

node-red-contrib-docker-stream節點的功能有限,僅能監控所連接的Docker Daemon的事件信息,創建如下的簡單flow:

[{"id":"e81fda2f.b04c78","type":"docker","z":"69f65762.fb3bd8","host":"192.168.31.242","port":2375,"x":280,"y":140,"wires":[["9151ddcb.d2e18"]]}]

設定如下所示,注意由於本文的Node-RED是容器方式啓動的,Docker Host不能寫成localhost,寫成實際的可訪問的Docker Remote API的宿主機器的IP地址即可:
在這裏插入圖片描述
執行結果示例如下所示:
在這裏插入圖片描述

方式2: 使用node-red-contrib-dockerode節點

事前準備:安裝節點

可以使用社區提供的node-red-contrib-dockerode節點對docker進行操作,安裝方式可以參看:

事前準備:打開Docker的Remote API

打開Docker的Remote API支持,缺省在Linux下是開啓的,MacOS的開啓方法可以參看:

功能驗證

此節點的功能要多一些,同時也包含node-red-contrib-docker-stream提供的事件監控的功能,比如使用如下flow即可實現類似的功能

[{"id":"28ff7f65.afc22","type":"docker-events","z":"69f65762.fb3bd8","name":"","config":"1724fb4d.bcd8b5","x":300,"y":280,"wires":[["4201b42d.d7c7ec"]]},{"id":"1724fb4d.bcd8b5","type":"docker-configuration","z":"","host":"192.168.31.242","port":"2375"}]

執行結果示例如下所示:
在這裏插入圖片描述
當然除了Events節點之外,還可以使用其他的不同的節點,比如Containers節點進行容器相關的操作,使用Images節點進行鏡像相關的操作等。
在這裏插入圖片描述

方式3: 使用docker客戶端的方式

還有一種更爲簡單的方式就是將docker客戶端直接拷貝至Node-RED的容器中直接通過,剩餘的全部通過exec節點即可通過本地客戶端進行操作。

事前準備:拷貝docker客戶端

事前下載docker客戶端的二進制文件,然後拷貝至Node-RED容器之中

liumiaocn:nodered liumiao$ docker exec nodered docker version
OCI runtime exec failed: exec failed: container_linux.go:346: starting container process caused "exec: \"docker\": executable file not found in $PATH": unknown
liumiaocn:nodered liumiao$ docker cp docker nodered:/usr/local/bin
liumiaocn:nodered liumiao$ docker exec nodered docker version
Client:
 Version:      1.13.1
 API version:  1.26
 Go version:   go1.7.5
 Git commit:   092cba3
 Built:        Wed Feb  8 08:47:51 2017
 OS/Arch:      linux/amd64
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
liumiaocn:nodered liumiao$ 

事前準備:打開Docker的Remote API

打開Docker的Remote API支持,缺省在Linux下是開啓的,MacOS的開啓方法可以參看:

功能驗證

使用如下簡單方式構成flow,用於確認docker版本信息
在這裏插入圖片描述

[{"id":"4e1a2094.f8dc6","type":"exec","z":"8e91d66c.a64538","command":"docker version","addpay":false,"append":"","useSpawn":"false","timer":"","oldrc":false,"name":"","x":440,"y":180,"wires":[["d26924a.21bf3d8"],["d26924a.21bf3d8"],["d26924a.21bf3d8"]]}]

執行結果如下所示:
在這裏插入圖片描述
從上述執行結果中可以看到:

  • docker客戶端可以通過docker version確認版本
  • 但是無法確認服務器端版本,因爲沒有正確連接

可以通過多種方式設定DOCKER_HOST,這裏使用最爲簡單的一種,直接在命令行中設定,json格式的flow信息如下所示:

[{"id":"63928d2a.510e94","type":"inject","z":"8e91d66c.a64538","name":"觸發器","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":130,"y":180,"wires":[["4e1a2094.f8dc6"]]}]

部署然後觸發即可看到下圖所示的正常執行的結果了
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章