Improve Dockerfile

- Cross-compilation support (amd64 + arm64)
- Use cargo build cache
- Add opencontainers labels
This commit is contained in:
AFCMS 2024-09-26 12:02:20 +02:00 committed by Alejandro González
parent c81a863e69
commit c743af20a8
No known key found for this signature in database
2 changed files with 39 additions and 10 deletions

4
.dockerignore Normal file
View file

@ -0,0 +1,4 @@
scripts
.github
.editorconfig
.pre-commit-hooks.yaml

View file

@ -1,20 +1,45 @@
FROM rust:alpine as base
# syntax=docker/dockerfile:1
FROM --platform=$BUILDPLATFORM tonistiigi/xx AS xx
COPY . /src
FROM --platform=$BUILDPLATFORM rust:1.74-alpine AS base
RUN rustup update 1.74 && rustup default 1.74
RUN apk update \
&& apk add \
RUN apk update && \
apk add \
gcc \
g++
g++ \
clang
RUN cd /src && cargo build --release
COPY --from=xx / /
FROM alpine as tool
ARG TARGETPLATFORM
RUN xx-info env
COPY --from=base /src/target/release/oxipng /usr/local/bin
RUN xx-apk add \
gcc \
musl-dev \
libdeflate
WORKDIR /src
COPY . .
RUN --mount=type=cache,target=/root/.cargo/git/db \
--mount=type=cache,target=/root/.cargo/registry/cache \
--mount=type=cache,target=/root/.cargo/registry/index \
xx-cargo build --release && \
xx-verify /src/target/$(xx-cargo --print-target-triple)/release/oxipng && \
cp /src/target/$(xx-cargo --print-target-triple)/release/oxipng /src/target/oxipng
FROM alpine AS tool
LABEL org.opencontainers.image.title="Oxipng"
LABEL org.opencontainers.image.description="Multithreaded PNG optimizer written in Rust"
LABEL org.opencontainers.image.authors="Joshua Holmer <jholmer.in@gmail.com>"
LABEL org.opencontainers.image.licenses="MIT"
LABEL org.opencontainers.image.source="https://github.com/shssoichiro/oxipng"
COPY --from=base /src/target/oxipng /usr/local/bin
WORKDIR /work
ENTRYPOINT [ "oxipng" ]
CMD [ "--help" ]