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"]]}]

部署然后触发即可看到下图所示的正常执行的结果了
在这里插入图片描述

发布了1143 篇原创文章 · 获赞 1364 · 访问量 415万+

猜你喜欢

转载自blog.csdn.net/liumiaocn/article/details/104965769