树莓派——docker实战小知识
第1课 & 第2课:跑通第一个 Docker (热身)
目标:确认Docker安装正常,拉取并运行测试镜像。
1. 检查你的树莓派是否已经装了Docker(通常装ROS的系统自带了):
docker version
(如果有输出Client和Server的版本号,说明已经装好了,直接跳到第2步)
2. 运行 Hello World 测试:
docker run hello-world
(这行代码会自动去网上下载一个很小的测试包并运行,如果看到 Hello from Docker! 就说明一切正常)
3. 查看你现在下载了哪些镜像(安装包):
docker images
第3课:容器的日常操作 (核心基础)
目标:学会怎么下载系统、进入系统、退出系统。
1. 下载一个纯净的 Debian 操作系统镜像:
docker pull debian
2. 启动并进入这个 Debian 系统(进入容器):
docker run -it debian /bin/bash
(敲完这行,你会发现你的终端前缀变成了 root@xxxxxx:/#,说明你已经在一个完全隔离的全新系统里了!)
3. 退出容器:
- 彻底退出并关机:直接输入
exit然后回车。 - 退出但让它在后台保持运行(常用!):按下键盘上的
Ctrl + P,然后再按Ctrl + Q。
4. 查看正在运行的容器:
docker ps
(加 -a 可以看所有曾经运行过的:docker ps -a)
5. 重新进入后台运行的容器(假设上面查到的容器ID是 efe9):
docker exec -it efe9 /bin/bash
6. 删除不需要的容器(彻底清理):
docker rm -f efe9
第4课:制作你自己的镜像 (打包保存)
目标:你在容器里装了软件,怎么把它保存下来?
方法一:从现有容器保存 (类似系统备份)
- 先看一眼你的容器ID:
docker ps -a(假设ID是9aeb) - 把它打包成新镜像:
docker commit 9aeb my_debian:1.0
- 检查一下有没有保存成功:
docker images
方法二:用代码自动构建 (Dockerfile - 进阶高手玩法)
- 创建一个构建文件:
nano Dockerfile
- 复制下面两行代码进去(意思是基于debian,并更新一下软件源),按
Ctrl+O保存,Ctrl+X退出:
FROM debian
RUN apt-get update
- 开始自动构建镜像(注意最后面有个小点
.):
docker build -f Dockerfile -t my_debian:1.1 .
第5课:跟硬件打交道 (ROS机器人必备!)
目标:让容器能看到USB设备、能显示图形界面、能互传文件。
1. 挂载摄像头进容器 (--device):
docker run -it --device=/dev/video0 debian /bin/bash
(进容器后输入 ls /dev,就能看到 video0 被弄进去了)
2. 挂载你的 ROS 工作空间进容器 (数据卷 -v - 超级重要!):
docker run -it -v /home/ubuntu/puppyfit_ws:/root/puppyfit_ws debian /bin/bash
(这样你在树莓派上写的代码,容器里 /root/puppyfit_ws 马上就能看到!删了容器代码也不会丢)
3. 和容器互传文件 (docker cp):
不用进容器,直接在树莓派终端敲:
# 从容器拷出来 (把容器 9aeb 里的文件拷到当前目录)
docker cp 9aeb:/root/test.txt ./
# 拷进容器里
docker cp my_code.py 9aeb:/root/
第6课:清理垃圾
目标:用久了硬盘满了怎么办?
1. 一键清理所有已经停止的废弃容器:
docker container prune
2. 一键清理所有没用的悬空镜像:
docker image prune
3. 查看当前容器占了多少CPU和内存:
docker stats
第7课:在 Docker 里跑 ROS2
目标:一键搞定 ROS2 Humble 环境,并弹出图形界面。
1. 在树莓派上允许图形界面弹出:
xhost +
2. 启动一个包含 ROS2 的超级容器:
(这条命令很长,包含了网络共享、设备挂载、图形界面映射)
docker run -it --network=host -d -v /dev:/dev -v /tmp/.X11-unix:/tmp/.X11-unix --name my_ros2 -e DISPLAY=$DISPLAY --restart=always ros:humble /bin/bash
3. 进入这个 ROS2 容器:
docker exec -it my_ros2 /bin/bash
4. 在容器里测试小海龟(弹出GUI):
source /opt/ros/humble/setup.bash
ros2 run turtlesim turtlesim_node
第8课:镜像的导入导出 (分享给别人)
目标:没网的时候,怎么把配置好的环境通过 U盘 拷给别人?
1. 把镜像打包成一个压缩包 (tar 文件):
# 把你做好的 my_debian:1.0 打包
docker save -o my_debian.tar my_debian:1.0
2. 别人拿到 U盘后,怎么导入这个镜像:
docker load -i my_debian.tar
这份文档非常全面!它包含了从 “Docker零基础” 到 “在Docker里跑ROS2并驱动硬件” 的完整学习路线。
既然你正在使用树莓派开发ROS2(你的 puppyfit_ws 工作空间),学好Docker将是你的超级武器!它可以帮你把ROS环境打包,再也不怕把树莓派的系统环境搞崩溃了。
这8节课的内容很多,如果死记硬背会非常枯燥。我为你把这8节课浓缩成了4个实战阶段。我们不需要一次性学完,我先带你理清核心逻辑,然后我们一步步实操。
核心概念:一分钟理解Docker (对应第1课)
你可以把Docker想象成货轮上的集装箱:
- 镜像 (Image):相当于“安装光盘”或“系统包”。比如
ros:humble就是一个装好了ROS2的Ubuntu系统包。它是只读的。 - 容器 (Container):相当于用“安装光盘”运行起来的“虚拟机”。你可以在里面敲代码、跑节点。容器关机后,里面的数据如果没有保存就会丢失。
- 仓库 (Repository):相当于应用商店(Docker Hub),你可以去上面下载别人做好的镜像。
实战学习路线:我们分四步打通!
第一步:Docker 生存指南(对应 第2、3课)
这是你每天都会用到的基础命令,把它当成九阴真经背下来:
- 看本地有什么镜像:
docker images - 看正在运行的容器:
docker ps(加-a查看所有曾经运行过的) - 拉取一个新系统:
docker pull debian - 启动并进入容器:
docker run -it debian /bin/bash(相当于开机并进入命令行) - 退出容器:输入
exit(容器会关机),或者按Ctrl+P+Q(容器保持后台运行,只退出界面)。 - 重新进入后台运行的容器:
docker exec -it <容器ID> /bin/bash
第二步:打造你自己的环境(对应 第4、8课)
假设你在官方的 debian 镜像里装了 Python 和 ROS,你想把它保存下来,以后直接用。
- 手动保存 (Commit):
docker commit <容器ID> my_ros:v1(把现在的容器打包成一个新的镜像)。 - 代码化保存 (Dockerfile):写一个文本文件告诉Docker怎么一步步安装,用
docker build生成镜像(这是最高阶、最正规的玩法)。 - 打包带走:用
docker save把镜像变成一个.tar压缩包,用U盘拷给你的同学,他用docker load就能拥有和你一模一样的环境!
第三步:打通物理世界(对应 第5课)—— 做机器人的关键!
容器就像一个铁盒,默认是看不见树莓派的硬件和文件的。我们需要“打洞”:
- 传文件进铁盒 (数据卷 Volume):
使用-v参数。比如-v /home/ubuntu/puppyfit_ws:/root/ws。
作用:把你的树莓派代码目录,直接映射到容器里。你在树莓派上改代码,容器里立刻生效!再也不怕容器被删导致代码丢失了。 - 接硬件进铁盒 (挂载设备):
使用--device参数。比如--device=/dev/video0。
作用:让容器能读取到树莓派上插的USB摄像头或激光雷达。 - 让铁盒能显示图形界面 (GUI显示):
用到xhost +和-e DISPLAY=${DISPLAY}等长长的一串命令。
作用:让你在Docker里面跑小海龟(turtlesim)时,画面能弹到你的树莓派桌面上。
第四步:在 Docker 里玩转 ROS2(对应 第7课)
这就是文档里最激动人心的一步,利用前面的所有知识,在树莓派启动一个完全隔离的ROS2容器。
更多推荐
所有评论(0)