使用Docker容器做更多事情

电子说

1.3w人已加入

描述

无处不在的物联网设备需要服务器允许“边缘”设备执行重要的任务。但是,设置服务器是一项艰巨的任务。必须满足特定应用程序的适当依赖关系。有时,需要相互依赖的软件的确切版本来满足互操作性。此外,一旦服务器经过配置和测试以适用于特定任务,就必须记录确切的配置以供将来复制。最后,不同应用程序和任务的依赖关系可能会发生冲突,可能需要完全独立的服务器进行隔离。

作为嵌入式软件工程师,构建和配置服务器以测试边缘设备上的特定功能几乎是不必要的。相反,可以利用容器技术来设置一个简单的服务器来执行单个任务。多个容器可以组合形成一组虚拟服务器,以与运行在物联网设备上的不同应用程序进行交互。在本文中,我们将介绍 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将在一个包含以下列的表中列出所有正在运行的容器:

  • 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 <容器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下,我们有以下键值对:

  • image:指示 Docker 它应该使用哪个容器镜像。
  • restart:如果容器因任何原因停止,指示 Docker 重新启动容器。
  • 端口:指示 Docker 如何将某些端口从主机转发到容器(如前所述)。
  • 标签: Docker 在启动容器时应该使用的实例名称。

nginx容器下,存在键值对,以指示 Docker 将主机上的特定位置挂载到 Docker 容器(这与docker run命令的-v选项相同,后者是上一篇文章中讨论过)。最后,要启动这些容器,应在与配置文件相同的位置执行以下命令:

 
$> 码头工人组成

就是这样!两个 docker 容器应该已启动并正在运行。

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

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分