这篇文章开始继续剑走偏锋,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
事前准备:安装节点
可以使用社区提供的 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 地址即可:
执行结果示例如下所示:
事前准备:安装节点
可以使用社区提供的 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 节点进行镜像相关的操作等。
还有一种更为简单的方式就是将 docker 客户端直接拷贝至 node-red 的容器中直接通过,剩余的全部通过 exec 节点即可通过本地客户端进行操作。
事前准备:拷贝 docker 客户端
事前下载 docker 客户端的二进制文件,然后拷贝至 node-red 容器之中
liumiaocn:nodered liumiao$ docker exec nodered docker versio
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"]]}] 1 执行结果如下所示:
从上述执行结果中可以看到:
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"]]}]
部署然后触发即可看到下图所示的正常执行的结果了
来源:
nodered 澳门人威尼斯3966官网:
noderedgithub:
nodered 英文社区:
nodered 中文社区:https://www.iotschool.com/topics/node81
nodered 中文社区 qq 群:8604461