使用Docker容器做更多事情

无处不在的物联网设备需要服务器允许“边缘”设备执行重要的任务。但是,设置服务器是一项艰巨的任务。必须满足特定应用程序的适当依赖关系。有时,需要相互依赖的软件的确切版本来满足互操作性。此外,一旦服务器经过配置和测试以适用于特定任务,就必须记录确切的配置以供将来复制。最后,不同应用程序和任务的依赖关系可能会发生冲突,可能需要完全独立的服务器进行隔离。
作为嵌入式软件工程师,构建和配置服务器以测试边缘设备上的特定功能几乎是不必要的。相反,可以利用容器技术来设置一个简单的服务器来执行单个任务。多个容器可以组合形成一组虚拟服务器,以与运行在物联网设备上的不同应用程序进行交互。在本文中,我们将介绍 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 第一个命令docker ps将在一个包含以下列的表中列出所有正在运行的容器:
container id:容器的哈希值,将用于任何需要“容器 id”的后续命令。 image:用于运行 docker 容器的镜像名称。在此示例中,这将是“hawkbit/hawkbit-update-server”。 command:容器正在运行的命令。在此示例中,这是用于运行 hawkbit 服务器的命令。 created:自容器创建以来经过的时间。 status:容器的状态,包括经过的时间。在此示例中,显示的时间将与created下列出的时间相同。 ports:暴露给容器的端口。在本例中,应显示“80”。 names:赋予特定实例的唯一名称。 获取容器 id 后,使用docker ps命令可以将其输入到docker logs -f命令,该命令将实时显示容器生成的任何日志。另一个用于解决 docker 容器问题的常用命令是:
$> docker attach 此命令会将标准输出从容器转发到您的主机,并将标准输入从您的主机转发到容器。换句话说,就好像您坐在由容器执行的机器前,您可以通过键盘访问它,并且可以看到显示器上正在打印的内容。
出于安全目的,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下,我们有以下键值对:
image:指示 docker 它应该使用哪个容器镜像。 restart:如果容器因任何原因停止,指示 docker 重新启动容器。 端口:指示 docker 如何将某些端口从主机转发到容器(如前所述)。 标签: docker 在启动容器时应该使用的实例名称。 在nginx容器下,存在卷键值对,以指示 docker 将主机上的特定位置挂载到 docker 容器(这与docker run命令的-v选项相同,后者是上一篇文章中讨论过)。最后,要启动这些容器,应在与配置文件相同的位置执行以下命令:
$> 码头工人组成 就是这样!两个 docker 容器应该已启动并正在运行。
总之,docker 提供了额外的机制,以在启动和运行 docker 容器时启用适当的安全实践,并支持在使用 docker 容器时可能出现的调试问题。最后,docker compose 是一个有用的工具,可以使用单个配置文件启动多个容器。在测试基于 iot 的系统的应用程序时,所有这些工具都非常宝贵。


航顺HK32U1xx9系列MCU的应用场景介绍
Tempus DRA 套件加速先进节点技术
模数混合电路的电源和接地布局原则
15000颗COF芯片正式量产下线 欣盛成为我国唯一一家集多种芯片技术于一体的企业
瑞为“数智哨兵”产品充分适应不同场景的使用需求
使用Docker容器做更多事情
解决无线网络设计的多层约束
全方面解读东南DX7科技配置
SOC芯片市场,三大发展方向及技术发展趋势
HDI PCB一阶和二阶和三阶依靠什么来区分
疫情之年新能源汽车为何销量走好
最新技术:音频降噪IC
小白从0学习CW32的第一天(搭建软件开发环境)
2019年中国集成电路产业现状,同比下滑12.1%
荣耀手环5i评测 一切为了更便捷的改进
开源发展与开发者专题 | 通明智云总经理吴若松:NJet云原生应用引擎自主创新之路
实验证明:AI机器感知能力相近甚至超越人类感知能力
433MHz无线模块偶尔无法收发数据的原因是什么
USB 2.0和USB 3.0的基本区别对比分析
博通公司宣布推出蓝牙智能芯片