开发容器
您可以使用开发容器来构建项目,如果您更喜欢简化的设置体验。这意味着您可以使用与团队其他成员相同的工具和依赖项,包括我们的持续集成(CI)工作流程,而无需担心在主机上安装依赖项。此外,使用开发容器使得在本地或远程开发环境之间切换变得简单,例如GitHub Codespaces。
See also
有关开发容器的更多信息,请参见以下内容:
-
一个开放规范,用于丰富容器的开发特定内容和设置。
-
了解如何使用Visual Studio Code在Docker容器中进行开发。
-
一个托管在云中的开发环境。
什么是、为什么和如何?
让我们简要解释一下什么是开发容器、为什么您应该使用它们以及它们是如何工作的。
Hint
在这里我们假设使用VS Code,但同样适用于其他工具和服务,包括其他CLI、IDE等,例如:
-
开放规范的参考实现。
JetBrains Space | Develop in Dev Environment
与JetBrains产品一起使用开发容器。
-
支持开发容器规范的工具和服务列表。
什么是开发容器?
开发容器是一个Docker容器,里面包含您开发项目所需的所有工具和依赖项。它在一个自包含的环境中运行,与其他容器和您的主机机器隔离。这使您能够在任何地方可靠地为项目开发,特别是针对ROS所针对的Linux发行版,无论您的主机操作系统是什么。
为什么使用开发容器?
开发容器提供了一个共同且一致的开发环境。它确保团队中的每个人都使用相同的工具和依赖项。此外,它还使在项目之间切换变得容易,因为每个项目可以使用不同的容器。这在您处理多个使用不同版本相同工具和依赖项的项目时尤其有用,例如不同版本的ROS。
开发容器是如何工作的?
当您在VS Code中打开项目时,VS Code会检查位于项目根目录下的.devcontainer文件夹中的开发容器配置。如果找到了配置,它会提示您在容器中重新打开项目。如果您选择这样做,它会启动容器,连接到它,并将您的项目文件夹挂载到容器内。然后,您可以在容器中使用VS Code,就像在本地一样。在设置容器时,VS Code还可以尝试传递本地环境的一些有用方面,例如git用户配置、X11套接字等。
这与之前用于自定义和运行Docker容器进行开发的工具非常相似:
-
一个运行Docker容器的工具,带有覆盖和方便选项,适用于图形用户界面等。
由 Open Robotics开发
-
一个模块化的基于Docker的工具,确保开发人员拥有一个共同且一致的开发环境
由 Apex.AI开发
前提条件
要使用开发容器,您需要以下内容:
主机上安装并运行的Docker Engine
在任何远程机器上安装的Visual Studio Code
在VS Code中安装的Dev Containers 扩展
Note
您也可以直接从项目代码库使用GitHub Codespaces,或任何其他远程主机:
Creating a codespace for a repository
如何通过GitHub CLI、VS Code或Web浏览器为代码库创建代码空间
Develop on a remote Docker host
如何通过SSH隧道或TCP套接字将VS Code连接到远程Docker主机。
入门
使用开发容器入门非常简单,只需在VS Code中打开项目,可以选择以下两种方式:跟随通知提示在容器中重新打开项目,或显式打开命令面板(Ctrl+Shift+P),然后选择 Remote-Containers: Reopen in Container
。这将创建一个新的容器,安装项目默认的 .devcontainer/devcontainer.json
配置文件中指定的任何扩展,并将项目的根目录挂载为工作区文件夹。一旦容器创建完成,VS Code将连接到它,您可以开始开发。
Tip
在VS Code中单击 Starting Dev Container (show log)
通知,可以实时观察容器启动的过程;而在命令面板中输入 Dev Containers: Show Log
则会列出所有可用的命令,以便您稍后查看和回顾这些日志文件。
在等待初始设置的过程中,您可以放松一下,喝杯咖啡,或者继续阅读以下指南,以了解有关创建和使用开发容器的更多信息,或如何在无头开发环境中可视化和利用图形用户界面。
-
如何使用开发容器和支持工具开发Nav2。
安全
Caution
在启动派生的开发容器之前,请确保您信任工作区的作者和内容。
使用开发容器时需要注意:它们是强大的工具,但可能存在安全隐患,因为IDE扩展提供的任意代码执行能力使得这种自动化和便利性具有双重用途。在启动开发容器之前,请确保您信任工作区和作者。例如,在审查拉取请求时,请验证补丁是安全的,不会引入任何恶意代码。虽然在编译和运行已修补代码时,保持警惕是必要的,但使用具有提升权限或文件系统访问的容器时,这种谨慎就显得更加重要。