Docker 是一个用于开发、运输和运行应用程序的开放平台,用于运行称为容器的软件包。容器是一个轻量级、可移植的软件包,包含运行软件所需的一切。这包括应用程序代码、系统工具、库和运行时间。容器无法独立运行的唯一原因是,它依赖主机的操作系统(OS)和内核来提供底层服务,如资源管理和网络访问。由于容器包含应用程序运行所需的其他一切,因此很容易从一个环境移动到另一个环境。这使得在开发人员的笔记本电脑、测试服务器和生产服务器上运行同一应用程序而无需更改代码成为可能。
使用 Docker 有几个好处:
可移植性。您可以在本地机器上开发和测试应用程序,然后将其部署到运行 Docker 的任何其他机器上,只需极少的工作量。可移植性的唯一限制是,由于容器不包含自己的操作系统,因此容器只能运行在创建它的相同操作系统上(例如,如果要运行基于 Linux 的容器,主机必须有 Linux 操作系统)。如果你打算在 Windows 操作系统主机上使用基于 Linux 的容器,或者反之亦然,你需要通过虚拟机(VM)运行容器,或者使用 Docker Desktop(在后台通过 Linux VM 运行容器)。考虑到这一切,容器可以轻松地将应用程序从一个环境移动到另一个环境。这在使用微服务时尤其有用,因为容器允许您单独构建、测试和部署每个服务(White 和 Christensen,2017 年)。
隔离。每个容器都在自己的隔离环境中运行。因此,您可以在同一台主机上运行多个应用程序,而不会相互干扰并造成潜在冲突。就我们的应用而言,我们可以在一台机器上安装具有不同配置的多个版本的机器人操作系统(ROS)。每个镜像都可针对特定任务进行定制(González-Nalda 等人,2017 年)。
可扩展性。Docker 可以轻松地在多台主机上横向扩展应用程序。具体来说,你可以创建多个容器,并在它们之间分配计算负荷(Wendt 和 Schüppstuhl 2022 年)。
易于使用。Docker 提供了一种简单一致的打包和部署应用程序的方式,使开发人员更容易在不同的环境中工作。这减少了编写代码与在生产中运行代码之间的延迟(Cervera 和 Del Pobil,2019 年)。
本报告涉及《陆军多域情报 21-22 财年科技重点领域》(参谋部副参谋长办公室,2020 年)中确定的重点领域。具体而言,这项工作涉及该文件中的以下表述: "战争将以超高速、超大规模进行,机器人和自主系统 (RAS)、机器学习 (ML) 和 AI [人工智能] 能力等技术将占据主导地位,这些技术可广泛获取、打包并随时投入使用"。我们的目标是利用容器将软件快速部署到多个机器人平台。容器还能简化机器人平台的维护过程,并实现版本控制。
容器和虚拟机都是虚拟化方法,允许你在一台物理机上运行多个操作系统。不过,它们的工作方式略有不同。
容器是一个轻量级、可移植和可执行的软件包。它包含应用程序运行所需的一切(除了主机需要和提供的基本操作系统),包括应用程序代码、库、依赖项和运行时间。由于容器只包含所需的最小组件,并共享主机操作系统的内核,因此比虚拟机更轻便、更高效。容器通常用于部署和运行基于微服务的应用程序,这些应用程序由小型、独立和模块化的组件组成,这些组件通过应用程序编程接口(API)相互通信。
虚拟机是在主机操作系统之上运行的物理计算机的完整模拟。虚拟机包括操作系统和虚拟硬件(如 CPU、内存、存储和网络设备)的完整副本。由于虚拟机包括操作系统和虚拟硬件的完整拷贝,因此它们比容器更重,需要的资源也更多。虚拟机通常用于运行传统应用程序、在不同环境中测试软件,以及将应用程序相互隔离。
为了在机器人上运行应用程序,可以使用容器在机器人平台上快速、安全地安装必要的文件和依赖项。本报告的重点是创建、运行和部署一个围绕我们的传感器有效载荷构建的容器,该容器的应用重点是同步定位和绘图。