Dockerfile.rdma-engine 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. # Multi-stage build for Rust RDMA Engine
  2. FROM rust:1.80-slim AS builder
  3. # Install build dependencies
  4. RUN apt-get update && apt-get install -y \
  5. pkg-config \
  6. libssl-dev \
  7. libudev-dev \
  8. build-essential \
  9. libc6-dev \
  10. linux-libc-dev \
  11. && rm -rf /var/lib/apt/lists/*
  12. # Set work directory
  13. WORKDIR /app
  14. # Copy Rust project files
  15. COPY rdma-engine/Cargo.toml ./
  16. COPY rdma-engine/Cargo.lock ./
  17. COPY rdma-engine/src ./src
  18. # Build the release binary
  19. RUN cargo build --release
  20. # Runtime stage
  21. FROM debian:bookworm-slim
  22. # Install runtime dependencies
  23. RUN apt-get update && apt-get install -y \
  24. ca-certificates \
  25. libssl3 \
  26. curl \
  27. && rm -rf /var/lib/apt/lists/*
  28. # Create app user
  29. RUN useradd -m -u 1001 appuser
  30. # Set work directory
  31. WORKDIR /app
  32. # Copy binary from builder stage
  33. COPY --from=builder /app/target/release/rdma-engine-server .
  34. # Change ownership
  35. RUN chown -R appuser:appuser /app
  36. # Set default socket path (can be overridden)
  37. ENV RDMA_SOCKET_PATH=/tmp/rdma/rdma-engine.sock
  38. # Create socket directory with proper permissions (before switching user)
  39. RUN mkdir -p /tmp/rdma && chown -R appuser:appuser /tmp/rdma
  40. USER appuser
  41. # Expose any needed ports (none for this service as it uses Unix sockets)
  42. # EXPOSE 18515
  43. # Health check - verify both process and socket using environment variable
  44. HEALTHCHECK --interval=5s --timeout=3s --start-period=10s --retries=3 \
  45. CMD pgrep rdma-engine-server >/dev/null && test -S "$RDMA_SOCKET_PATH"
  46. # Default command using environment variable
  47. CMD sh -c "./rdma-engine-server --debug --ipc-socket \"$RDMA_SOCKET_PATH\""