2026/4/16 4:41:14
网站建设
项目流程
简单的房源展示网站开发,网站艺术设计,wordpress主题防盗版,天津高端网站建设制作WSL 是地基#xff0c;Docker 是房子#xff0c;而你的代码是在房子里的某个房间跑的。 1. 什么是 WSL (Windows Subsystem for Linux)#xff1f;
WSL 的全称是 Windows 下的 Linux 子系统。 它的作用#xff1a; 让你在 Windows 电脑上#xff08;不用双系统#xff0…WSL 是地基Docker 是房子而你的代码是在房子里的某个房间跑的。1. 什么是 WSL (Windows Subsystem for Linux)WSL的全称是Windows 下的 Linux 子系统。它的作用让你在 Windows 电脑上不用双系统不用笨重的虚拟机直接跑 Linux 系统比如 Ubuntu。为什么需要它你的自动驾驶代码ROS 2、Autoware是基于 Linux 开发的它们依赖很多 Linux 独有的内核功能在纯 Windows 上是跑不起来的。你的现状你 VS Code 左下角显示的[WSL: Ubuntu]说明你现在的 VS Code 虽然界面画在 Windows 上但它的“大脑”其实是连在这个 WSL Ubuntu 系统里的。2. WSL 和 Docker 是什么关系简单来说Docker 在 Windows 上全是靠 WSL 2 活着的。Docker 的痛点Docker 容器本质上是“借用”宿主机的 Linux 内核来运行的。但是 Windows 没有 Linux 内核。WSL 的救场WSL 2 在你的 Windows 里塞进了一个真正的 Linux 内核。结合当你在 Windows 上安装 Docker Desktop 时Docker 会自动检测到 WSL 2并把这个 Linux 内核作为它的后端引擎。可以说没有 WSL 2Docker 在 Windows 上就会跑得很慢、很难用甚至跑不起来。3. 这里的“套娃”关系看懂这个就通了针对你现在的开发环境其实是一个 4 层的“俄罗斯套娃”结构。请看下面的层级图第一层最外层Windows 11 (你的物理电脑)你在这里打开浏览器查资料打开 VS Code 写代码。第二层WSL 2 (Ubuntu)这是一个寄生在 Windows 里的 Linux 系统。关键点你的代码文件夹~/work_space/lubo_auto_car实际存储在这一层。第三层Docker Engine (基于 WSL)Docker 利用 WSL 的内核资源来管理容器。第四层最里层Docker 容器 (root21f8611da6f8)这就是你终端里显示的那个root...。这是一个完全隔离的、纯净的 ROS 2 开发环境。它通过挂载 (Volume Mapping)的方式把第二层WSL里的代码文件夹映射到自己内部。 所以一旦我们修改了wsl的代码文件夹那么docker就能直接看到修改的文件。挂载 打通。 它让隔离的 Docker 容器能够直接“触摸”到你 WSL 硬盘里的真实文件。~/autoware_ws/wordk_space:/root/work_spaceA (~/autoware_ws/wordk_space)叫做Host Path宿主机路径也就是你 WSL 里那个真实的文件夹。B (/root/work_space)叫做Container Path容器路径也就是 Docker 里面看到的那个文件夹。如果你在 WSL 里把~/autoware_ws/wordk_space文件夹删了Docker 启动时会发现“咦我要挂载的那个洞口怎么不见了” 于是 Docker 根本启动不起来或者启动后里面是空的之前的编译环境、代码、所有东西全没了。对于-v挂载进去的那个文件夹/root/work_space在 Docker 里面永远、永远不要手贱去运行rm -rf在那里面删文件就是在删你电脑硬盘里的真文件4. 为什么要用这种复杂的架构这其实是目前 Windows 用户开发 Linux 程序的最佳实践性能最强代码放在 WSL 里文件读写速度极快比直接放在 Windows C盘快得多。环境隔离你的 Docker 容器第四层里装满了各种乱七八糟的 ROS 依赖库。万一搞坏了删掉容器重开一个就行不会把你的 WSL第二层或者 Windows第一层搞崩。开发方便VS Code 可以直接穿透到 WSL 里编辑代码同时终端又连在 Docker 容器里编译代码既享受了 Windows 的图形界面又享受了 Linux 的编译能力。总结WSL是为了让 Windows 能拥有 Linux 的能力。Docker利用 WSL 的能力来运行你的 ROS 2 环境。你在 Windows 上操作 VS Code修改存储在 WSL 里的代码然后在 Docker 容器里编译运行。