# syntax=docker/dockerfile:1 # ── Stage 1: build ──────────────────────────────────────────────────────────── FROM ros:kilted AS builder SHELL ["/bin/bash", "-c"] RUN apt-get update && apt-get install -y --no-install-recommends \ python3-colcon-common-extensions \ && rm -rf /var/lib/apt/lists/* WORKDIR /ws COPY oled/src/raspbot_oled/ src/raspbot_oled/ RUN source /opt/ros/${ROS_DISTRO}/setup.bash && \ colcon build --packages-select raspbot_oled # ── Stage 2: runtime ────────────────────────────────────────────────────────── FROM ros:kilted-ros-core RUN apt-get update && apt-get install -y --no-install-recommends \ ros-${ROS_DISTRO}-rclpy \ ros-${ROS_DISTRO}-sensor-msgs \ python3-venv \ python3-smbus \ fonts-dejavu-core \ && rm -rf /var/lib/apt/lists/* RUN python3 -m venv /opt/oled-venv --system-site-packages && \ /opt/oled-venv/bin/pip install --no-cache-dir luma.oled psutil COPY --from=builder /ws/install /ws/install RUN echo "source /opt/ros/${ROS_DISTRO}/setup.bash" >> /etc/bash.bashrc && \ echo "source /ws/install/setup.bash" >> /etc/bash.bashrc COPY docker-entrypoint.sh /docker-entrypoint.sh RUN chmod +x /docker-entrypoint.sh ENTRYPOINT ["/docker-entrypoint.sh"] CMD ["/opt/oled-venv/bin/python3", "-m", "raspbot_oled.oled_node"]