macro_traffic_sim 0.1.2

gRPC interface for macroscopic traffic simulation via 4-step demand model
Documentation
# Multi-stage Dockerfile to build and run the macro_traffic_sim gRPC server
#
# Build:
# docker build -f Dockerfile.server -t macro-traffic-sim/server:latest .
#
# Run:
# docker run --rm -it --name macro-traffic-sim-server -p 50052:50052 macro-traffic-sim/server:latest
#
# Docker Hub
# docker tag macro-traffic-sim/server:latest dimahkiin/macro-traffic-sim-server:0.1.0
# docker tag macro-traffic-sim/server:latest dimahkiin/macro-traffic-sim-server:latest
# docker push dimahkiin/macro-traffic-sim-server:0.1.0
# docker push dimahkiin/macro-traffic-sim-server:latest

# GitHub Container Registry
# docker tag macro-traffic-sim/server:latest ghcr.io/lddl/macro-traffic-sim-server:0.1.0
# docker tag macro-traffic-sim/server:latest ghcr.io/lddl/macro-traffic-sim-server:latest
# docker push ghcr.io/lddl/macro-traffic-sim-server:0.1.0
# docker push ghcr.io/lddl/macro-traffic-sim-server:latest

# Builder
FROM rust:1.91-alpine AS builder
WORKDIR /app

# Install build dependencies
RUN apk add --no-cache musl-dev protobuf-dev tini-static

# Cache dependency build
COPY Cargo.toml Cargo.lock ./
COPY src/build.rs ./src/build.rs
RUN mkdir -p src && echo "fn main(){}" > src/lib.rs && \
    cargo fetch && \
    cargo build --release --features server || true

# Copy sources and build
COPY src ./src
COPY protos ./protos
RUN cargo build --release --features server && \
    strip target/release/macro_traffic_sim

# Runtime
FROM scratch
LABEL org.opencontainers.image.source="https://github.com/LdDl/macro_traffic_sim_grpc"
LABEL org.opencontainers.image.description="Macroscopic traffic simulation gRPC server"
LABEL org.opencontainers.image.licenses="Apache-2.0"
COPY --from=builder /sbin/tini-static /tini
COPY --from=builder /app/target/release/macro_traffic_sim /macro_traffic_sim
EXPOSE 50052
ENTRYPOINT ["/tini", "--", "/macro_traffic_sim"]