一、準備工作
主要是因為國內網絡的問題,可能導致鏡像拉取失敗,解決辦法參考:鏡像加速
二、安裝運行過程
2.1拉取鏡像:
sudo docker pull arm64v8/ubuntu:20.04
這個是ubuntu的拉取指令,其他的也是類似。
2.2 運行鏡像
為了在 AMD64 主機上運行 ARM64 容器,你需要安裝 QEMU 并注冊 binfmt 支持。以下是詳細步驟:
安裝 QEMU
安裝 QEMU 用戶模式仿真器:
sudo apt-get update
sudo apt-get install -y qemu-user-static
注冊 binfmt:
Docker 提供了一個方便的鏡像來注冊 binfmt,可以使用以下命令:
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
驗證 QEMU 是否正確安裝
你可以使用以下命令來驗證:
docker run --rm --privileged multiarch/qemu-user-static:register --reset
運行 ARM64 容器
在安裝和注冊 QEMU 之后,你應該可以在 AMD64 主機上運行 ARM64 容器:
sudo docker run --platform linux/arm64 -it arm64v8/ubuntu:20.04
2.3 宿主機目錄共享
在 Docker 中,可以通過掛載主機目錄到容器內的方式實現目錄共享。這通常是通過 -v 或 --mount 選項來實現的。以下是具體的步驟和示例:
使用 -v 選項掛載目錄
-v 選項用于掛載主機目錄到容器內的目錄。格式為:-v 主機目錄:容器目錄。
sudo docker run --platform linux/arm64 -it -v /path/on/host:/path/in/container arm64v8/ubuntu:20.04 /bin/bash
例如,將主機的 /home/user/shared
目錄掛載到容器內的/mnt/shared
目錄:
sudo docker run --platform linux/arm64 -it -v /home/user/shared:/mnt/shared arm64v8/ubuntu:20.04 /bin/bash
使用 --mount 選項掛載目錄
例如,將主機的 /home/user/shared 目錄掛載到容器內的 /mnt/shared 目錄:
sudo docker run --platform linux/arm64 -it --mount type=bind,source=/home/user/shared,target=/mnt/shared arm64v8/ubuntu:20.04 /bin/bash
通過這些方法,可以在 Docker 容器和宿主機之間共享目錄,從而方便地在兩者之間交換文件。
2.4 啟動&刪除容器
列出當前的所有容器:
sudo docker ps -a
啟動指定的容器:
sudo docker start -i CONTAINER ID
或者使用容器名字
sudo docker start -i 容器名字
刪除所有停止運行的容器
sudo docker container prune
刪除特定容器
刪除特定的容器,假設容器 ID 是 e5c2c5dabc12:
sudo docker rm e5c2c5dabc12
刪除所有未使用的鏡像、網絡和掛載
sudo docker system prune -a
三、安裝ROS1
步驟1: 更新和安裝基本工具
首先,在容器中更新軟件包列表并安裝一些基本的工具:
apt-get update
apt-get install -y curl gnupg2 lsb-release
步驟2: 添加ROS Noetic源
添加ROS源到APT源列表
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
步驟3: 添加ROS密鑰并安裝ROS Noetic
- 1.添加 ROS 密鑰:
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
- 2.更新軟件包索引:
apt-get update
- 3.安裝桌面完整版
apt-get install -y ros-noetic-desktop-full
步驟4: 初始化rosdep
安裝完 ROS 后,需要初始化 rosdep:
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
步驟5: 測試安裝
roscore
這將啟動 ROS 主節點。如果能夠成功啟動,說明 ROS Noetic 已經安裝和配置成功。
四、遇到的問題
運行指令:
docker run --rm --privileged multiarch/qemu-user-static:register --reset
Unable to find image 'multiarch/qemu-user-static:register' locally
是因為 multiarch/qemu-user-static:register 鏡像未找到。我們可以先拉取這個鏡像,然后再運行命令來注冊 QEMU。
注意需要在注冊QEMU之前,先運行這個指令:
sudo docker pull multiarch/qemu-user-static