用你的Docker容器做更多

文章:穆罕默德比尔

设置服务器是一个令人生畏的任务。必须满足特定应用程序的适当依赖项。有时,需要确切的相互依存软件的版本来满足互操作性......

IOT设备的u特异性已经需要服务器,以允许“边缘”设备执行非琐碎的任务。但是,设置服务器是一个令人生畏的任务。必须满足特定应用程序的适当依赖项。有时,需要确切的相互依存软件的版本来满足互操作性。此外,一旦配置了服务器并测试了为特定任务工作,必须记录确切的配置以备将来的复制。最后,不同应用程序和任务的依赖关系可能会发生冲突,并且可能需要完全独立的服务器进行隔离。

作为嵌入式软件工程师,构建和配置服务器以测试边缘设备上的特定功能通常是不必要的。相反,可以利用集装箱技术来设置简单的服务器以执行单一任务。可以组合多个容器以形成一组虚拟服务器,以与在线设备上运行的不同应用程序进行交互。在本文中,我们将介绍Docker在这方面提供的一些功能。

这篇特殊的文章将集中在Hawkbit上,这是一个可用于更新基于Linux的边缘设备的服务器端应用程序;swupdate是名义上在边缘设备上运行以管理更新过程。由于Hawkbit在服务器上运行,因此在Docker图像中运行它是理想的,以避免运行到上面概述的问题。

幸运的是,Docker提供标准霍比特的图像。使用Hawkbit运行容器的Docker标准调用如下:

$> docker运行-d -p 8888:80 hawkbit / hawkbit-update-server

以上Docker运行命令通过了-D.选项,指示它作为守护程序在后台运行。选项8888:80,指示Docker转发在主机(即运行Docker)的端口8888上接收的所有数据到Docker容器的端口80。出于安全原因,建议将“端口转发”从主机执行“端口转发”到Docker容器。某些Web应用程序使用的常见端口,建议不要在主机上打开这些端口。如果它们在主机上留下打开,则攻击者可以使用这些端口访问计算机的访问权限。相反,如果在主机上使用非标准端口(例如8888),则减少了安全威胁。

有时,由于误整除,Docker容器不会按预期执行。例如,Hawkbit有一个用于配置的Web界面。由于主机的网络配置,Hawkbit Web界面可能无法访问。以下Docker命令可用于实时查看Docker容器的日志:

$> docker ps $> docker logs -f <容器ID>

第一个命令,Docker PS.,将列出具有以下列的表中的所有运行容器:

  • 容器ID:容器的哈希,将用于所需“容器ID”的任何后续命令。
  • 图像:用于运行Docker容器的图像名称。在此示例中,这将是“Hawkbit / Hawkbit-Update-Server”。
  • 命令:Container正在运行的命令。在此示例中,这是用于运行Hawkbit服务器的命令。
  • 创建:自集装箱创建以来经过的时间量。
  • 地位:容器的状态,包括经过的时间。在此示例中,显示的时间将与下列限制相同创造了
  • 港口:暴露于容器的端口。在此示例中,应显示“80”。
  • 名称:给特定实例的唯一名称。

检索容器ID后,使用该容器IDDocker PS.命令,它可以输入到docker logs -f.命令,它将实时显示容器生成的任何日志。用于解决Docker容器问题的另一个常见命令是:

$> docker附加<容器ID>

此命令将从容器转发到主机的stdout,它将将stdin从主机转发到容器。换句话说,就好像你坐在容器执行的机器前方,并且您有键盘访问它,并且可以看到显示器上打印的内容。

具有Web应用程序的另一个常见任务是提供HTTPS支持,以供安全。回想一下,在加密参数的初始协议之后,HTTPS加密客户端和服务器之间的流量。nginx是一个可以提供HTTPS支持的应用程序,可以与Hawkbit组合,以通过加密连接提供FW / SW更新。由于Docker在其集线器上提供Nginx图像,因此它可以与Hawkbit Docker容器图像组合以提供单数解决方案。这可以通过Docker组成来完成。Docker Compose允许在单个文件中配置多个Docker容器。这些Docker容器代表在内部Docker网络上彼此连接的独特机器。

配置文件通常名为“docker-compose.yml”,并且具有定义特定配置的键值对。以下是Hawkbit和Nginx的示例文件的示例:

服务:Hawkbit:图片:Hawkbit / Hawkbit-Update-Server Restart:始终端口: - “8888:80”标签:名称:“Hawkbit-test”nginx:图片:nginx端口: - “8443:443”卷: - 。/data/nginx:/etc/nginx/conf.d.

我们将注意我们注意于配置文件的结构和格式,因为nginx配置的细节超出了本文的范围。每个“Docker Compose File”,即配置文件通常被称为“服务”,以“服务”开始,因为容器的目的是提供某种服务。然后通过特定名称识别每个容器。值得注意的是,缩进很重要,因为Docker撰写要求将文件格式化为某种方式。然后,在每个单独的容器下,一组键值对定义容器的所需配置参数。在上面的例子中霍比特,我们有以下键值对:

  • 图像:指示Docker它应该使用的容器图像。
  • 重新开始:如果出于任何原因,请指示Docker重新启动容器。
  • 港口:指示Docker如何将某些端口从主机转发到容器(如前所述)。
  • 标签:在启动容器时,Docker应使用的实例名称。

在下面nginx.容器,呢体积键值对存在,指示Docker将主机上的特定位置安装到Docker容器(这与)-v.选择的选项Docker运行命令,讨论过上一篇文章)。最后,要启动这些容器,应在与配置文件的同一位置执行以下命令:

$> Docker-Compose Up

那就是它!两个码头容器应升起并运行。

总之,Docker提供了额外的机制,可在启动和运行Docker容器时启用适当的安全实践,并支持使用Docker容器时可能出现的调试问题。最后,Docker Compose是一种有用的工具,可以使用单个配置文件启动多个容器。所有这些工具在测试基于IOT的系统的应用时都是非常宝贵的。

- Mohammed Billoo是MAB Labs,LLC的创始人。

发表评论