基于 docker 安装 ros noetic
·
基于 docker 安装 ros noetic
没装 docker 的话参考这里安装 docker docker 在线安装
1. 构造基于 ubuntu 20.04 的加强镜像
创建名为 Dockerfile.ubuntu-enhanced 的 docker file 文件:
touch Dockerfile.ubuntu-enhanced
其中的内容为,
# Dockerfile.ubuntu-enhanced
FROM ubuntu:20.04
# 关键:设置环境变量避免交互式提示
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
# 一次性安装所有常用工具
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && \
apt-get update && apt-get install -y \
curl \
wget \
git \
vim \
nano \
lsb-release \
software-properties-common \
gnupg2 \
ca-certificates \
build-essential \
net-tools \
iputils-ping \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /workspace
# 可选:重置 DEBIAN_FRONTEND 如果后续需要交互
# ENV DEBIAN_FONTEND=
以下是 Dockerfile 中各预装包的作用列表:
| 包名 | 主要用途 | 必要性 |
|---|---|---|
ln -snf ... | 设置容器时区,避免安装 tzdata 时卡在交互选择界面 | 避免构建中断 |
echo $TZ > ... | 将时区信息写入配置文件,确保系统识别正确时区 | 时区配置 |
apt-get update | 更新软件包列表,确保后续安装获取最新版本 | 必要前置步骤 |
curl | 命令行网络工具,用于下载文件、API 调用(如获取 ROS 密钥) | 安装 ROS 必备 |
wget | 命令行网络下载工具,用于从网络下载文件 | 备用下载工具 |
git | 版本控制系统,用于克隆代码仓库(如 ROS 包) | 开发必备 |
vim | 终端文本编辑器,用于编辑配置文件 | 容器内编辑文件 |
nano | 更简单的终端文本编辑器,比 vim 更易上手 | 备选编辑器 |
lsb-release | 提供系统版本信息,用于获取 Ubuntu 代号(如 focal) | 添加 ROS 源必备 |
software-properties-common | 提供 add-apt-repository 命令,用于添加 PPA 源 | 管理软件源 |
gnupg2 | GNU 隐私卫士,用于验证软件包的 GPG 密钥 | 安全验证必备 |
ca-certificates | SSL 证书库,用于 HTTPS 连接的安全验证 | 网络安全必备 |
build-essential | 编译工具链(gcc, g++, make 等),用于编译 C/C++ 代码 | 编译 ROS 包必备 |
net-tools | 传统网络工具(ifconfig, netstat 等),用于网络调试 | 网络诊断 |
iputils-ping | 包含 ping 命令,用于测试网络连通性 | 基础网络测试 |
rm -rf /var/lib/apt/lists/* | 清理 apt 缓存,减小镜像体积(约可节省 30-50MB) | 优化镜像大小 |
关键分组说明
- 基础工具组 (
curl,wget,git):用于获取和下载资源 - 编辑工具组 (
vim,nano):用于容器内文件编辑 - 系统信息组 (
lsb-release):获取系统版本信息 - 安全工具组 (
gnupg2,ca-certificates):保证安装过程安全 - 开发工具组 (
build-essential):编译必备工具链 - 网络工具组 (
net-tools,iputils-ping):网络连接和调试
然后执行如下命令:
docker build -t my-ubuntu:enhanced -f Dockerfile.ubuntu-enhanced .
生成名为 my-ubuntu:enhanced 的镜像.
使用如下命令检查镜像是否成功生成:
docker images | grep my-ubuntu:enhanced
2. 进入镜像然后安装 ros noetic
以交互的方式打开加强镜像的 bash 终端。
docker run -it --name ros_installer my-ubuntu:enhanced /bin/bash
然后参考这篇文章在镜像内部安装 ros noetic: 基于 linux 20.04 构建 ros1 noetic 开发环境
接下来,将安装好ROS的容器保存为新镜像:
docker commit ros_installer my-ubuntu:trans
上述代码中,ros_installer 是容器的名称; my-ubuntu 和 trans 分别是新镜像(即安装了 ros noetic 的镜像)的名称和标签;commit 命令本质上就是一个从 container 到 image 的过程。
如果有必要可以停止并移除临时容器:
# docker stop ros_installer
# docker rm ros_installer
3. 离线复制准备
使用如下命令将 image 打包并存入磁盘:
docker save -o ready_to_trans.tar my-ubuntu:trans
这样安装完 ros 的镜像就被打包成了 tar 文件,后面用 U 盘或者 scp 传输到指定的电脑中去。
具体怎么传递可以参考这篇文章:rsync 与云服务器网络优化
4. 离线机装载
在离线机器,执行:
# 1. 从U盘加载镜像
docker load -i /path/to/usb/ready_to_trans.tar
# 2. 运行ROS环境
docker run -it --rm my-ubuntu:trans /bin/bash
# 进入容器后即可使用ROS
# source /opt/ros/noetic/setup.bash
更多推荐



所有评论(0)