restic/docker/Dockerfile.release
ferringb 87f26accb7
feat: add integrated nice and ionice options for docker (#5448)
The intended usage here is to basically kick restic as a background
"do it, but don't bother my normal load" process.

This allows passing the following environment variables in to
influence scheduling:

- NICE: usual CPU nice.  Defaults to 0.  This requires CAP_SYS_NICE
  to set a negative nice (IE, prioritize).
- IONICE_CLASS: usual ionice class.  Note that setting realtime
  requires CAP_SYS_ADMIN.  Also note the actual ionice default
  is "none".
- IONICE_PRIORITY: set the priority within the given class.  Ignored
  if no class is specified due to class default of "no scheduler".

---------

Signed-off-by: Brian Harring <ferringb@gmail.com>
Co-authored-by: Michael Eischer <michael.eischer@fau.de>
2025-11-16 16:42:33 +01:00

32 lines
No EOL
1.2 KiB
Docker

# the official binaries are cross-built from Linux running on an AMD64 host
# other architectures also seem to generate identical binaries but stay on the safe side
FROM --platform=linux/amd64 restic/builder:latest AS helper
ARG TARGETOS
ARG TARGETARCH
COPY --chown=build . /restic
RUN go run helpers/build-release-binaries/main.go --platform $TARGETOS/$TARGETARCH --skip-compress
RUN mv /output/restic_${TARGETOS}_${TARGETARCH} /output/restic
FROM alpine:latest
LABEL org.opencontainers.image.title="restic"
LABEL org.opencontainers.image.description="Fast, secure, efficient backup program"
LABEL org.opencontainers.image.url="https://restic.net"
LABEL org.opencontainers.image.documentation="https://restic.readthedocs.io"
LABEL org.opencontainers.image.source="https://github.com/restic/restic"
COPY --from=helper /output/restic /usr/bin
COPY ./docker/entrypoint.sh /entrypoint.sh
RUN apk add --no-cache ca-certificates fuse openssh-client tzdata jq
# IO class default is "none"- 0, however busybox rejects ionice `-c0 -n<something>`
# since priority has no meaning for no scheduler.
# Thus the entrypoint script below is necessary.
ENV IONICE_CLASS=
ENV IONICE_PRIORITY=4
ENV NICE=0
ENTRYPOINT ["/entrypoint.sh"]