Docker进阶——多容器编排和机器人仿真环境搭建

📅 2026/7/23 21:50:02
Docker进阶——多容器编排和机器人仿真环境搭建
面试翻车现场上篇讲了Docker基础有读者问机器人系统那么复杂一个容器够吗确实不够。一个完整的机器人系统通常包含多个组件导航、感知、规划、控制、仿真器……每个组件都有各自的依赖。如果全塞进一个容器镜像会很大而且难以维护。Docker Compose可以解决这个问题——用多个容器分别运行不同的组件统一管理。今天咱们聊聊Docker进阶用法。Docker Compose多容器编排Docker Compose是一个工具用YAML文件定义和运行多容器应用。安装Docker Composesudo apt install docker-compose-plugin创建一个docker-compose.yml文件version: 3.8 services: ros-master: image: osrf/ros:humble-desktop-full container_name: ros_master command: ros2 run demo_nodes_cpp talker networks: - robot_net robot-node: image: osrf/ros:humble-desktop-full container_name: robot_node command: ros2 run demo_nodes_py listener networks: - robot_net depends_on: - ros-master networks: robot_net: driver: bridge启动所有服务docker-compose up -d # -d表示后台运行查看状态docker-compose ps # 列出所有容器 docker-compose logs # 查看所有日志 docker-compose logs -f robot-node # 实时跟踪某个服务的日志停止所有服务docker-compose down机器人仿真环境搭建用Docker搭建Gazebo仿真环境需要处理图形显示的问题。方法1使用X11转发version: 3.8 services: gazebo: image: osrf/ros:humble-desktop-full container_name: gazebo_sim environment: - DISPLAY$DISPLAY - QT_X11_NO_MITSHM1 volumes: - /tmp/.X11-unix:/tmp/.X11-unix:rw command: ros2 launch gazebo_ros gazebo.launch.py network_mode: host启动前需要允许本地X server连接xhost local:docker方法2使用noVNC浏览器访问如果机器人没有显示器可以用noVNC通过浏览器访问图形界面version: 3.8 services: gazebo: image: tiryoh/ros2-desktop-vnc:humble container_name: gazebo_vnc ports: - 6080:80 # noVNC端口 environment: - RESOLUTION1920x1080 shm_size: 2gb # 共享内存Gazebo需要启动后浏览器访问http://localhost:6080就能看到Gazebo界面。GPU加速容器里用显卡机器人仿真需要GPU加速。Docker默认不支持GPU需要安装NVIDIA Container Toolkit# 安装NVIDIA驱动和CUDA宿主机 # 然后安装NVIDIA Container Toolkit distribution$(. /etc/os-release;echo $ID$VERSION_ID) curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list sudo apt update sudo apt install -y nvidia-container-toolkit sudo systemctl restart docker在docker-compose.yml里启用GPUservices: gazebo: image: osrf/ros:humble-desktop-full deploy: resources: reservations: devices: - driver: nvidia count: 1 capabilities: [gpu]或者用docker rundocker run --gpus all -it osrf/ros:humble-desktop-full bash数据持久化和共享多个容器需要共享数据时用命名卷named volumeversion: 3.8 services: robot1: image: robot-dev:v1 volumes: - shared_data:/data robot2: image: robot-dev:v1 volumes: - shared_data:/data volumes: shared_data: driver: local driver_opts: type: none o: bind device: /home/robot/shared这样两个容器都能访问/home/robot/shared目录。和机器人开发的关系Docker Compose在机器人开发中的典型应用多机器人仿真每个机器人一个容器共享网络模拟多机器人协作场景。分离开发和仿真开发容器编译代码仿真容器运行Gazebo通过共享卷或网络通信。CI/CD流水线代码提交后自动在容器里编译、测试确保每次提交都在干净环境里验证。快速部署开发环境打包成镜像部署到机器人上也是同一套镜像避免环境差异导致的问题。面试常见考点Docker Compose和Docker的区别——Docker是单容器管理工具Docker Compose是多容器编排工具。Compose用YAML文件定义多个服务一条命令启动所有容器。容器之间怎么通信——同一个docker-compose网络里的容器可以用容器名作为主机名互相访问。比如robot-node可以通过ros-master这个主机名访问另一个容器。怎么在容器里使用GPU——安装NVIDIA Container Toolkit运行时加--gpus all参数或在compose文件里配置GPU资源。Docker容器数据怎么持久化——用数据卷volume或绑定挂载bind mount。容器删除后数据卷里的数据还在。Docker Compose与多容器编排实际机器人系统中通常有多个组件需要协同运行比如感知节点、规划节点、控制节点等。Docker Compose可以用一个YAML文件定义所有服务一条命令全部启动。配置中关键是设置好容器间的网络通信用networks定义自定义网络容器之间通过服务名互相访问。面试时如果被问到容器编排能说出Compose的基本用法就足够了。给你的建议Docker Compose是多容器编排的标准工具做机器人开发值得学习。先从简单的开始用Compose管理ROS2节点和仿真器。熟悉后再尝试更复杂的场景比如多机器人仿真、CI/CD流水线。GPU加速对仿真很重要。如果你的机器人需要跑Gazebo一定要配置NVIDIA Container Toolkit否则仿真会卡成PPT。数据持久化别忘了配置。容器删除后数据就没了用volume把重要数据保存到宿主机。上一篇第96篇 Docker入门——机器人开发环境的隔离与复现下一篇预告第98篇 Git基础——add/commit/push/branch的正确使用姿势