mirror of
https://github.com/offen/docker-volume-backup.git
synced 2025-12-05 17:18:02 +01:00
Compare commits
4 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ac3a231d2b | ||
|
|
054ab8fbe6 | ||
|
|
fa356137e8 | ||
|
|
07befda44d |
@@ -48,7 +48,7 @@ jobs:
|
|||||||
docker context create docker-volume-backup
|
docker context create docker-volume-backup
|
||||||
docker buildx create docker-volume-backup --name docker-volume-backup --use
|
docker buildx create docker-volume-backup --name docker-volume-backup --use
|
||||||
docker buildx inspect --bootstrap
|
docker buildx inspect --bootstrap
|
||||||
docker buildx build --platform linux/arm64,linux/amd64 \
|
docker buildx build --platform linux/amd64,linux/arm64,linux/arm/v7 \
|
||||||
-t offen/docker-volume-backup:$CIRCLE_TAG \
|
-t offen/docker-volume-backup:$CIRCLE_TAG \
|
||||||
-t offen/docker-volume-backup:latest \
|
-t offen/docker-volume-backup:latest \
|
||||||
. --push
|
. --push
|
||||||
|
|||||||
12
Dockerfile
12
Dockerfile
@@ -1,5 +1,9 @@
|
|||||||
# Copyright 2021 - Offen Authors <hioffen@posteo.de>
|
# Copyright 2021 - Offen Authors <hioffen@posteo.de>
|
||||||
# SPDX-License-Identifier: MIT
|
# SPDX-License-Identifier: MPL-2.0
|
||||||
|
|
||||||
|
FROM golang:1.16-alpine as builder
|
||||||
|
ARG MC_VERSION=RELEASE.2021-06-13T17-48-22Z
|
||||||
|
RUN go install -ldflags "-X github.com/minio/mc/cmd.ReleaseTag=$MC_VERSION" github.com/minio/mc@$MC_VERSION
|
||||||
|
|
||||||
FROM alpine:3.14
|
FROM alpine:3.14
|
||||||
|
|
||||||
@@ -9,10 +13,8 @@ RUN apk add --update ca-certificates docker openrc gnupg
|
|||||||
RUN update-ca-certificates
|
RUN update-ca-certificates
|
||||||
RUN rc-update add docker boot
|
RUN rc-update add docker boot
|
||||||
|
|
||||||
ARG TARGETARCH=amd64
|
COPY --from=builder /go/bin/mc /usr/bin/mc
|
||||||
RUN wget https://dl.min.io/client/mc/release/linux-$TARGETARCH/mc && \
|
RUN mc --version
|
||||||
chmod +x mc && \
|
|
||||||
mv mc /usr/bin/mc
|
|
||||||
|
|
||||||
COPY src/backup.sh src/entrypoint.sh /root/
|
COPY src/backup.sh src/entrypoint.sh /root/
|
||||||
RUN chmod +x backup.sh && mv backup.sh /usr/bin/backup \
|
RUN chmod +x backup.sh && mv backup.sh /usr/bin/backup \
|
||||||
|
|||||||
@@ -106,6 +106,12 @@ volumes:
|
|||||||
data:
|
data:
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Using with Docker Swarm
|
||||||
|
|
||||||
|
By default, Docker Swarm will restart stopped containers automatically, even when manually stopped. If you plan to have your containers / services stopped during backup, this means you need to apply the `on-failure` restart policy to your service's definitions. A restart policy of `always` is not compatible with this tool.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Differences to `futurice/docker-volume-backup`
|
## Differences to `futurice/docker-volume-backup`
|
||||||
|
|
||||||
This image is heavily inspired by the `futurice/docker-volume-backup`. We decided to publish this image as a simpler and more lightweight alternative because of the following requirements:
|
This image is heavily inspired by the `futurice/docker-volume-backup`. We decided to publish this image as a simpler and more lightweight alternative because of the following requirements:
|
||||||
@@ -114,4 +120,5 @@ This image is heavily inspired by the `futurice/docker-volume-backup`. We decide
|
|||||||
- This image makes use of the MinIO client `mc` instead of the full blown AWS CLI for uploading backups.
|
- This image makes use of the MinIO client `mc` instead of the full blown AWS CLI for uploading backups.
|
||||||
- The original image proposed to handle backup rotation through AWS S3 lifecycle policies. This image adds the option to rotate old backups through the same script so this functionality can also be offered for non-AWS storage backends like MinIO.
|
- The original image proposed to handle backup rotation through AWS S3 lifecycle policies. This image adds the option to rotate old backups through the same script so this functionality can also be offered for non-AWS storage backends like MinIO.
|
||||||
- InfluxDB specific functionality was removed.
|
- InfluxDB specific functionality was removed.
|
||||||
- `arm64` Architecture is supported.
|
- `arm64` and `arm/v7` architectures are supported.
|
||||||
|
- Docker in Swarm mode is supported.
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ if [ "$CONTAINERS_TO_STOP_TOTAL" != "0" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
info "Creating backup"
|
info "Creating backup"
|
||||||
BACKUP_FILENAME="$(date +"${BACKUP_FILENAME:-backup-%Y-%m-%dT%H-%M-%S.tar.gz}")"
|
BACKUP_FILENAME="$(date +"$BACKUP_FILENAME")"
|
||||||
tar -czvf "$BACKUP_FILENAME" $BACKUP_SOURCES # allow the var to expand, in case we have multiple sources
|
tar -czvf "$BACKUP_FILENAME" $BACKUP_SOURCES # allow the var to expand, in case we have multiple sources
|
||||||
|
|
||||||
if [ ! -z "$GPG_PASSPHRASE" ]; then
|
if [ ! -z "$GPG_PASSPHRASE" ]; then
|
||||||
@@ -51,8 +51,31 @@ if [ ! -z "$GPG_PASSPHRASE" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$CONTAINERS_TO_STOP_TOTAL" != "0" ]; then
|
if [ "$CONTAINERS_TO_STOP_TOTAL" != "0" ]; then
|
||||||
info "Starting containers back up"
|
info "Starting containers/services back up"
|
||||||
docker start $CONTAINERS_TO_STOP
|
# The container might be part of a stack when running in swarm mode, so
|
||||||
|
# its parent service needs to be restarted instead once backup is finished.
|
||||||
|
SERVICES_REQUIRING_UPDATE=""
|
||||||
|
for CONTAINER_ID in $CONTAINERS_TO_STOP; do
|
||||||
|
SWARM_SERVICE_NAME=$(
|
||||||
|
docker inspect \
|
||||||
|
--format "{{ index .Config.Labels \"com.docker.swarm.service.name\" }}" \
|
||||||
|
$CONTAINER_ID
|
||||||
|
)
|
||||||
|
if [ -z "$SWARM_SERVICE_NAME" ]; then
|
||||||
|
echo "Restarting $(docker start $CONTAINER_ID)"
|
||||||
|
else
|
||||||
|
echo "Removing $(docker rm $CONTAINER_ID)"
|
||||||
|
# Multiple containers might belong to the same service, so they will
|
||||||
|
# be restarted only after all names are known.
|
||||||
|
SERVICES_REQUIRING_UPDATE="${SERVICES_REQUIRING_UPDATE} ${SWARM_SERVICE_NAME}"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "$SERVICES_REQUIRING_UPDATE" ]; then
|
||||||
|
for SERVICE_NAME in "$(echo -n "$SERVICES_REQUIRING_UPDATE" | tr ' ' '\n' | sort -u)"; do
|
||||||
|
docker service update --force $SERVICE_NAME
|
||||||
|
done
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ ! -z "$AWS_S3_BUCKET_NAME" ]; then
|
if [ ! -z "$AWS_S3_BUCKET_NAME" ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user