Skip to content

Robot Operating System (ROS) and Docker

Setup

Docker images

# ROS 1
docker pull osrf/ros:noetic-desktop-full-focal

# ROS 2
docker pull osrf/ros:foxy-desktop-focal
docker pull osrf/ros:humble-desktop-full-jammy
docker pull osrf/ros:jazzy-desktop-full-noble

# List local Docker images
docker images

Dockerfiles

Example

FROM osrf/ros:humble-desktop-full-jammy

# Set environment variables
ENV DEBIAN_FRONTEND=noninteractive
ENV ROS_DISTRO=humble
ENV USER=user
ENV HOME=/home/$USER

# Install additional packages
RUN apt-get update && apt-get install -y \
  sudo \
  curl \
  wget \
  git \
  nano \
  neovim \
  python3-pip \
  python3-colcon-common-extensions \
  python3-rosdep \
  python3-vcstool \
  bash-completion \
  && rm -rf /var/lib/apt/lists/*

# Create user and home directory
RUN useradd -m -d $HOME -s /bin/bash $USER && \
  echo "$USER:$USER" | chpasswd && \
  usermod -aG sudo $USER && \
  echo "$USER ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

# ROS 2
USER $USER
WORKDIR $HOME

RUN mkdir -p $HOME/ros_ws/src

RUN echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> $HOME/.bashrc && \
  echo "source $HOME/ros_ws/install/setup.bash" >> $HOME/.bashrc

# Initialize rosdep
USER root
RUN rosdep init || true
USER $USER
RUN rosdep update

# Set working directory to home and default command
WORKDIR $HOME
CMD ["/bin/bash"]

Build

docker build -t <name:tag> -f <filename>.Dockerfile .

Run

# Automatically remove the container and its anonymous volumes when it exits
docker run --rm -it <name:tag> bash