Ubuntu 24.04 arm 安装docker
我直接参考Ubuntu ARM 安装 Docker进行安装;
安装完成后,需要执行以下语句把当前用户添加到docker用户组:
sudo usermod -aG docker $USER
然后重启,就能直接执行以下这类命令等等而不用加sudo
docker ps
docker虚拟ros1
主要参考,kimi2的问答,以及:
在ubuntu22.04中借助docker实现安装、调试ros1.0
如何轻松在Docker容器中安装ROS:一站式指南与常见问题解答
ros1+docker环境快速搭建
在 docker 上安装 ROS1/2
拉取镜像并验证,这个方案失败了
# 拉取ARM64架构的ROS1 Noetic桌面完整版
docker pull --platform linux/arm64 osrf/ros:noetic-desktop-full
# 验证镜像
docker images | grep noetic
自己构建镜像
构建与测试
# 在Edge2创建文件夹
mkdir -p ~/docker-ros-arm64
cd ~/docker-ros-arm64
cat > Dockerfile << 'EOF'
FROM arm64v8/ubuntu:20.04
ENV DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Shanghai
ENV LANG=en_US.UTF-8
ENV LC_ALL=en_US.UTF-8
# 第一步:安装基础工具
RUN apt-get update && apt-get install -y \
curl gnupg2 lsb-release software-properties-common \
build-essential python3-pip git sudo bash-completion \
locales tzdata && \
locale-gen en_US en_US.UTF-8 && update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
# 第二步:添加ROS源
RUN sh -c 'echo "deb https://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' && \
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
# 第三步:安装ROS Noetic和catkin-tools
RUN apt-get update && apt-get install -y \
ros-noetic-desktop-full \
python3-rosdep \
python3-rosinstall \
python3-catkin-tools && \
rm -rf /var/lib/apt/lists/*
# 第四步:手动创建rosdep配置(跳过rosdep init和update)
RUN mkdir -p /etc/ros/rosdep/sources.list.d && \
echo "yaml https://mirrors.tuna.tsinghua.edu.cn/git/rosdistro.git/master/rosdep/osx-homebrew.yaml osx" > /etc/ros/rosdep/sources.list.d/20-default.list && \
echo "yaml https://mirrors.tuna.tsinghua.edu.cn/git/rosdistro.git/master/rosdep/base.yaml" >> /etc/ros/rosdep/sources.list.d/20-default.list && \
echo "yaml https://mirrors.tuna.tsinghua.edu.cn/git/rosdistro.git/master/rosdep/python.yaml" >> /etc/ros/rosdep/sources.list.d/20-default.list && \
echo "yaml https://mirrors.tuna.tsinghua.edu.cn/git/rosdistro.git/master/rosdep/ruby.yaml" >> /etc/ros/rosdep/sources.list.d/20-default.list && \
echo "yaml https://mirrors.tuna.tsinghua.edu.cn/git/rosdistro.git/master/releases/fuerte.yaml" >> /etc/ros/rosdep/sources.list.d/20-default.list && \
sed -i 's|https://raw.githubusercontent.com/ros/rosdistro/master|https://mirrors.tuna.tsinghua.edu.cn/git/rosdistro.git|g' /etc/ros/rosdep/sources.list.d/20-default.list
# 第五步:设置环境
RUN echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
RUN mkdir -p /workspace/src
WORKDIR /workspace
CMD ["bash"]
EOF
清理旧的编译(因为我尝试了很多次)并重新编译:
# 清理失败状态
docker system prune -f
# 重新构建
docker build -t ros:noetic-edge2-arm64 .
快速验证
# 验证架构
docker inspect ros:noetic-edge2-arm64 | grep Architecture
# 输出:"Architecture": "arm64"
验证ros版本:
# 方法1:使用交互式shell(推荐)
docker run -it --rm ros:noetic-edge2-arm64 bash
# 进入容器后执行:
root@xxxx:/workspace# echo $ROS_DISTRO
# 输出:noetic
我的成功输出。
在vscode的ssh中使用
首先要确保vscode安装了如下插件:Dev Containers,Remote-SSH.
然后,创建测试用的文件夹并进入,
mkdir -p ~/ros1_docker_test/src
cd ~/ros1_docker_test
创建容器配置目录,并填入配置文件
# 创建.devcontainer配置目录
mkdir .devcontainer
cat > .devcontainer/devcontainer.json << 'EOF'
{
"name": "ROS1 Noetic ARM64",
"image": "ros:noetic-edge2-arm64",
"workspaceFolder": "/workspace",
"workspaceMount": "source=${localWorkspaceFolder},target=/workspace,type=bind,consistency=cached",
"runArgs": [
"--privileged",
"--platform=linux/arm64",
"--network=host",
"-e", "DISPLAY=${localEnv:DISPLAY}",
"-v", "/tmp/.X11-unix:/tmp/.X11-unix:rw",
"-v", "/dev:/dev"
],
"postCreateCommand": "rosdep update && echo 'source /opt/ros/noetic/setup.bash' >> ~/.bashrc",
"remoteUser": "root",
"customizations": {
"vscode": {
"extensions": [
"ms-iot.vscode-ros",
"ms-vscode.cpptools",
"ms-python.python"
],
"settings": {
"terminal.integrated.defaultProfile.linux": "bash",
"ros.distro": "noetic"
}
}
}
}
EOF
VSCode连接流程
打开VSCode → 连接Edge2 SSH
打开文件夹 ~/ros1_docker_test
右下角点击"Reopen in Container"
等待容器启动(首次5-10秒)
然后之后的使用体验基本和原生Ubuntu20-ros1一致了。
然后是测试创建包以及编译
# 验证1:ROS环境
root@xxxx:/workspace# echo $ROS_DISTRO
# 输出:noetic
# 验证2:编译工具
root@xxxx:/workspace# which catkin_make
# 输出:/opt/ros/noetic/bin/catkin_make
# 验证3:创建测试包
root@xxxx:/workspace# cd src
root@xxxx:/workspace/src# catkin_create_pkg test_pkg std_msgs rospy roscpp
# 成功创建
# 验证4:编译
root@xxxx:/workspace/src# cd ..
root@xxxx:/workspace# catkin_make
# 成功编译
# 验证5:运行roscore
root@xxxx:/workspace# roscore &
# 成功启动
后续的一些部署的测试啥的,我会卸载新的笔记中,目前来看,已经具备迁移测试之前的一些东西的条件了。
增量构建
主要是换了鱼香的rosdepc
mkdir -p ros-arm64-rosdepc-build && cd ros-arm64-rosdepc-build
# 2. 创建Dockerfile(基于旧镜像)
cat > Dockerfile << 'EOF'
# 基于你的旧镜像(已有ROS,无rosdep)
FROM ros:noetic-edge2-arm64
# 安装rosdepc
RUN pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple rosdepc
# 构建阶段执行rosdepc init和update(结果固化在镜像中)
RUN rosdepc init && rosdepc update
# 设置workspace
WORKDIR /workspace
CMD ["bash"]
EOF
# 3. 构建新镜像(非常快)
docker build -t ros:noetic-arm64-rosdepc .
# 4. 验证(现在有3个镜像)
docker images ros
# IMAGE ID DISK USAGE CONTENT SIZE EXTRA
# ros:noetic-arm64-rosdepc dfc6152c8929 6.74GB 1.38GB
# ros:noetic-edge2-arm64 2ba91b897f11 6.73GB 1.38GB U
在.devcontainer/devcontainer.json文件中修改第2行第14行为
"image": "ros:noetic-arm64-rosdepc",
"postCreateCommand": "rosdepc update && echo 'source /opt/ros/noetic/setup.bash' >> ~/.bashrc",
直接安装鱼香ROS1
参考 Docker中安装ROS系统
执行
wget http://fishros.com/install -O fishros && . fishros
截取过程中一些重要的可能以后用得上的打印信息(我最终没有使用这个版本,但是看起来挺好用)
----------------------------------------------------------------------
RUN Choose Task:[请输入括号内的数字]
---众多工具,等君来用---
ROS相关:
[1]:一键安装(推荐):ROS(支持ROS/ROS2,树莓派Jetson)
[3]:一键安装:rosdep(小鱼的rosdepc,又快又好用)
[4]:一键配置:ROS环境(快速更新ROS环境设置,自动生成环境选择)
[9]:一键安装:Cartographer(18 20测试通过,16未测. updateTime 20240125)
[11]:一键安装:ROS Docker版(支持所有版本ROS/ROS2)
[16]:一键安装:系统自带ROS (!!警告!!仅供特殊情况下使用)
常用软件:
[2]:一键安装:github桌面版(小鱼常用的github客户端)
[6]:一键安装:NodeJS环境
[7]:一键安装:VsCode开发工具
[8]:一键安装:Docker
[10]:一键安装:微信(可以在Linux上使用的微信)
[12]:一键安装:PlateformIO MicroROS开发环境(支持Fishbot)
[15]:一键安装:QQ for Linux
配置工具:
[5]:一键配置:系统源(更换系统源,支持全版本Ubuntu系统)
[13]:一键配置:python国内源
[17]:一键配置: Docker代理(支持VPN+代理服务两种模式)
[0]:quit
请输入[]内的数字以选择:11
欢迎使用一键安装ROS-Docker版,支持所有版本ROS,本工具由作者小鱼提供
================================1.版本选择======================================
RUN Choose Task:[请输入括号内的数字]
请选择你要安装的ROS版本名称(请注意ROS1和ROS2区别):
[1]:jazzy (ROS2)
[2]:noetic (ROS1)
[3]:humble (ROS2)
[4]:foxy (ROS2)
[5]:galactic (ROS2)
[6]:iron (ROS2)
[7]:melodic (ROS1)
[8]:rolling (ROS2)
[9]:kinetic (ROS1)
[10]:eloquent (ROS2)
[11]:dashing (ROS2)
[12]:crystal (ROS2)
[13]:bouncy (ROS2)
[14]:ardent (ROS2)
[15]:lunar (ROS2)
[16]:indigo (ROS1)
[0]:quit
请输入[]内的数字以选择:2
你选择了noetic(ROS1),该版本目前状态:长期支持
================================2.安装Docker======================================
Run CMD Task:[docker version]
[-][0.05s] CMD Result:success
=================3.下载镜像(该步骤因网络原因会慢一些,若失败请重试)==================
Run CMD Task:[sudo docker pull ros:noetic ]
Error response from daemon: failed to resolve reference "docker.io/library/ros:noetic": failed to do request: Head "https://registry-1.docker.io/v2/library/ros/manifests/noetic": dial tcp 96.44.137.28:443: i/o timeout
Run CMD Task:[sudo docker pull ros:noetic ]
Error response from daemon: failed to resolve reference "docker.io/library/ros:noetic": failed to do request: Head "https://registry-1.docker.io/v2/library/ros/manifests/noetic": dial tcp 45.77.186.255:443: i/o timeout
Run CMD Task:[sudo docker pull ros:noetic ]
Error response from daemon: failed to resolve reference "docker.io/library/ros:noetic": failed to do request: Head "https://registry-1.docker.io/v2/library/ros/manifests/noetic": dial tcp 45.77.186.255:443: i/o timeout
================================4.生成容器======================================
请为你的noetic容器取个名字吧!
>>ros1
收到名字ros1
请问你要使用什么网络模式?
1.host (主机模式,容器共享宿主机的网络命名空间,没有隔离(仅 Linux))
2.bridge (桥接模式,默认网络模式,每个容器都有自己的 IP,容器之间通过网桥通信,宿主机通过端口映射访问)
>>1
RUN Choose Task:[请输入括号内的数字]
为方便后续使用容器,请选择使用方式,若不知道怎么选,推荐套餐1,若不需要则可以选退出:
[1]:套餐1:VsCode+插件(本地使用推荐)
[2]:套餐2:SSH-Service(远程使用推荐)
[0]:quit
请输入[]内的数字以选择:2
===========================后续使用指令=================================
后续可在任意终端输入ros1来启动/停止/测试/删除容器
==============================文件存储位置===============================
你的主目录已经和容器的对应目录做了映射
==============================问题反馈&&更新讨论=============================
请访问社区的一键安装版块:https://fishros.org.cn/forum/topic/112
配置文件已保存至: /tmp/fish_install.yaml
欢迎加入机器人学习交流QQ群:438144612(入群口令:一键安装)
鱼香小铺正式开业,最低499可入手一台能建图会导航的移动机器人,淘宝搜店:鱼香ROS 或打开链接查看:https://item.taobao.com/item.htm?id=696573635888
如在使用过程中遇到问题,请打开:https://fishros.org.cn/forum 进行反馈
不过我没有成功用起来,怎么输密码都不对,还是卸载了。