亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 工业技术

Node-RED 和 Docker 入门

Docker 容器可用于在 PLCnext 设备上运行 node-RED 服务器。虽然这里描述的另一种方法要快一些。使用 OCI 容器具有一些优势。例如,当为应用程序重复使用相同的包时,构建标准映像并从 Docker 中心下载它会很有用。 Docker也可以用来在我们需要的时候启动和停止node-red服务器。

这个博客将解释这一点。首先,我将指导您完成 Docker 的安装过程,我们将检查安装。我们将构建一个自定义镜像,其中包含我们喜欢的软件包,预装了一个 Dockerfile,并从我们新创建的镜像创建一个容器。最后,我们将确保我们的容器将在控制器启动时启动并将我们的镜像推送到 Dockerhub。

安装 Balena – 引擎

当我说 Docker 容器可用于在 PLCnext 设备上运行 node-RED 运行时时,我有点撒谎。如您所见,我们使用 Balena 引擎作为运行容器的引擎,更具体地说,我们将使用 OCI(Open Container Initiative)容器。通过命名法为我们带来了一个 Makersblog,但在此博客末尾的进一步阅读部分,我为感兴趣的人添加了一些链接。

安装过程相当简单,可以在这里找到完整的参考,但出于实用性的原因,命令也在下一节中给出。
确保您以 root 用户身份登录,要创建新的 root 密码,请在 shell 中键入以下命令并输入您的管理员密码,然后输入两次新的 root 密码。

sudo passwd root

输入 su 后跟新创建的密码,以 root 用户身份登录。

克隆 git 仓库并进入新文件夹

git clone https://github.com/PLCnext/Docker_GettingStarted.git
cd Docker_GettingStarted

使设置脚本可执行并执行所述脚本。

chmod +x setup.sh
./setup.sh

从您的容器中获取互联网访问权限

有时在安装过程中,nft 表设置错误。幸运的是,这是一个简单的修复。
完整的参考指南可以在这里找到,但下面给出了进展的简短描述。

在你的 shell 类型中

ifconfig

弹出网络接口的配置。其中一个叫Balena,记下这个接口的Inet地址。
它应该是这样的:172.17.0.1 

在您的 shell 中输入以下命令,并将上一步中收到的 Inet 地址与脚本中的第二行进行比较。
这两个地址应该是一样的,如果是的话可以进入下一节。
如果不是,请在 shell 中转换下一个命令并更改第二行的地址以匹配 ifconfig 收到的地址。

nano /etc/nftables/balena.nft

停止并启动 balena-engine-daemon 以重新加载 nft 表。

/etc/init.d/balena stop
/etc/init.d/balena start

我的第一个容器

要下载你的第一个容器,请使用 next 命令,标志将在稍后解释,现在不用担心它们。现在我们将下载一个没有 costum 包的节点红色容器。如果你不需要定制包,你可以在这里停下来浏览控制器的 1880 端口。

balena-engine run -d -p 1880:1880 --name nodered --restart always nodered/node-red

Docker 中心

上一节中使用的 arm32v7/debian 镜像是从 Docker Hub 下载的。
Docker Hub 本质上是一个收集容器镜像并可以轻松下载的地方。
我可以推荐组织 arm32v7,该组织创建与 AXC F 2152 架构兼容的图像。

node-red 组织创建了一个与 AXC F 2152 兼容的镜像,我们将在下一节中使用这个镜像,但首先我想提一下,如果你会经常使用容器,你应该在 Docker Hub 上创建一个帐户并使用它的存储库。创建免费帐户后,您将获得几乎无限的公共存储库和一个私有存储库。我有一段时间拒绝使用 Docker Hub,但它花费了我很多时间。
在这篇博客的最后一节中,我将通过展示如何登录重新标记图像并将图像推送到 Docker Hub 来稍微平缓使用 Docker Hub 的学习曲线。

Dockerfile

docker 文件在某种意义上是 docker 镜像的秘诀。在这篇博客中,我们将使用 Dockerfile 来创建我们自己的 node-red 镜像,并安装我们需要的包。
Dockerfile 的第一行几乎总是 FROM 命令。使用这个命令,我们定义了一个基础镜像,我们将从这里构建我们自己的镜像。
在 FROM 语句之后,我们开始构建我们的镜像。在 Dockerfile 中可以使用很多可能的命令,但这里我们只使用 RUN。
进一步阅读部分提供了 Dockerfile 参考链接。

RUN 语句将执行我们正在构建的容器内的命令。
所以要安装一个新的包,例如我们声明的 SNMP 包: RUN npm install node-red-node-snmp

理论结束后,让我们构建一个 Dockerfile。希望您仍处于 SSH 会话中(确保您回到 AXC F 2152 而不是两节前的 debian 包含!)。
您可以使用 nano 创建 Dockerfile 并将内容复制粘贴到新文件中。保存(ctrl + s)并退出(ctrl + x).nano Dockerfile

FROM nodered/node-red:latest-minimal
RUN npm install node-red-node-snmp

现在是时候建立我们的新形象了!

balena-engine build . --tag myimage

当您收到图像已成功标记的消息时,您已经构建了您的第一个图像!
要查看您刚刚构建的图像,请使用以下命令:balena-engine images

运行我们的新图像

最后,我们准备好运行我们的镜像并从中创建一个容器!
在 shell 中强制转换以下命令以交互运行容器。
交互式意味着我们可以在终端中看到容器内发生的事情。
对面是分离的,用标志-d标记

balena-engine run -it -p 1880:1880 --name nodered myimage

要退出容器并使其保持运行,请使用 ctrl + p ctrl +q
当您浏览到控制器的 IP 地址和端口 1880 时,节点红色环境显示,我们看到已安装 snmp 包!

在启动时启动映像并在 docker run flags 上入门

每次重启 AXC F 2152 时手动启动容器是不切实际的。幸运的是,我们可以告诉 Docker 为我们启动它,而且很容易!
只需使用下面列出的命令。这也是更好地了解所使用的 docker 标志的时候了。对于初学者来说,标志是我们在命令之后给出的东西,以 - 或 - 开头。
到目前为止,我们只看到了 -it 以交互方式运行容器和 -d 以分离方式运行容器(在后台)。

标志 -p 将容器的端口映射到主机的端口。首先是主机的端口号,然后是容器的端口号。
我们可以使用 –name 标志为容器命名。当您使用 balena-engine ps 列出所有活动容器或使用 balena-engine ps -a 列出所有容器时,将显示此名称。
当没有使用 –name 标志时,balena-daemon 将为容器分配一个随机名称。

最后但并非最不重要的一点是,可以使用 –restart 标志将重启策略分配给容器。
可以在进一步阅读中列出的参考链接中找到可能的设置。
现在——重新启动总是可以解决问题的!我们的命令是:

balena-engine run -it -p 1880:1880 --name nodered --restart always myimage

推送到 Docker 中心

当您不想在不同的控制器上使用您的图像时。将图像上传到 Docker Hub 是个好主意。
假设您已经有一个帐户并创建了一个 docker 存储库,我们将继续。首先,我们需要登录我们的帐户。这可以通过输入 balena-engine login 然后输入您的用户名和密码来完成。现在可以从私有存储库下载图像并将您的图像推送到 Docker 中心。

要将您的图像推送到 Docker 集线器,重要的是要正确命名。当我创建了一个存储库 myrep 并且我的用户帐户是 myaccount 时,图像的名称应该是 myaccount/myrep。
如果在构建镜像时没有这样命名,则必须使用 balena-engine tag oldimagetag newimagetag 重新标记镜像。在我们的例子中,这将是:

balena-engine tag myimage myaccount/myrep  

当没有更多定义时,最好获得最新的标签。可以在标签处添加 :和标签名称。例如:

balena-engine tag myimage myaccount/myrep:alabel 

唯一剩下的就是使用以下命令将我们的图像推送到 Docker 中心:

balena-engine push myaccount/myrep

进一步阅读和参考


https://github.com/PLCnext/Docker_GettingStarted/blob/master/getting-started/Part-01/README.md

https://www.docker.com/resources/what-c​​ontainer

https://docs.docker.com/engine/reference/builder/

https://hub.docker.com/

https://hub.docker.com/r/nodered/node-red


工业技术

  1. 陶瓷 3D 打印入门
  2. 认识基本染料!
  3. 熟悉工业染料和颜料!
  4. TJBot 入门
  5. 开始使用 RAK 831 Lora Gateway 和 RPi3
  6. RAK831 LoRa 网关和 RPi3 入门
  7. 坚持不懈地领导
  8. 保险业人工智能入门:入门指南
  9. Arduino教程01:入门
  10. My.Cat.com 入门
  11. 带有 docker 提示和最佳实践的 Node-Red
  12. 在 PLCnext 上开始使用 Go