-
Notifications
You must be signed in to change notification settings - Fork 80
Expand file tree
/
Copy pathDockerfile
More file actions
90 lines (75 loc) · 2.92 KB
/
Dockerfile
File metadata and controls
90 lines (75 loc) · 2.92 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#
# Builder image
#
FROM golang:1.21.5-alpine3.17 AS builder
ARG RESTIC_VERSION=0.18.1
ARG RESTIC_SHA256_AMD64=680838f19d67151adba227e1570cdd8af12c19cf1735783ed1ba928bc41f363d
ARG RESTIC_SHA256_ARM=1ead22ca3b123f11cd1ce74ba4079c324aa616efb25227c715471420a1c2a364
ARG RESTIC_SHA256_ARM64=87f53fddde38764095e9c058a3b31834052c37e5826d2acf34e18923c006bd45
ARG RCLONE_VERSION=1.72.0
# These are the checksums for the zip files
ARG RCLONE_SHA256_AMD64=f3757aa829828c0f3359301bea25eef4d4fd62de735c47546ee6866c5b5545e2
ARG RCLONE_SHA256_ARM=531c4a98de3b4287b2caabbc15d914c608a151cb69a661a0a4dc47542d1cf5ab
ARG RCLONE_SHA256_ARM64=c1669ef42d4ad65e3bb3f2cf0b2acf76cf0cbffefe463349a4f2244d8dbed701
ARG GO_CRON_VERSION=0.0.4
ARG GO_CRON_SHA256=6c8ac52637150e9c7ee88f43e29e158e96470a3aaa3fcf47fd33771a8a76d959
RUN apk add --no-cache curl
RUN case "$(uname -m)" in \
x86_64 ) \
echo amd64 >/tmp/ARCH \
;; \
armv7l) \
echo arm >/tmp/ARCH \
;; \
aarch64) \
echo arm64 >/tmp/ARCH \
;; \
esac
RUN case "$(cat /tmp/ARCH)" in \
amd64 ) \
echo "${RESTIC_SHA256_AMD64}" > RESTIC_SHA256 ; \
echo "${RCLONE_SHA256_AMD64}" > RCLONE_SHA256 ; \
;; \
arm ) \
echo "${RESTIC_SHA256_ARM}" > RESTIC_SHA256 ; \
echo "${RCLONE_SHA256_ARM}" > RCLONE_SHA256 ; \
;; \
arm64 ) \
echo "${RESTIC_SHA256_ARM64}" > RESTIC_SHA256 ; \
echo "${RCLONE_SHA256_ARM64}" > RCLONE_SHA256 ; \
;; \
*) \
echo "unknown architecture '$(cat /tmp/ARCH)'" ; \
exit 1 ; \
;; \
esac
RUN curl -sL --fail -o restic.bz2 https://github.com/restic/restic/releases/download/v${RESTIC_VERSION}/restic_${RESTIC_VERSION}_linux_$(cat /tmp/ARCH).bz2 \
&& echo "$(cat RESTIC_SHA256) restic.bz2" | sha256sum -c - \
&& bzip2 -d -v restic.bz2 \
&& mv restic /usr/local/bin/restic \
&& chmod +x /usr/local/bin/restic
RUN curl -sL --fail -o rclone.zip https://github.com/rclone/rclone/releases/download/v${RCLONE_VERSION}/rclone-v${RCLONE_VERSION}-linux-$(cat /tmp/ARCH).zip \
&& echo "$(cat RCLONE_SHA256) rclone.zip" | sha256sum -c - \
&& unzip rclone.zip \
&& mv rclone-v${RCLONE_VERSION}-linux-$(cat /tmp/ARCH)/rclone /usr/local/bin/rclone \
&& chmod +x /usr/local/bin/rclone \
&& rm -rf rclone-v${RCLONE_VERSION}-linux-$(cat /tmp/ARCH) \
&& rm rclone.zip
RUN curl -sL -o go-cron.tar.gz https://github.com/djmaze/go-cron/archive/v${GO_CRON_VERSION}.tar.gz \
&& echo "${GO_CRON_SHA256} go-cron.tar.gz" | sha256sum -c - \
&& tar xzf go-cron.tar.gz \
&& cd go-cron-${GO_CRON_VERSION} \
&& go build \
&& mv go-cron /usr/local/bin/go-cron \
&& cd .. \
&& rm go-cron.tar.gz go-cron-${GO_CRON_VERSION} -fR
#
# Final image
#
FROM alpine:3.22
RUN apk add --update --no-cache ca-certificates fuse nfs-utils openssh tzdata bash curl docker-cli gzip tini
ENV RESTIC_REPOSITORY=/mnt/restic
COPY --from=builder /usr/local/bin/* /usr/local/bin/
COPY backup prune check /usr/local/bin/
COPY entrypoint /
ENTRYPOINT ["/sbin/tini", "--", "/entrypoint"]