M1 Mac で linux/x86_64 の Rust Docker Image を作る | 熱脳しゃちょのブログ

熱脳しゃちょのブログ

おせっかい焼SE兼プログラマ兼……の辛い日々と、思う事なぞ

さほど必要な人はいないかもしれないけど、たまには技術記事も。

 

Buildはこんな感じで、プラットフォームを指定する。

docker buildx build --platform linux/amd64 -t [tag] .

 

で、Dockerfileのほうは

FROM --platform=$BUILDPLATFORM rust:latest AS builder

RUN update-ca-certificates
RUN rustup target add x86_64-unknown-linux-musl
RUN apt update && apt install -y musl-tools musl-dev gcc-x86-64-linux-gnu

WORKDIR /work

COPY Cargo.* .

ENV RUSTFLAGS='-C linker=x86_64-linux-gnu-gcc'
ENV CC='gcc'
ENV CC_x86_64_unknown_linux_musl=x86_64-linux-gnu-gcc
ENV CC_x86_64-unknown-linux-musl=x86_64-linux-gnu-gcc

RUN mkdir -p src \
    && echo 'fn main() {}' > src/main.rs \
    && cargo build --release --target x86_64-unknown-linux-musl \
    && rm -Rf src

COPY src src
RUN cargo build --release --target x86_64-unknown-linux-musl && \
    x86_64-linux-gnu-strip /work/target/x86_64-unknown-linux-musl/release/[bin_file]

FROM --platform=linux/x86_64 [Base Docker Image]
COPY --from=builder \
    /work/target/x86_64-unknown-linux-musl/release/[bin_file] /

EXPOSE 8080
ENTRYPOINT ["/[bin_file]"]

alpine系なのでmusl。

だったと思う。