Docker 初探
文章目录
安装 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 <本地文件路径> <容器名称>:<容器内目标路径>
更多推荐


所有评论(0)