资讯详情

使用docker为slambook2配置环境

📅 2026/10/27 18:53:23 | 华诺云谱 👁 阅读
使用docker为slambook2配置环境
1. 安装与配置Docker安装dockersudo apt update sudo apt install -y ca-certificates curl sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg \ -o /etc/apt/keyrings/docker.asc sudo chmod ar /etc/apt/keyrings/docker.asc添加docker官方软件源sudo tee /etc/apt/sources.list.d/docker.sources /dev/null EOF Types: deb URIs: https://download.docker.com/linux/ubuntu Suites: $(. /etc/os-release echo ${UBUNTU_CODENAME:-$VERSION_CODENAME}) Components: stable Architectures: $(dpkg --print-architecture) Signed-By: /etc/apt/keyrings/docker.asc EOF安装 Docker Engine、Docker Compose 和 Buildxsudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io \ docker-buildx-plugin docker-compose-pluginDocker Engine核心运行环境负责构建、运行和管理容器。Docker Compose用一个 compose.yml 文件定义并一键启动多个协作服务例如 Web、数据库、缓存。Buildx增强版镜像构建器支持多平台镜像如 amd64 与 arm64、更高效缓存等高级构建能力。验证服务与安装结果sudo systemctl is-active docker sudo docker run --rm hello-world分别输出 active 和 Hello from Docker! 即表示安装成功。2. 配置docker代理Docker daemon 不会自动使用终端中的代理环境变量需要单独配置。创建 systemd 配置目录和代理配置文件sudo mkdir -p /etc/systemd/system/docker.service.d sudoedit /etc/systemd/system/docker.service.d/proxy.conf写入以下内容将 127.0.0.1:7897 替换为实际代理地址和端口[Service] EnvironmentHTTP_PROXYhttp://127.0.0.1:7897 EnvironmentHTTPS_PROXYhttp://127.0.0.1:7897 EnvironmentNO_PROXYlocalhost,127.0.0.1,::1重新加载 systemd 并重启 Dockersudo systemctl daemon-reloadsudo systemctl restart docker验证代理配置sudo systemctl show --propertyEnvironment docker sudo docker pull hello-world若镜像可以正常拉取说明 Docker 代理配置生效。3. 获取slambook2的源码cd mkdir slam cd slam git clone --recurse-submodules \ https://github.com/gaoxiang12/slambook2.git \4. 创建算法镜像为 slambook2 构建一张基于 Ubuntu 22.04 ROS 2 Humble Desktop 的派生开发镜像。 Docker 只负责提供稳定、隔离的编译与运行环境源码、数据集、配置、构建缓存和实验结果全部保留在宿主机便于调试、迭代与复现。构建 ROS Humble Desktop 基础镜像创建专用目录mkdir -p /robotics-containers/ros-humble-desktop cd ~/robotics-containers/ros-humble-desktop创建 DockerfileFROM osrf/ros:humble-desktop-full-jammy SHELL [/bin/bash, -o, pipefail, -c] ARG USERNAMEslam ARG USER_UID1000 ARG USER_GID1000 ENV DEBIAN_FRONTENDnoninteractive \ LANGen_US.UTF-8 \ LANGUAGEen_US:en \ LC_ALLen_US.UTF-8 \ ROS_DISTROhumble RUN apt-get update \ apt-get install -y --no-install-recommends \ bash-completion \ build-essential \ ca-certificates \ cmake \ git \ locales \ pkg-config \ python3-argcomplete \ python3-colcon-common-extensions \ python3-rosdep \ python3-vcstool \ sudo \ wget \ locale-gen en_US.UTF-8 \ rm -rf /var/lib/apt/lists/* RUN groupadd --gid ${USER_GID} ${USERNAME} \ useradd --uid ${USER_UID} --gid ${USER_GID} \ --create-home --shell /bin/bash ${USERNAME} \ echo ${USERNAME} ALL(ALL) NOPASSWD:ALL \ /etc/sudoers.d/${USERNAME} \ chmod 0440 /etc/sudoers.d/${USERNAME} WORKDIR /home/${USERNAME} USER ${USERNAME} ENTRYPOINT [/ros_entrypoint.sh] CMD [bash]构建基础镜像sudo docker build \ --build-arg USERNAMEslam \ --build-arg USER_UID$(id -u) \ --build-arg USER_GID$(id -g) \ --tag robotics/ros-humble-desktop:humble-jammy-2026.10.1 \ --file Dockerfile \ .确认镜像构建完成sudo docker image ls robotics/ros-humble-desktop验证容器内用户与 ROS 环境sudo docker run --rm robotics/ros-humble-desktop:humble-jammy-2026.10.1 \ bash -lc id; echo ROS_DISTRO$ROS_DISTRO; ros2 --help /dev/null构建派生镜像创建Dockerfile在~/robotics-containers/slambook2下创建Dockerfile并写入下述内容FROM robotics/ros-humble-desktop:humble-jammy-2026.10.1 SHELL [/bin/bash, -o, pipefail, -c] USER root ARG DEBIAN_FRONTENDnoninteractive # 固定第三方库版本与 slambook2 当前子模块记录对应。 ARG SOPHUS_COMMIT13fb3288311485dc94e3226b69c9b59cd06ff94e ARG G2O_COMMIT9b41a4ea5ade8e1250b9c1b279f3a9c098811b5a ARG PANGOLIN_COMMIT1ec721d59ff6b799b9c24b8817f3b7ad2c929b83 ARG DBOW3_COMMITc5ae539abddcef43ef64fa130555e2d521098369 # 系统依赖覆盖 ch2 至 ch13 的主要编译需求。 RUN apt-get update \ apt-get install -y --no-install-recommends \ build-essential \ cmake \ ninja-build \ git \ pkg-config \ libeigen3-dev \ libopencv-dev \ libceres-dev \ libsuitesparse-dev \ libboost-all-dev \ libgoogle-glog-dev \ libgflags-dev \ libgtest-dev \ libpcl-dev \ liboctomap-dev \ libgl1-mesa-dev \ libglu1-mesa-dev \ libglvnd-dev \ libglew-dev \ freeglut3-dev \ libx11-dev \ libxcursor-dev \ libxi-dev \ libxinerama-dev \ libxrandr-dev \ libavcodec-dev \ libavformat-dev \ libavutil-dev \ libswscale-dev \ libjpeg-dev \ libpng-dev \ libtiff-dev \ libopenexr-dev \ rm -rf /var/lib/apt/lists/* # Sophus RUN git clone https://github.com/strasdat/Sophus.git /tmp/Sophus \ git -C /tmp/Sophus checkout ${SOPHUS_COMMIT} \ cmake -S /tmp/Sophus -B /tmp/Sophus/build -G Ninja \ -DCMAKE_BUILD_TYPERelease \ -DBUILD_TESTINGOFF \ -DBUILD_SOPHUS_EXAMPLESOFF \ cmake --build /tmp/Sophus/build --parallel \ cmake --install /tmp/Sophus/build \ rm -rf /tmp/Sophus # g2o RUN git clone https://github.com/RainerKuemmerle/g2o.git /tmp/g2o \ git -C /tmp/g2o checkout ${G2O_COMMIT} \ cmake -S /tmp/g2o -B /tmp/g2o/build -G Ninja \ -DCMAKE_BUILD_TYPERelease \ -DG2O_BUILD_APPSOFF \ -DG2O_BUILD_EXAMPLESOFF \ -DG2O_BUILD_TESTSOFF \ -DG2O_BUILD_SLAM2D_TYPESON \ -DG2O_BUILD_SLAM3D_TYPESON \ -DG2O_BUILD_SBA_TYPESON \ -DG2O_USE_CHOLMODON \ cmake --build /tmp/g2o/build --parallel \ cmake --install /tmp/g2o/build \ rm -rf /tmp/g2o # Pangolin RUN git clone https://github.com/stevenlovegrove/Pangolin.git /tmp/Pangolin \ git -C /tmp/Pangolin checkout ${PANGOLIN_COMMIT} \ cmake -S /tmp/Pangolin -B /tmp/Pangolin/build -G Ninja \ -DCMAKE_BUILD_TYPERelease \ -DBUILD_EXAMPLESOFF \ -DBUILD_TESTSOFF \ -DBUILD_TOOLSOFF \ cmake --build /tmp/Pangolin/build --parallel \ cmake --install /tmp/Pangolin/build \ rm -rf /tmp/Pangolin # DBoW3关闭共享库确保 ch11 所需的 libDBoW3.a 被安装到 /usr/local/lib。 RUN git clone https://github.com/rmsalinas/DBow3.git /tmp/DBoW3 \ git -C /tmp/DBoW3 checkout ${DBOW3_COMMIT} \ cmake -S /tmp/DBoW3 -B /tmp/DBoW3/build -G Ninja \ -DCMAKE_BUILD_TYPERelease \ -DBUILD_SHARED_LIBSOFF \ cmake --build /tmp/DBoW3/build --parallel \ cmake --install /tmp/DBoW3/build \ rm -rf /tmp/DBoW3 # 让运行时动态链接器发现 /usr/local/lib 下的新共享库。 RUN ldconfig # 不复制 slambook2 源码、数据、配置或输出。 USER slam WORKDIR /home/slam构建镜像sudo docker build \ --tag robotics/slambook2:humble-jammy-2026.10.1 \ .进行镜像sudo docker run --rm -it \ --mount typebind,src/home/cp/learn/slam/slambook2,dst/workspace/src,readonly \ --mount typebind,src/home/cp/outputs/slambook2,dst/workspace/output \ robotics/slambook2:humble-jammy-2026.10.1 \ bash配置与编译源码sudo docker run -d \ --name slambook2-dev \ --mount typebind,src/home/cp/workspaces/slambook2,dst/workspace/src,readonly \ --mount typebind,src/home/cp/outputs/slambook2,dst/workspace/output \ $IMAGE \ sleep infinity查看实际输入输出绑定sudo docker inspect slambook2-dev \ --format {{range .Mounts}}{{printf %s - %s type%s rw%t\n .Source .Destination .Type .RW}}{{end}}确认无误后先编译 ch2。它只验证最基础的 CMake/C不依赖数据集sudo docker run -d \ --name slambook2-dev \ --mount typebind,src/home/cp/workspaces/slambook2,dst/workspace/src,readonly \ --mount typebind,src/home/cp/outputs/slambook2,dst/workspace/output \ $IMAGE \ sleep infinity结果测试sudo docker exec slambook2-dev \ /workspace/output/build/ch2/helloSLAM关闭容器sudo docker stop slambook2-dev
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑