# https://github.com/f2calv/multi-arch-container-rust/blob/main/Dockerfile
# https://hub.docker.com/hardened-images/catalog/dhi/rust/guides
# sudo docker buildx build --platform linux/amd64,linux/arm64 -t hkj:latest --output type=image,compression=zstd .
FROM --platform=${BUILDPLATFORM} rust:1-trixie AS builder
# FROM --platform=${BUILDPLATFORM} m.daocloud.io/docker.io/library/rust:1-trixie AS builder
# FROM --platform=${BUILDPLATFORM} dhi.io/rust:1-debian13-dev AS builder # no rustup
ARG TARGETPLATFORM
ARG BUILDPLATFORM
WORKDIR /app
RUN \
# sed -i "s@http://deb.debian.org@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list.d/debian.sources && \
apt-get update && if [ "${TARGETPLATFORM}" != "${BUILDPLATFORM}" ]; then \
if [ "${TARGETPLATFORM}" = "linux/amd64" ]; then \
dpkg --add-architecture amd64 && \
apt-get install -y crossbuild-essential-amd64 && \
rustup target add x86_64-unknown-linux-gnu ; \
elif [ "${TARGETPLATFORM}" = "linux/arm64" ]; then \
dpkg --add-architecture arm64 && \
apt-get install -y crossbuild-essential-arm64 && \
rustup target add aarch64-unknown-linux-gnu ; \
fi \
fi && apt-get update && apt-get install -y cmake pkg-config && \
if [ "${TARGETPLATFORM}" = "linux/amd64" ]; then \
apt-get install -y libzstd-dev:amd64 libssl-dev:amd64 ; \
elif [ "${TARGETPLATFORM}" = "linux/arm64" ]; then \
apt-get install -y libzstd-dev:arm64 libssl-dev:arm64 ; \
fi
RUN --mount=type=bind,source=src,target=src \
--mount=type=bind,source=Cargo.toml,target=Cargo.toml \
--mount=type=bind,source=Cargo.lock,target=Cargo.lock \
--mount=type=bind,source=.cargo/config.toml,target=.cargo/config.toml \
--mount=type=cache,target=/app/target/ \
--mount=type=cache,target=/usr/local/cargo/git/db \
--mount=type=cache,target=/usr/local/cargo/registry/ \
if [ "${TARGETPLATFORM}" = "linux/amd64" ]; then \
export CARGO_BUILD_TARGET=x86_64-unknown-linux-gnu ; \
export CARGO_TARGET_X86_64_UNKNOWN_LINUX_GNU_LINKER=x86_64-linux-gnu-gcc ; \
export CC_X86_64_UNKNOWN_LINUX_GNU=x86_64-linux-gnu-gcc ; \
export CXX_X86_64_UNKNOWN_LINUX_GNU=x86_64-linux-gnu-g++ ; \
export CC=x86_64-linux-gnu-gcc ; \
export CXX=x86_64-linux-gnu-g++ ; \
elif [ "${TARGETPLATFORM}" = "linux/arm64" ]; then \
export CARGO_BUILD_TARGET=aarch64-unknown-linux-gnu ; \
export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc ; \
export CC_AARCH64_UNKNOWN_LINUX_GNU=aarch64-linux-gnu-gcc ; \
export CXX_AARCH64_UNKNOWN_LINUX_GNU=aarch64-linux-gnu-g++ ; \
export CC=aarch64-linux-gnu-gcc ; \
export CXX=aarch64-linux-gnu-g++ ; \
fi && cargo build --release && mv "/app/target/${CARGO_BUILD_TARGET}/release/hkj" /usr/local/bin/hkj
# FROM debian:trixie-slim
FROM dhi.io/debian-base:trixie
# FROM m.daocloud.io/dhi.io/debian-base:trixie
COPY --link --from=builder /usr/local/bin/hkj /usr/local/bin/hkj
CMD ["hkj"]