⚠ CRITICAL: I have only tested this with Compose, and you must set both DOCKER_BUILDKIT and COMPOSE_DOCKER_CLI_BUILD to 1.
Example:
DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker-compose build| # syntax=docker/dockerfile-upstream:experimental | |
| # WARNING: THE LINE ABOVE CANNOT BE REMOVED | |
| # Note: Remember to change the workdir & paths that use "trakor/inkress" | |
| # https://stackoverflow.com/q/54952867 | |
| # https://github.com/rust-lang/cargo/issues/2644#issuecomment-436907777 | |
| # -------------------------------- | |
| # building in this image | |
| # -------------------------------- | |
| FROM alpine:3.12 as builder | |
| ENV RUSTUP_HOME=/usr/local/rustup \ | |
| CARGO_HOME=/usr/local/cargo \ | |
| PATH=/usr/local/cargo/bin:$PATH \ | |
| RUST_VERSION=1.45.0 | |
| # install required dependencies | |
| RUN apk add --update \ | |
| && apk add --no-cache ca-certificates \ | |
| && apk add --no-cache --virtual .build-deps curl gcc build-base libressl-dev openssl-dev | |
| # install rust toolchain | |
| RUN curl https://sh.rustup.rs -sSf > rustup-init \ | |
| && chmod +x rustup-init \ | |
| && ./rustup-init -y --no-modify-path --profile minimal --default-toolchain $RUST_VERSION \ | |
| && rm rustup-init | |
| # setting the work dir | |
| WORKDIR code/trakor/inkress | |
| COPY . . | |
| # Build with mounted cache | |
| RUN --mount=type=cache,target=target \ | |
| --mount=type=cache,target=/usr/local/cargo/git \ | |
| --mount=type=cache,target=/usr/local/cargo/registry \ | |
| cargo build --release | |
| # Copy binaries into normal layers | |
| RUN --mount=type=cache,target=target \ | |
| cp ./target/release/inkress /usr/local/bin/inkress | |
| # -------------------------------- | |
| # copy the binaries | |
| # -------------------------------- | |
| FROM alpine:3.12 | |
| COPY --from=builder /usr/local/bin/inkress /usr/local/bin/inkress | |
| COPY .env . | |
| # RUN chmod +x /usr/local/bin/inkress | |
| CMD ["inkress"] |