基于 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 源管理软件源
gnupg2GNU 隐私卫士,用于验证软件包的 GPG 密钥安全验证必备
ca-certificatesSSL 证书库,用于 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)优化镜像大小

关键分组说明

  1. 基础工具组 (curl, wget, git):用于获取和下载资源
  2. 编辑工具组 (vim, nano):用于容器内文件编辑
  3. 系统信息组 (lsb-release):获取系统版本信息
  4. 安全工具组 (gnupg2, ca-certificates):保证安装过程安全
  5. 开发工具组 (build-essential):编译必备工具链
  6. 网络工具组 (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

更多推荐