前言:
本文是一篇纯初级入门向的博客,目的只为了体验搭建一个docker的过程,实际工程并不推荐使用本篇中介绍的方法。
在使用 ROS 时,由于 Linux 系统版本与 ROS 发行版是强绑定的,不同版本之间往往无法直接兼容。这意味着如果需要使用多个 ROS 版本,就必须频繁切换系统环境,过程既麻烦又容易出现依赖冲突。
为了解决这个问题,Docker 成为了一个非常实用的工具。借助 Docker,我们可以在同一台电脑上创建不同版本的 Linux 容器,从而在对应环境中运行不同版本的 ROS,大大提升了开发效率。
虽然现在可以通过向 AI 询问 Docker 的使用方法,但在实际操作中,得到的步骤未必总是最合适或最完整。经过多次尝试和总结,我按照自己的使用习惯整理了这篇博客,用来记录 Docker 的常用操作流程,也希望能为有类似需求的朋友提供一些帮助。
第一步:安装 Docker
1.1 更新系统
1 2
| sudo apt update sudo apt upgrade -y
|
1.2 安装 Docker
安装 Docker 有两种方式,本文只介绍最快的方法,基于 Dockerfile 的方法请移步另外一篇 blog:
1
| sudo apt install docker.io -y
|
1.3 启动 Docker
1
| sudo systemctl start docker
|
并设置为开机自启:
1
| sudo systemctl enable docker
|
1.4 把自己加入 Docker 用户组
1
| sudo usermod -aG docker $USER
|
1.5 重启电脑并测试是否成功
出现版本号则证明安装成功。
第二步:下载 ROS2 Humble 官方镜像
可以先试试直接拉取:
但很可能因为网络问题导致无法拉取,所以推荐配置镜像加速:
2.1 创建 Docker 配置文件
1
| sudo mkdir -p /etc/docker
|
2.2 写入镜像加速地址
1 2 3 4 5 6 7 8 9
| sudo tee /etc/docker/daemon.json <<EOF { "registry-mirrors": [ "https://docker.1panel.live", "https://hub-mirror.c.163.com", "https://mirror.ccs.tencentyun.com" ] } EOF
|
2.3 重启 Docker
1 2
| sudo systemctl daemon-reload sudo systemctl restart docker
|
2.4 重新拉取镜像
2.5 检查配置是否成功
往下拉到最底,出现刚才配置过的镜像地址,则说明配置成功。
2.6 验证镜像拉取成功
出现 TAG 为 humble 的 ros 镜像,证明成功。
第三步:创建自己的容器
3.1 在宿主机创建工作空间
3.2 运行容器
注意:my_docker 是容器的名字,可以根据需要自行修改。
1 2 3 4 5 6 7 8 9
| docker run -it \ --name my_docker \ --net=host \ --ipc=host \ --privileged \ -e DISPLAY=$DISPLAY \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -v ~/ros2_ws:/root/ros2_ws \ ros:humble-desktop
|
参数说明:
| 参数 |
作用 |
--name my_docker |
容器名字叫 my_docker |
-it |
进入终端模式 |
--net=host |
用宿主机网络(ROS 推荐) |
--ipc=host |
共享内存 |
--privileged |
允许用 USB/串口 |
-v ~/ros2_ws:/root/ros2_ws |
挂载代码文件夹 |
ros:humble-desktop |
使用 Humble desktop 版本镜像 |
3.3 加载 ROS 环境
1
| source /opt/ros/humble/setup.bash
|
3.4 测试是否可以使用
出来很多命令则说明可以正常使用。
Docker 创建成功,此时容器内是一个完全”干净的系统”,类似 pip 等开发工具是不存在的,需要根据项目所需版本自己安装相应的工具包。
第四步:拉取并编译 ROS 包
4.1 加载 ROS 环境(每次进入容器都需要)
1
| source /opt/ros/humble/setup.bash
|
如果想要一劳永逸,推荐:
1
| echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc
|
4.2 进入工作空间
4.3 把代码放到 src 目录
1 2 3
| mkdir -p src cd src git clone xxxxx
|
4.4 回到工作空间根目录并编译
4.5 处理缺包问题
在编译的时候可能提示缺少某些包,这是因为拉取的镜像是最精简的 ros-humble。需要根据 terminal 的提示补全依赖,例如:
1
| apt install ros-humble-rosidl-generator-dds-idl -y
|
附录:常用指令速查
A.1 退出容器
A.2 退出后重新进入容器
1 2
| docker start my_docker docker exec -it my_docker bash
|
A.3 查看所有容器
A.4 删除容器
A.5 镜像与容器的关系
一个镜像可以挂载多个容器:
- 镜像:
ros:humble
- 容器:
my_docker
A.6 容器内安装 pip
1 2 3
| apt update apt install python3-pip -y pip3 --version
|
A.7 修改 Docker 挂载文件的权限
1 2
| sudo chown -R $USER:$USER ~/project sudo chmod -R 775 ~/project
|