安装 Nvidia-Docker

确保系统已安装 Nvidia 驱动

安装 Docker

sudo apt-get install ca-certificates gnupg lsb-release

sudo mkdir -p /etc/apt/keyrings

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

安装nvidia-container-toolkit

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -

curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit

sudo systemctl restart docker

设置用户组,消除 sudo 限制

sudo groupadd docker

sudo gpasswd -a $USER docker

注销账户并重新登录使新的用户组生效

sudo service docker restart

Docker 常用命令

构建镜像: docker build -t basic_dev .
在当前目录中构建名为 basic_dev 的镜像

查看正在运行的容器名称: docker ps

进入容器终端: docker exec -it uav_controller bash

  • exec:代表在一个已经运行的容器中执行新命令(区别于 run 是创建一个新容器)。

  • -it:以交互模式打开终端。

  • uav_controller:你刚刚在 docker ps 里查到的容器名称(也可以用 Container ID 的前几位代替)。

  • bash:启动 Bash 命令行终端。

启动容器环境: docker run -it --rm --network host --privileged -v $(pwd)/src:/basic_dev/src --name basic_dev basic_dev bash

  • docker run:告诉 Docker,“帮我把某个镜像实例化,并跑起来”。

  • -it:这是两个参数的结合。-i 代表交互式(Interactive,保持输入流打开),-t 代表分配一个伪终端(TTY)。简单来说,就是让你能像操作真实的 Ubuntu 系统一样,在里面敲命令、看输出。

  • –rm:阅后即焚(Remove)。当你输入 exit 退出这个容器终端时,Docker 会自动清理并删除这个容器,防止你的电脑里堆满废弃的死容器,保持环境干净。

  • –network host:这是打通仿真环境的命脉! 它让容器直接与你的宿主机(本地电脑)共用同一个网络栈。有了它,容器里的 ROS 节点就能毫无障碍地发现并连接到外面大疆 Simulator 仿真引擎发布的话题。

  • –privileged:赋予容器“最高特权”。这让容器内的程序拥有几乎等同于宿主机 root 用户的权限。在机器人开发中,这通常用于无障碍地访问 USB 设备、显卡硬件或者某些底层系统资源。

  • -v $(pwd)/src:/basic_dev/src:这是提升开发效率的“神仙参数”(挂载数据卷)。

    • $(pwd) 会自动获取你当前所在的目录路径。

    • 这句的意思是:把你电脑当前的 src 文件夹,和容器内部的 /basic_dev/src 文件夹像“虫洞”一样绑定起来。

    • 效果: 你在宿主机用 VS Code 写的 C++ 代码,保存的瞬间就会同步到容器里。你只需要在容器里敲 catkin_make 编译就行,再也不用每次改完代码都去重新 docker build 一次了。

  • –name basic_dev:给这个正在运行的容器起个好记的名字(叫 basic_dev)。这样你想开第二个终端进入它时,直接敲 docker exec -it basic_dev bash 就可以了,不用去查那一长串复杂的容器 ID。

  • basic_dev(倒数第二个词):这是你要启动的目标镜像名称。也就是我们之前辛苦排雷、刚刚 build 成功的那个镜像。

  • bash:容器启动后执行的第一条命令。意思是:启动后,直接给我打开一个 Bash 命令行界面。

文件交互

利用已经挂载的“共享文件夹”

启动容器的时候,加一句命令 -v $(pwd)/src:/basic_dev/src
把本地的 src 文件夹,和容器里的 /basic_dev/src 文件夹强行绑定在一起

docker cp 命令

如果你不想把文件放在 src 目录下,而是想放到虚拟环境的某个系统深处(比如 /root/ 或者 /opt/),你可以使用 Docker 专属的拷贝命令。

docker cp <本地文件路径> <容器名称>:<容器内目标路径>
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐