bag_recorder_backend

2.3 KBOCKERFILE
Dockerfile
2.3 KB90 lines • plaintext
1ARG ROS_DISTRO=humble
2
3FROM ros:${ROS_DISTRO}-ros-base AS builder
4
5RUN apt-get update && apt-get install -y --no-install-recommends \
6    build-essential \
7    cmake \
8    git \
9    python3-rosdep \
10    && rm -rf /var/lib/apt/lists/*
11
12# Install Crow (header-only web framework) - not available via rosdep
13RUN apt-get update && apt-get install -y --no-install-recommends \
14    libasio-dev \
15    libboost-system-dev \
16    libboost-date-time-dev \
17    && rm -rf /var/lib/apt/lists/* \
18    && git clone --depth 1 --branch v1.0+5 https://github.com/CrowCpp/Crow.git /tmp/crow \
19    && cd /tmp/crow \
20    && mkdir build && cd build \
21    && cmake .. -DCROW_BUILD_EXAMPLES=OFF -DCROW_BUILD_TESTS=OFF \
22    && make install \
23    && rm -rf /tmp/crow
24
25WORKDIR /ros2_ws/src
26
27COPY . bag_recorder_backend/
28
29WORKDIR /ros2_ws
30RUN apt-get update \
31    && rosdep update \
32    && rosdep install --from-paths src --ignore-src -r -y \
33    && rm -rf /var/lib/apt/lists/*
34
35# Build the package
36RUN . /opt/ros/${ROS_DISTRO}/setup.sh && \
37    colcon build --packages-select bag_recorder_backend \
38    --cmake-args -DCMAKE_BUILD_TYPE=Release
39
40FROM ros:${ROS_DISTRO}-ros-base AS runtime
41
42# Install runtime dependencies only
43RUN apt-get update && apt-get install -y --no-install-recommends \
44    ros-${ROS_DISTRO}-rosbag2-cpp \
45    ros-${ROS_DISTRO}-rosbag2-storage \
46    ros-${ROS_DISTRO}-rosbag2-storage-default-plugins \
47    tar \
48    && rm -rf /var/lib/apt/lists/*
49
50# Copy built artifacts from builder stage
51COPY --from=builder /ros2_ws/install /ros2_ws/install
52
53# Create default output directory
54RUN mkdir -p /tmp/rosbags && chmod 755 /tmp/rosbags
55
56# Create non-root user for security
57RUN useradd -m -s /bin/bash rosuser && \
58    chown -R rosuser:rosuser /tmp/rosbags
59
60# Environment variables
61ENV SERVER_PORT=8080
62ENV OUTPUT_DIR=/tmp/rosbags
63ENV ROS_DOMAIN_ID=0
64
65# Expose the server port
66EXPOSE 8080
67
68# Setup entrypoint
69COPY <<'EOF' /entrypoint.sh
70#!/bin/bash
71set -e
72
73# Source ROS2 setup
74source /opt/ros/${ROS_DISTRO}/setup.bash
75source /ros2_ws/install/setup.bash
76
77# Run the bag recorder node with parameters
78exec ros2 run bag_recorder_backend bag_recorder_node --ros-args \
79    -p server_port:=${SERVER_PORT} \
80    -p output_directory:=${OUTPUT_DIR} \
81    -p enable_cors:=true
82EOF
83
84RUN chmod +x /entrypoint.sh
85
86# Run as non-root user
87USER rosuser
88
89ENTRYPOINT ["/entrypoint.sh"]
90