|
1 | | -# VEDS Route Optimizer - Dockerfile |
| 1 | +# SPDX-License-Identifier: MIT OR AGPL-3.0 |
| 2 | +# VEDS Route Optimizer - Distroless Container |
2 | 3 | # Multi-stage build for minimal production image |
3 | 4 |
|
| 5 | +# ============================================================================= |
4 | 6 | # Build stage |
5 | | -FROM rust:1.75-bookworm as builder |
| 7 | +# ============================================================================= |
| 8 | +FROM rust:1.75-bookworm AS builder |
6 | 9 |
|
7 | 10 | WORKDIR /app |
8 | 11 |
|
9 | 12 | # Install protobuf compiler |
10 | | -RUN apt-get update && apk add --no-cache -y protobuf-compiler && rm -rf /var/lib/apt/lists/* |
| 13 | +RUN apt-get update && \ |
| 14 | + apt-get install -y --no-install-recommends protobuf-compiler && \ |
| 15 | + rm -rf /var/lib/apt/lists/* |
11 | 16 |
|
12 | | -# Copy manifests |
| 17 | +# Copy manifests first for dependency caching |
13 | 18 | COPY Cargo.toml Cargo.lock ./ |
14 | 19 |
|
15 | 20 | # Create dummy src to cache dependencies |
16 | 21 | RUN mkdir -p src proto && \ |
17 | 22 | echo "fn main() {}" > src/main.rs && \ |
18 | 23 | echo 'syntax = "proto3"; package dummy;' > proto/optimizer.proto |
19 | 24 |
|
20 | | -# Build dependencies (cached) |
| 25 | +# Build dependencies (cached layer) |
21 | 26 | RUN cargo build --release && rm -rf src proto |
22 | 27 |
|
23 | 28 | # Copy actual source |
24 | 29 | COPY . . |
25 | 30 |
|
26 | | -# Touch main.rs to force rebuild |
| 31 | +# Touch main.rs to force rebuild with actual source |
27 | 32 | RUN touch src/main.rs |
28 | 33 |
|
29 | 34 | # Build release binary |
30 | 35 | RUN cargo build --release |
31 | 36 |
|
32 | | -# Runtime stage |
33 | | -FROM cgr.dev/chainguard/wolfi-base:bookworm-slim |
| 37 | +# ============================================================================= |
| 38 | +# Runtime stage - Distroless |
| 39 | +# ============================================================================= |
| 40 | +FROM gcr.io/distroless/cc-debian12:nonroot |
34 | 41 |
|
35 | 42 | WORKDIR /app |
36 | 43 |
|
37 | | -# Install runtime dependencies |
38 | | -RUN apt-get update && \ |
39 | | - apk add --no-cache -y ca-certificates && \ |
40 | | - rm -rf /var/lib/apt/lists/* |
41 | | - |
42 | 44 | # Copy binary from builder |
43 | 45 | COPY --from=builder /app/target/release/veds-optimizer /app/veds-optimizer |
44 | 46 |
|
45 | | -# Create non-root user |
46 | | -RUN useradd -r -s /bin/false veds |
47 | | -USER veds |
48 | | - |
49 | 47 | # Expose ports |
50 | 48 | EXPOSE 50051 8090 |
51 | 49 |
|
52 | | -# Health check |
53 | | -HEALTHCHECK --interval=30s --timeout=3s --start-period=5s \ |
54 | | - CMD curl -f http://localhost:8090/health || exit 1 |
| 50 | +# Run as nonroot user (uid 65532) |
| 51 | +USER nonroot |
| 52 | + |
| 53 | +# Distroless has no shell, so no HEALTHCHECK possible here |
| 54 | +# Health checks are defined in docker-compose.yml |
55 | 55 |
|
56 | 56 | # Run |
57 | | -CMD ["/app/veds-optimizer"] |
| 57 | +ENTRYPOINT ["/app/veds-optimizer"] |
0 commit comments