适用于: IoT Edge 1.5
重要
IoT Edge 1.5 LTS 是受支持的版本。 IoT Edge 1.4 LTS 的生命周期结束日期为 2024 年 11 月 12 日。 如果你使用的是较低的版本,请参阅更新 IoT Edge。
部署清单中的 createOptions 参数允许你在运行时配置模块容器。 此参数扩展了对模块的控制,并允许执行诸如限制模块对主机设备资源的访问或配置网络等任务。
IoT Edge 模块在 IoT Edge 设备上作为 Docker 兼容的容器运行。 Docker 提供了许多用于创建容器的选项,这些选项也适用于 IoT Edge 模块。 有关详细信息,请参阅 Docker 容器创建选项。
IoT Edge 部署清单接受 JSON 格式的创建选项。 以每个 edgeHub 模块自动包含的创建选项为例:
"createOptions": {
"HostConfig": {
"PortBindings": {
"5671/tcp": [
{
"HostPort": "5671"
}
],
"8883/tcp": [
{
"HostPort": "8883"
}
],
"443/tcp": [
{
"HostPort": "443"
}
]
}
}
}
此 edgeHub 示例使用 HostConfig.PortBindings 参数将容器上公开的端口映射到主机设备上的端口 。
如果使用适用于 Visual Studio 或 Visual Studio Code 的 Azure IoT Edge 扩展,请在 deployment.template.json 文件中以 JSON 格式编写创建选项。 然后,使用扩展生成 IoT Edge 解决方案或生成部署清单时,它会以 IoT Edge 运行时所需的格式字符串化 JSON。 例如:
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}"
重要
Azure IoT Edge Visual Studio Code 扩展处于维护模式。 iotedgedev 工具是推荐用于开发 IoT Edge 模块的工具。
使用docker inspect
命令来编写创建选项。 在开发过程中,使用 docker run <container name>
在本地运行模块。 在模块按预期方式运行后,运行 docker inspect <container name>
。 此命令以 JSON 格式输出模块详细信息。 找到配置的参数并复制 JSON。 例如:
容器创建选项支持各种方案。 下面是用于生成 IoT Edge 解决方案的最常见解决方案:
如果模块需要与 IoT Edge 解决方案外部的服务通信,但不使用消息路由进行通信,你需要将主机端口映射到模块端口。
提示
在同一设备上进行模块到模块通信不需要端口映射。 如果模块 A 需要查询模块 B 上托管的 API,无需进行任何端口映射即可实现此目的。 模块 B 需要在其 dockerfile 中公开端口。 例如,EXPOSE 8080
。 然后,模块 A 可以使用模块 B 的名称查询 API。 例如,http://ModuleB:8080/api
。
首先,确保模块内的端口公开以侦听连接。 为此,可以在 dockerfile 中使用 EXPOSE 指令。 例如,EXPOSE 8080
。 如果未指定 expose 指令,则其默认值为 TCP 协议;你也可以指定 UDP。
然后,在 Docker 容器创建选项的 HostConfig 组中使用 PortBindings 设置,将模块中公开的端口映射到主机设备上的端口 。 例如,如果在模块中公开了端口 8080,并想要将其映射到主机设备的端口 80,则 template.json 文件中的创建选项将如以下示例所示:
"createOptions": {
"HostConfig": {
"PortBindings": {
"8080/tcp": [
{
"HostPort": "80"
}
]
}
}
}
为部署清单字符串化时,配置如下所示:
"createOptions": "{\"HostConfig\":{\"PortBindings\":{\"8080/tcp\":[{\"HostPort\":\"80\"}]}}}"
声明模块可以使用多少主机资源。 此控件可确保一个模块不会消耗过多的内存或 CPU,从而阻止其他进程在设备上运行。 可以在 HostConfig 组中使用 Docker 容器创建选项来管理这些设置,包括 :
- 内存:内存限制(字节)。 例如,268435456 字节 = 256 MB。
- MemorySwap:总内存限制(内存 + 交换)。 例如,536870912 字节 = 512 MB。
- NanoCpus:以 10-9(十亿分之一)CPU 为单位的 CPU 配额。 例如,250000000 nanocpus = 0.25 CPU。
采用 template.json 格式时,这些值如以下示例所示:
"createOptions": {
"HostConfig": {
"Memory": 268435456,
"MemorySwap": 536870912,
"NanoCpus": 250000000
}
}
将最终部署清单字符串化后,这些值如以下示例所示:
"createOptions":"{\"HostConfig\":{\"Memory\":268435456,\"MemorySwap\":536870912,\"CpuPeriod\":25000}}"
如果要在 GPU 优化的虚拟机上运行 IoT Edge 模块,还可以启用 IoT Edge 模块以连接到 GPU。 若要使用现有模块执行此操作,请将一些规范添加到 createOptions
:
{"HostConfig": {"DeviceRequests": [{"Count": -1,"Capabilities": [["gpu"]]}]}}
使用 Docker 检查命令确认这些设置,以在 JSON 打印输出中查看新设置。
sudo docker inspect <YOUR-MODULE-NAME>
若要详细了解设备和虚拟机如何连接到 GPU,请参阅配置、连接和验证 GPU 的 IoT Edge 模块。
有关创建选项实际应用的更多示例,请参阅以下 IoT Edge 示例: