Files
firezone/rust/Dockerfile
Thomas Eizinger 2dd61d7c5c chore: Support Docker builds of Rust (#10230)
Signed-off-by: Mariusz Klochowicz <mariusz@klochowicz.com>
Co-authored-by: Mariusz Klochowicz <mariusz@klochowicz.com>
2025-09-02 02:21:07 +00:00

85 lines
2.3 KiB
Docker

ARG ALPINE_VERSION="3.20"
ARG PACKAGE
# Base image which is used to run the application binary
FROM alpine:${ALPINE_VERSION} AS runtime_base
ENV LANG=C.UTF-8 \
TERM=xterm \
RUST_BACKTRACE=1 \
RUST_LOG=info
WORKDIR /bin
## curl is needed to run tests (`main` runs CI against `release` images) and `firezone-relay` needs `curl` in its entry script.
RUN apk add --no-cache --update curl
# Gateway specific runtime base image
FROM runtime_base AS runtime_firezone-gateway
## iptables are needed only by gateway for masquerading
RUN apk add --no-cache --update iptables ip6tables
COPY ./docker-init-gateway.sh ./docker-init.sh
# Relay specific runtime base image
FROM runtime_base AS runtime_firezone-relay
COPY ./docker-init-relay.sh ./docker-init.sh
# Headless-client specific runtime base image
FROM runtime_base AS runtime_firezone-headless-client
COPY ./docker-init-client.sh ./docker-init.sh
# HTTP test server specific runtime base image
FROM runtime_base AS runtime_http-test-server
COPY ./docker-init-http-test-server.sh ./docker-init.sh
# Funnel package specific base image back into `runtime`
ARG PACKAGE
FROM runtime_${PACKAGE} AS runtime
ARG PACKAGE
ENTRYPOINT ["docker-init.sh"]
ENV PACKAGE=${PACKAGE}
CMD ${PACKAGE}
# Build an image for GitHub Actions which includes debug asserts and more test utilities
FROM runtime AS debug
RUN apk add --no-cache --update iperf3 bind-tools iproute2 jq procps iptables ethtool
## Build first with `cargo build --target ${TARGET} -p ${PACKAGE} && mv /target/${TARGET}/debug/${PACKAGE} .`
ARG PACKAGE
COPY ${PACKAGE} .
# Build a production image from including a binary compiled on the host
FROM runtime AS release
## Build first with `cargo build --target ${TARGET} -p ${PACKAGE} --release && mv /target/${TARGET}/release/${PACKAGE} .`
ARG PACKAGE
COPY ${PACKAGE} .
FROM runtime AS dev
ARG PACKAGE
ARG RUST_VERSION="1.89.0" # Keep in sync with `rust-toolchain.toml`
WORKDIR /app
RUN apk add --no-cache rustup sccache build-base
RUN /usr/bin/rustup-init -y --default-toolchain ${RUST_VERSION} --profile minimal
# Configure sccache
ENV RUSTC_WRAPPER=sccache
ENV SCCACHE_DIR=/sccache
ENV SCCACHE_CACHE_SIZE=20G
COPY . .
RUN --mount=type=cache,target=./target \
--mount=type=cache,target=/sccache \
/root/.cargo/bin/cargo build -p ${PACKAGE} && \
cp target/debug/${PACKAGE} /bin
WORKDIR /bin