前言
适用于产品: 幻尔科技全系列产品(树莓派 / Jetson 系列,电脑端 Linux 同样适用)
涉及工具: Docker
幻尔树莓派、Jetson 系列产品(ArmPi Ultra、MentorPi、ROSOrin 等)的视觉、ROS2 例程大多运行在 Docker 容器里,Python、ROS2 和各种依赖库都已提前装好,开箱即用,不用自己一条条配环境。
但 Docker 命令较多:镜像、容器、网络、文件互拷、保存、日志各有一套,新手很容易记混。本帖把日常开发中最高频的命令按使用流程整理成"一页纸",共十组,每条命令都附大白话注释,建议收藏,用到时按目录查即可。
在开始之前,先用大白话解释几个高频名词:
| 专业名词 | 大白话解释 |
|---|---|
| 镜像(Image) | 容器的"安装包 / 模板",相当于一份装好环境的系统快照,例如 `ros:humble` |
| 容器(Container) | 用镜像启动起来的"小系统",是真正跑程序的地方;同一个镜像可以开出多个容器 |
| 镜像名:标签 | 镜像的版本号写法,如 `ros:humble` 表示 ROS2 Humble 版本;不写标签默认是 `latest` |
| 容器名 / 容器 ID | 容器的两个"名字",命令里填哪个都行:容器名启动时自己起,ID 是系统分配的一串编号 |
| 宿主机(Host) | 运行 Docker 的那台真机本身,比如树莓派的 Raspberry Pi OS |
| 前台交互运行 | 启动后直接进入容器黑窗口,退出窗口容器就停止 |
| 后台常驻运行 | 容器在后台一直运行,退出终端也不受影响,日常开发推荐这种方式 |
一、镜像操作(拉取、查看、删除)
# 拉取镜像(从镜像仓库下载到本地)
docker pull 镜像名:标签
# 示例:拉取 ROS2 Humble 官方镜像
docker pull ros:humble
# 查看本地所有镜像
docker images
# 删除镜像(注意:镜像正被容器使用时无法删除)
docker rmi 镜像ID/镜像名
二、容器创建与运行(重点必记)
1. 前台交互式(退出容器就停止)
docker run -it --name 容器名 镜像名 bash
2. 后台常驻运行(退出终端不关机,推荐)
docker run -d --name 容器名 镜像名 tail -f /dev/null
3. 树莓派 ROS2 专用完整版(带 host 网络 + DNS)
docker run -d --name ArmPiUltra --network=host --dns=114.114.114.114 --dns=8.8.8.8 ros:humble tail -f /dev/null
4. 临时用完自动删除(一次性测试)
docker run -it --rm 镜像名 bash
| 运行方式 | 命令特点 | 适用场景 |
|---|---|---|
| 前台交互式 | -it … bash | 临时试用环境,退出即停 |
| 后台常驻 | -d … tail -f /dev/null | 日常开发,长期跑 ROS2 例程,推荐 |
| host 网络 + DNS | 加 --network=host --dns=… | 树莓派 ROS2 整机产品,免配网络、避免解析失败 |
| 临时自动删除 | -it --rm | 一次性测试,退出后自动清理,不留垃圾容器 |
三、容器查看
# 只看正在运行的容器
docker ps
# 查看所有容器(运行中 + 已停止)
docker ps -a
四、容器启停与重启
docker start 容器名/容器ID # 启动已停止的容器
docker stop 容器名/容器ID # 正常停止(给容器发退出信号,稍等几秒)
docker kill 容器名/容器ID # 强制卡死停止(立即断电式,stop 无效时再用)
docker restart 容器名/容器ID # 重启容器
| 功能 | 命令 | 说明 |
|---|---|---|
| 启动 | docker start 容器名/ID | 启动一个已停止的容器 |
| 正常停止 | docker stop 容器名/ID | 优雅退出,推荐日常使用 |
| 强制停止 | docker kill 容器名/ID | 容器卡死、stop 停不掉时使用 |
| 重启 | docker restart 容器名/ID | 相当于 stop + start |
五、进入 / 退出容器
# 进入正在运行的容器(开一个交互终端)
docker exec -it 容器名 bash
# 退出容器(后台运行的容器不会因此关闭)
exit
六、容器删除
docker rm 容器名/ID # 只能删除已停止的容器
docker rm -f 容器名/ID # 强制删除(运行中的容器也能直接删)
docker container prune # 一键清理所有已停止的容器
七、网络与信息查看
# 查看所有 docker 网络
docker network ls
# 查看容器详细配置(网络、IP、挂载卷等全部信息)
docker inspect 容器名
# 只查网络模式
docker inspect 容器名 | grep NetworkMode
八、文件互拷(宿主机 ↔ 容器)
# 宿主机文件 拷到 容器里
docker cp 宿主机路径 容器名:/容器路径
# 容器文件 拷到 宿主机
docker cp 容器名:/容器路径 宿主机路径
九、保存容器为镜像(保留所有修改)
在容器里安装了软件、修改了配置,想把当前状态永久保存下来、或者导出到别的机器上使用时,用 commit 把容器打包成新镜像:
docker commit 容器名 新镜像名:标签
十、日志查看
docker logs 容器名 # 查看历史日志
docker logs -f 容器名 # 实时滚动查看日志(按 Ctrl+C 退出查看,不影响容器运行)
附:全命令速查总表
| 分类 | 功能 | 命令 |
|---|---|---|
| 镜像 | 拉取镜像 | docker pull 镜像名:标签 |
| 镜像 | 查看本地镜像 | docker images |
| 镜像 | 删除镜像 | docker rmi 镜像ID/镜像名 |
| 运行 | 前台交互运行 | docker run -it --name 容器名 镜像名 bash |
| 运行 | 后台常驻运行 | docker run -d --name 容器名 镜像名 tail -f /dev/null |
| 运行 | 临时运行自动删除 | docker run -it --rm 镜像名 bash |
| 查看 | 查看运行中的容器 | docker ps |
| 查看 | 查看所有容器 | docker ps -a |
| 启停 | 启动 | docker start 容器名/ID |
| 启停 | 正常停止 | docker stop 容器名/ID |
| 启停 | 强制停止 | docker kill 容器名/ID |
| 启停 | 重启 | docker restart 容器名/ID |
| 进出 | 进入容器 | docker exec -it 容器名 bash |
| 进出 | 退出容器 | exit |
| 删除 | 删除已停止容器 | docker rm 容器名/ID |
| 删除 | 强制删除容器 | docker rm -f 容器名/ID |
| 清理 | 清理所有停止容器 | docker container prune |
| 网络 | 查看网络列表 | docker network ls |
| 网络 | 查看容器详细配置 | docker inspect 容器名 |
| 网络 | 只查网络模式 | docker inspect 容器名 |
| 拷贝 | 宿主机 → 容器 | docker cp 宿主机路径 容器名:/容器路径 |
| 拷贝 | 容器 → 宿主机 | docker cp 容器名:/容器路径 宿主机路径 |
| 保存 | 容器保存为镜像 | docker commit 容器名 新镜像名:标签 |
| 日志 | 查看历史日志 | docker logs 容器名 |
| 日志 | 实时滚动日志 | docker logs -f 容器名 |
四、资源下载
可通过以下途径获取:
官方在线课程与资料库: 幻尔科技官网在线教程
客服领取: 联系你购买设备的店铺客服(淘宝/京东/天猫客服),提供订单号即可免费领取资料。
社区工程师【避坑提示】
docker run只在创建时执行一次:容器创建好后,后续开关都用start / stop,不要再重复run,否则会再开出一个同名报错的新容器。- 前台容器退出即停,别慌:
docker run -it进去后exit容器就关闭了,需要长期运行请用-d后台方式,再用docker exec -it进入。 exec进入后exit不会关闭容器:后台容器用exec进入,exit只是退出当前终端,容器照常运行。- 删除顺序:
docker rm只能删已停止的容器,运行中的容器要先docker stop,或直接docker rm -f。 - 镜像删不掉先查容器:
docker rmi报镜像被占用时,先docker ps -a找到使用它的容器并删除,再删镜像。 - 重要代码不要只放在容器里:
docker commit保存的是快照,容器一旦误删无法找回;建议把代码放在挂载 / 共享目录(如/home/ubuntu/shared)中,再用docker cp或共享目录与宿主机互拷备份。