电子说
无处不在的物联网设备需要服务器允许“边缘”设备执行重要的任务。但是,设置服务器是一项艰巨的任务。必须满足特定应用程序的适当依赖关系。有时,需要相互依赖的软件的确切版本来满足互操作性。此外,一旦服务器经过配置和测试以适用于特定任务,就必须记录确切的配置以供将来复制。最后,不同应用程序和任务的依赖关系可能会发生冲突,可能需要完全独立的服务器进行隔离。
作为嵌入式软件工程师,构建和配置服务器以测试边缘设备上的特定功能几乎是不必要的。相反,可以利用容器技术来设置一个简单的服务器来执行单个任务。多个容器可以组合形成一组虚拟服务器,以与运行在物联网设备上的不同应用程序进行交互。在本文中,我们将介绍 Docker 在这方面提供的一些功能。
本文将重点介绍 Hawkbit,它是一个服务器端应用程序,可用于更新基于 Linux 的边缘设备;SWUpdate 名义上在边缘设备上运行以管理更新过程。由于 Hawkbit 在服务器上运行,因此最好在 Docker 映像中运行它,以避免遇到上述问题。
幸运的是,Docker 提供了Hawkbit 的标准镜像。使用 Hawkbit 运行容器的 Docker 标准调用如下:
$> docker run -d -p 8888:80 hawkbit/hawkbit-update-server
上面的docker run命令传递了-d选项,该选项指示它作为守护进程在后台运行。选项8888:80指示 Docker 将在主机(即运行 Docker 的机器)的端口 8888 上接收到的所有数据转发到 Docker 容器的端口 80。出于安全原因,建议执行从主机到 Docker 容器的“端口转发”。某些 Web 应用程序有一些常用端口,不建议在主机上打开这些端口。如果它们在主机上保持打开状态,则攻击者可以使用这些端口访问机器。相反,如果在主机上使用非标准端口(例如 8888),则安全威胁会降低。
有时,由于配置错误,Docker 容器无法按预期运行。例如,Hawkbit 有一个用于配置的 Web 界面。由于主机的网络配置,可能无法访问 Hawkbit Web 界面。以下 Docker 命令可用于实时查看 Docker 容器的日志:
$> 码头工人 PS $> docker logs -f <容器ID>
第一个命令docker ps将在一个包含以下列的表中列出所有正在运行的容器:
获取容器 ID 后,使用docker ps命令可以将其输入到docker logs -f命令,该命令将实时显示容器生成的任何日志。另一个用于解决 Docker 容器问题的常用命令是:
$> docker attach <容器ID>
此命令会将标准输出从容器转发到您的主机,并将标准输入从您的主机转发到容器。换句话说,就好像您坐在由容器执行的机器前,您可以通过键盘访问它,并且可以看到显示器上正在打印的内容。
出于安全目的,Web 应用程序的另一个常见任务是提供 HTTPS 支持。回想一下,在加密参数的初始协议之后,HTTPS 会加密客户端和服务器之间的流量。Nginx 是一个可以提供 HTTPS 支持的应用程序,并且可以与 Hawkbit 结合以通过加密连接提供 FW/SW 更新。由于 Docker 在其集线器上提供了 Nginx 映像,因此可以将其与 Hawkbit Docker 容器映像结合使用以提供单一解决方案。这可以通过 Docker Compose 来完成。Docker Compose 允许在单个文件中配置多个 Docker 容器。这些 Docker 容器代表在内部 Docker 网络上相互连接的不同机器。
配置文件通常命名为“docker-compose.yml”,并具有定义特定配置的键值对。以下是包含 Hawkbit 和 Nginx 的示例文件示例:
服务: 鹰比特: 图片:hawkbit/hawkbit-update-server 重启:总是 端口: - “8888:80” 标签: 名称:“hawkbit-test” nginx: 图片:nginx 端口: - “8443:443” 卷: -./data/nginx:/etc/nginx/conf.d
我们将把注意力集中在配置文件的结构和格式上,因为 Nginx 配置的细节超出了本文的范围。每个“Docker Compose 文件”(通常称为配置文件)都以“服务”开头,因为容器的目的是提供某种服务。然后每个容器都由一个特定的名称标识。重要的是要注意缩进很重要,因为 Docker Compose 要求文件以某种方式格式化。然后,在每个单独的容器下,一组键值对定义容器所需的配置参数。在上面的示例中,在hawkbit下,我们有以下键值对:
在nginx容器下,存在卷键值对,以指示 Docker 将主机上的特定位置挂载到 Docker 容器(这与docker run命令的-v选项相同,后者是上一篇文章中讨论过)。最后,要启动这些容器,应在与配置文件相同的位置执行以下命令:
$> 码头工人组成
就是这样!两个 docker 容器应该已启动并正在运行。
总之,Docker 提供了额外的机制,以在启动和运行 Docker 容器时启用适当的安全实践,并支持在使用 Docker 容器时可能出现的调试问题。最后,Docker Compose 是一个有用的工具,可以使用单个配置文件启动多个容器。在测试基于 IoT 的系统的应用程序时,所有这些工具都非常宝贵。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !