From 586220b85fa8f91701e602f4034422f4c844c143 Mon Sep 17 00:00:00 2001 From: Thomas Enzinger Date: Sun, 19 Nov 2017 00:02:21 +0100 Subject: [PATCH 01/11] migrate from ubuntu to alpine:3.6 + small changes --- build.sh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 build.sh diff --git a/build.sh b/build.sh new file mode 100644 index 0000000..183a3eb --- /dev/null +++ b/build.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# get location of script +SOURCE="${BASH_SOURCE[0]}" +while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink + DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + SOURCE="$(readlink "$SOURCE")" + [[ $SOURCE != /* ]] && SOURCE="$DIR/$SOURCE" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located +done +DIR="$( cd -P "$( dirname "$SOURCE" )" && pwd )" + +# +if [ -z "$1" ] ; then + docker build -t docker_volume_backup "$DIR" +else + docker build -t docker_volume_backup "$1" +fi From c2e92438856066b840c90b3e5e5513ac1f6caa2d Mon Sep 17 00:00:00 2001 From: Thomas Enzinger Date: Sun, 19 Nov 2017 00:22:39 +0100 Subject: [PATCH 02/11] migrate from ubuntu to alpine:3.6 + small changes (2) --- Dockerfile | 20 +++++++++----------- README.md | 35 +++++++++++++++++++++++++++++------ build.sh | 0 docker_volume_backup.sh | 7 ++++--- 4 files changed, 42 insertions(+), 20 deletions(-) mode change 100644 => 100755 build.sh diff --git a/Dockerfile b/Dockerfile index 440d157..996f4f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,16 +1,14 @@ -FROM ubuntu:xenial -MAINTAINER Kevin Wittek +FROM alpine:3.6 +RUN apk update +RUN apk add docker +RUN apk add py-pip -RUN apt update && apt -y install apt-transport-https ca-certificates curl -RUN apt-key adv \ - --keyserver hkp://ha.pool.sks-keyservers.net:80 \ - --recv-keys 58118E89F3A912897C070ADBF76221572C52609D -RUN echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | tee /etc/apt/sources.list.d/docker.list -RUN apt update && apt -y install docker-engine -RUN curl -L https://github.com/docker/compose/releases/download/1.9.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose -RUN chmod +x /usr/local/bin/docker-compose +RUN pip install docker-compose +RUN apk add bash + +RUN rm -rf /var/cache/apk/* COPY docker_volume_backup.sh / -ENTRYPOINT ["/docker_volume_backup.sh", "/project/docker-compose.yml"] \ No newline at end of file +ENTRYPOINT ["/docker_volume_backup.sh", "/project/docker-compose.yml"] diff --git a/README.md b/README.md index e2744fe..7220c26 100644 --- a/README.md +++ b/README.md @@ -20,12 +20,35 @@ Restore ``` ./docker_volume_backup.sh /home/kiview/Gitlab/docker-compose.yml gitlab $(pwd)/backup restore 2016-10-19 ``` + ## Docker Container Usage -After building your container, you can use it like this: + +After building your container, + +``` +docker build -t docker_volume_backup . +``` + +you can use it like this: + ``` -docker run -v "/home/kiview/Gitlab/:/project" \ - -v "$(pwd)/backup:/backup" \ - -v /var/run/docker.sock:/var/run/docker.sock \ - docker_volume_backup:latest Gitlab /backup backup +PROJECT_DIR # path to directory that contains the docker files, e.g. docker-compose.yml, Dockerfile, ... +PROJECT_NAME # Name of the docker container, default is the directory name where docker-compose.yml is stored +BACKUP_DIR # directory where the tar-files are stored / readed +MODE # backup or restore +DATE # if MODE=backup than the date who should restore + +docker run \ + -v "$PROJECT_DIR:/project" \ + -v "$BACKUP_DIR:/backup" \ + -v /var/run/docker.sock:/var/run/docker.sock \ + docker_volume_backup:latest $PROJECT_NAME /backup $MODE + +docker run \ + -v "$PROJECT_DIR:/project" \ + -v "$BACKUP_DIR:/backup" \ + -v /var/run/docker.sock:/var/run/docker.sock \ + docker_volume_backup:latest $PROJECT_NAME /backup $MODE $DATE ``` -Note you don't need to provide the path to docker-compose.yml. It is assumed to be mounted under /project/docker-compose.yml. \ No newline at end of file + +Note you don't need to provide the path to docker-compose.yml. It is assumed to be mounted under /project/docker-compose.yml. diff --git a/build.sh b/build.sh old mode 100644 new mode 100755 diff --git a/docker_volume_backup.sh b/docker_volume_backup.sh index 91940f2..2ee253f 100755 --- a/docker_volume_backup.sh +++ b/docker_volume_backup.sh @@ -1,5 +1,6 @@ #!/bin/bash +alpine=alpine:3.6 compose_file_path=$1 project_name=${2,,} backup_path=$3 @@ -13,7 +14,7 @@ function backup_volume { backup_destination=$2 date_suffix=$(date -I) - docker run --rm -v $volume_name:/data -v $backup_destination:/backup ubuntu tar -zcvf /backup/$volume_name-$date_suffix.tar /data + docker run --rm -v $volume_name:/data -v $backup_destination:/backup $alpine tar -zcvf /backup/$volume_name-$date_suffix.tar /data } function restore_volume { @@ -21,8 +22,8 @@ function restore_volume { backup_destination=$2 date=$3 - docker run --rm -v $volume_name:/data ubuntu find /data -mindepth 1 -delete - docker run --rm -v $volume_name:/data -v $backup_destination:/backup ubuntu tar -xvf /backup/$volume_name-$date.tar -C . + docker run --rm -v $volume_name:/data $alpine find /data -mindepth 1 -delete + docker run --rm -v $volume_name:/data -v $backup_destination:/backup $alpine tar -xvf /backup/$volume_name-$date.tar -C . } function main { From 006b5ae069f2d5fd3c4bf529c1e2741f7d8ba6ed Mon Sep 17 00:00:00 2001 From: Thomas Enzinger Date: Sun, 19 Nov 2017 11:44:49 +0100 Subject: [PATCH 03/11] bug fix, some volumes are ignored --- README.md | 4 +++- docker_volume_backup.sh | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 7220c26..471f5ca 100644 --- a/README.md +++ b/README.md @@ -36,14 +36,16 @@ PROJECT_DIR # path to directory that contains the docker files, e.g. docker-co PROJECT_NAME # Name of the docker container, default is the directory name where docker-compose.yml is stored BACKUP_DIR # directory where the tar-files are stored / readed MODE # backup or restore -DATE # if MODE=backup than the date who should restore +DATE # if MODE=restore than the date who should restore +# $MODE=backup docker run \ -v "$PROJECT_DIR:/project" \ -v "$BACKUP_DIR:/backup" \ -v /var/run/docker.sock:/var/run/docker.sock \ docker_volume_backup:latest $PROJECT_NAME /backup $MODE +# $MODE=restore docker run \ -v "$PROJECT_DIR:/project" \ -v "$BACKUP_DIR:/backup" \ diff --git a/docker_volume_backup.sh b/docker_volume_backup.sh index 2ee253f..424a787 100755 --- a/docker_volume_backup.sh +++ b/docker_volume_backup.sh @@ -31,7 +31,9 @@ function main { docker-compose -f $compose_file_path -p $project_name stop echo "Mounting volumes and performing backup/restore..." - volumes=($(docker volume ls -f name=$project_name | awk '{if (NR > 1) print $2}')) + declare -a volumes=() + readarray -t volumes < <(docker volume ls -f name=$project_name | awk '{if (NR > 1) print $2}') + for v in "${volumes[@]}" do if [ "$backup_or_restore" == "backup" ] From c1aecd01cb7e995879471a344146388eacb6fbfe Mon Sep 17 00:00:00 2001 From: Thomas Enzinger Date: Sun, 19 Nov 2017 12:15:09 +0100 Subject: [PATCH 04/11] add note do Readme --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 471f5ca..d0140b6 100644 --- a/README.md +++ b/README.md @@ -3,21 +3,22 @@ Scripts for easy backup and restore of Docker volumes ## Usage -``` +```bash ./docker_volume_backup.sh {compose_file_path} {project_name} {backup_path} {backup_or_restore} {restore_date} ``` +Note: The compose file is not parsed yet. The containing scripts only wokrs with default names for the volumes (containers). Check after each update manuelly if the script works correctly. ## Examples Backup -``` +```bash ./docker_volume_backup.sh /home/kiview/Gitlab/docker-compose.yml gitlab $(pwd)/backup backup ``` Restore -``` +```bash ./docker_volume_backup.sh /home/kiview/Gitlab/docker-compose.yml gitlab $(pwd)/backup restore 2016-10-19 ``` @@ -25,13 +26,13 @@ Restore After building your container, -``` +```bash docker build -t docker_volume_backup . ``` you can use it like this: -``` +```bash PROJECT_DIR # path to directory that contains the docker files, e.g. docker-compose.yml, Dockerfile, ... PROJECT_NAME # Name of the docker container, default is the directory name where docker-compose.yml is stored BACKUP_DIR # directory where the tar-files are stored / readed From 8f381770239f35b88a7c2c41a8eefa5254b024e7 Mon Sep 17 00:00:00 2001 From: Thomas Enzinger Date: Sun, 19 Nov 2017 14:29:29 +0100 Subject: [PATCH 05/11] add docker_full_backup.sh --- Dockerfile | 11 +++-- docker_full_backup.sh | 106 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 112 insertions(+), 5 deletions(-) create mode 100755 docker_full_backup.sh diff --git a/Dockerfile b/Dockerfile index 996f4f9..fe9dc04 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,14 +1,15 @@ FROM alpine:3.6 +MAINTAINER Kevin Wittek RUN apk update RUN apk add docker RUN apk add py-pip - -RUN pip install docker-compose RUN apk add bash - +RUN apk add gzip RUN rm -rf /var/cache/apk/* -COPY docker_volume_backup.sh / +RUN pip install docker-compose -ENTRYPOINT ["/docker_volume_backup.sh", "/project/docker-compose.yml"] +COPY docker_volume_backup.sh / +COPY docker_backup_script.sh / +ENTRYPOINT ["/docker_volume_backup.sh", "/project/docker-compose.yml", "/docker_backup_script.sh"] diff --git a/docker_full_backup.sh b/docker_full_backup.sh new file mode 100755 index 0000000..bf8e5c9 --- /dev/null +++ b/docker_full_backup.sh @@ -0,0 +1,106 @@ +#!/bin/bash + +alpine=alpine:3.6 +cdir=containers +vdir=volumes +compose_file_path=$1 +project_name=${2,,} +backup_path=$3 +backup_or_restore=$4 +restore_date=$5 + +set -e + +function backup_volume { + volume_name=$1 + backup_destination=$2 + date_suffix=$(date -I) + + docker run --rm -v $volume_name:/data -v $backup_destination:/backup $alpine tar -zcvf /backup/$vdir/$volume_name-$date_suffix.tar.gz /data +} + +function backup_container { + container_id=$1 + backup_destination=$2 + date_suffix=$(date -I) + fname="$backup_destination/$cdir/$container_id-$date_suffix.tar.gz" + + docker export $container_id | gzip > $fname +} + +function restore_volume { + volume_name=$1 + backup_destination=$2 + date=$3 + + docker run --rm -v $volume_name:/data $alpine find /data -mindepth 1 -delete + docker run --rm -v $volume_name:/data -v $backup_destination:/backup $alpine tar -xvf /backup/$vdir/$volume_name-$date.tar.gz -C . +} + +function restore_container { + container_id=$1 + backup_destination=$2 + date=$3 + fname="$backup_destination/$cdir/$container_id-$date_suffix.tar.gz" + + ["$(docker ps -a | grep $container_id)"] && docker rm -f $container_id + gunzip -c $fname | docker load +} + + +function main { + echo "Docker backup script for project: $project_name" + echo " mode: $backup_or_restore" + + if [ "$backup_or_restore" == "backup" ] ; then + mkdir -p $backup_path/$cdir + mkdir -p $backup_path/$vdir + fi + + echo " stopping running containers" + docker-compose -f $compose_file_path -p $project_name stop + + echo " enter container images" + #declare -a containers=() + #readarray -t containers < <(docker container ls --all -f name=$project_name | awk '{if (NR > 1) print $1}') + #for c in "${containers[@]}" + #do + docker ps --all --quiet -f name=$project_name | while read -sr c ; do + if [ "$backup_or_restore" == "backup" ] + then + echo " perform container backup: $c" + backup_container $c $backup_path + fi + + if [ "$backup_or_restore" == "restore" ] + then + echo " restore container from backup: $c" + restore_container $c $backup_path $restore_date + fi + done + + echo " mounting volumes and performing backup/restore..." + declare -a volumes=() + readarray -t volumes < <(docker volume ls -f name=$project_name | awk '{if (NR > 1) print $2}') + + for v in "${volumes[@]}" + do + if [ "$backup_or_restore" == "backup" ] + then + echo " perform volume backup: $v" + backup_volume $v $backup_path + fi + + if [ "$backup_or_restore" == "restore" ] + then + echo " restore volume from backup: $v" + restore_volume $v $backup_path $restore_date + fi + done + + echo " restarting containers" + docker-compose -f $compose_file_path -p $project_name start + echo "finished" +} + +main From 8a8c5c8ba411f2a013c690304a188a7642273a81 Mon Sep 17 00:00:00 2001 From: Thomas Enzinger Date: Sun, 19 Nov 2017 15:37:35 +0100 Subject: [PATCH 06/11] add default values for mode and date --- docker_full_backup.sh | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/docker_full_backup.sh b/docker_full_backup.sh index bf8e5c9..8e6fbb3 100755 --- a/docker_full_backup.sh +++ b/docker_full_backup.sh @@ -6,15 +6,14 @@ vdir=volumes compose_file_path=$1 project_name=${2,,} backup_path=$3 -backup_or_restore=$4 -restore_date=$5 +backup_or_restore=${4:-backup} +date_suffix=${5:-$(date -I)} set -e function backup_volume { volume_name=$1 backup_destination=$2 - date_suffix=$(date -I) docker run --rm -v $volume_name:/data -v $backup_destination:/backup $alpine tar -zcvf /backup/$vdir/$volume_name-$date_suffix.tar.gz /data } @@ -22,7 +21,6 @@ function backup_volume { function backup_container { container_id=$1 backup_destination=$2 - date_suffix=$(date -I) fname="$backup_destination/$cdir/$container_id-$date_suffix.tar.gz" docker export $container_id | gzip > $fname @@ -31,7 +29,7 @@ function backup_container { function restore_volume { volume_name=$1 backup_destination=$2 - date=$3 + date=$date_suffix docker run --rm -v $volume_name:/data $alpine find /data -mindepth 1 -delete docker run --rm -v $volume_name:/data -v $backup_destination:/backup $alpine tar -xvf /backup/$vdir/$volume_name-$date.tar.gz -C . @@ -40,7 +38,7 @@ function restore_volume { function restore_container { container_id=$1 backup_destination=$2 - date=$3 + date=$date_suffix fname="$backup_destination/$cdir/$container_id-$date_suffix.tar.gz" ["$(docker ps -a | grep $container_id)"] && docker rm -f $container_id @@ -75,7 +73,7 @@ function main { if [ "$backup_or_restore" == "restore" ] then echo " restore container from backup: $c" - restore_container $c $backup_path $restore_date + restore_container $c $backup_path fi done @@ -94,12 +92,16 @@ function main { if [ "$backup_or_restore" == "restore" ] then echo " restore volume from backup: $v" - restore_volume $v $backup_path $restore_date + restore_volume $v $backup_path fi done echo " restarting containers" docker-compose -f $compose_file_path -p $project_name start + + # write date_id to file + echo "$date_suffix" >> "$backup_path/stored-backups.ids" + echo "finished" } From 5d556f62c1e23fb358ef87a4168a82affe2e5292 Mon Sep 17 00:00:00 2001 From: Thomas Enzinger Date: Sun, 19 Nov 2017 15:59:49 +0100 Subject: [PATCH 07/11] add project name to id file --- docker_full_backup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docker_full_backup.sh b/docker_full_backup.sh index 8e6fbb3..a544d54 100755 --- a/docker_full_backup.sh +++ b/docker_full_backup.sh @@ -100,7 +100,7 @@ function main { docker-compose -f $compose_file_path -p $project_name start # write date_id to file - echo "$date_suffix" >> "$backup_path/stored-backups.ids" + echo "$date_suffix $project_name" >> "$backup_path/stored-backups.ids" echo "finished" } From c3997744f2422810d43fc8040c56dbc3e4904675 Mon Sep 17 00:00:00 2001 From: Thomas Enzinger Date: Mon, 20 Nov 2017 13:47:18 +0100 Subject: [PATCH 08/11] fix Dockerfile-Entrypoint for docker_full_backup.sh --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index fe9dc04..c0925c2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,4 +12,4 @@ RUN pip install docker-compose COPY docker_volume_backup.sh / COPY docker_backup_script.sh / -ENTRYPOINT ["/docker_volume_backup.sh", "/project/docker-compose.yml", "/docker_backup_script.sh"] +ENTRYPOINT ["/docker_volume_backup.sh", "/project/docker-compose.yml", "/docker_full_backup.sh"] From 5834dab6a23c5394e11014f622acecb6702d6e47 Mon Sep 17 00:00:00 2001 From: Thomas Enzinger Date: Mon, 20 Nov 2017 16:15:02 +0100 Subject: [PATCH 09/11] fix (2) Dockerfile-Entrypoint for docker_full_backup.sh --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index c0925c2..f6bbf0f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -11,5 +11,5 @@ RUN rm -rf /var/cache/apk/* RUN pip install docker-compose COPY docker_volume_backup.sh / -COPY docker_backup_script.sh / +COPY docker_full_backup.sh / ENTRYPOINT ["/docker_volume_backup.sh", "/project/docker-compose.yml", "/docker_full_backup.sh"] From fd54711ac0667900e01a6bd5616158bc73fad6f0 Mon Sep 17 00:00:00 2001 From: Thomas Enzinger Date: Mon, 20 Nov 2017 17:48:50 +0100 Subject: [PATCH 10/11] add exclude variables --- README.md | 1 - docker_full_backup.sh | 29 +++++++++++++++++++++-------- docker_volume_backup.sh | 11 ++++++----- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index d0140b6..79de7d5 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,6 @@ Scripts for easy backup and restore of Docker volumes ```bash ./docker_volume_backup.sh {compose_file_path} {project_name} {backup_path} {backup_or_restore} {restore_date} ``` -Note: The compose file is not parsed yet. The containing scripts only wokrs with default names for the volumes (containers). Check after each update manuelly if the script works correctly. ## Examples diff --git a/docker_full_backup.sh b/docker_full_backup.sh index a544d54..d25e0fd 100755 --- a/docker_full_backup.sh +++ b/docker_full_backup.sh @@ -9,6 +9,9 @@ backup_path=$3 backup_or_restore=${4:-backup} date_suffix=${5:-$(date -I)} +DO_CONTAINER=${EXCLUDE_CONTAINER:-0} +DO_VOLUMES=${EXCLUDE_VOLUMES:-0} + set -e function backup_volume { @@ -49,7 +52,7 @@ function restore_container { function main { echo "Docker backup script for project: $project_name" echo " mode: $backup_or_restore" - + if [ "$backup_or_restore" == "backup" ] ; then mkdir -p $backup_path/$cdir mkdir -p $backup_path/$vdir @@ -58,12 +61,16 @@ function main { echo " stopping running containers" docker-compose -f $compose_file_path -p $project_name stop + if [ $DO_CONTAINER != 0 ] ; then + echo " container are excluded" + else echo " enter container images" #declare -a containers=() #readarray -t containers < <(docker container ls --all -f name=$project_name | awk '{if (NR > 1) print $1}') #for c in "${containers[@]}" #do - docker ps --all --quiet -f name=$project_name | while read -sr c ; do + #docker ps --all --quiet -f name=$project_name | while read -sr c ; do + docker-compose -f $compose_file_path -p $project_name ps -q | while read -sr c ; do if [ "$backup_or_restore" == "backup" ] then echo " perform container backup: $c" @@ -76,13 +83,18 @@ function main { restore_container $c $backup_path fi done + fi + if [ $DO_VOLUMES != 0 ] ; then + echo " volumes are excluded" + else echo " mounting volumes and performing backup/restore..." - declare -a volumes=() - readarray -t volumes < <(docker volume ls -f name=$project_name | awk '{if (NR > 1) print $2}') - - for v in "${volumes[@]}" - do + #declare -a volumes=() + #readarray -t volumes < <(docker volume ls -f name=$project_name | awk '{if (NR > 1) print $2}') + #for v in "${volumes[@]}" ; do + docker-compose -f $compose_file_path -p $project_name config --volumes | while read -sr line ; do + # TODO: if it possible to get volumes ID's, put it in here! + v="${project_name}_$line" if [ "$backup_or_restore" == "backup" ] then echo " perform volume backup: $v" @@ -92,9 +104,10 @@ function main { if [ "$backup_or_restore" == "restore" ] then echo " restore volume from backup: $v" - restore_volume $v $backup_path + restore_volume $v $backup_path fi done + fi echo " restarting containers" docker-compose -f $compose_file_path -p $project_name start diff --git a/docker_volume_backup.sh b/docker_volume_backup.sh index 424a787..eb78bec 100755 --- a/docker_volume_backup.sh +++ b/docker_volume_backup.sh @@ -31,11 +31,12 @@ function main { docker-compose -f $compose_file_path -p $project_name stop echo "Mounting volumes and performing backup/restore..." - declare -a volumes=() - readarray -t volumes < <(docker volume ls -f name=$project_name | awk '{if (NR > 1) print $2}') - - for v in "${volumes[@]}" - do + #declare -a volumes=() + #readarray -t volumes < <(docker volume ls -f name=$project_name | awk '{if (NR > 1) print $2}') + #for v in "${volumes[@]}" ; do + docker-compose -f $compose_file_path -p $project_name config --volumes | while read -sr line ; do + # TODO: if it possible to get volumes ID's, put it in here! + v="${project_name}_$line" if [ "$backup_or_restore" == "backup" ] then echo "Perform backup" From 07c055bdd8d629c21717b13dee4a34afdcd546b0 Mon Sep 17 00:00:00 2001 From: Thomas Enzinger Date: Mon, 20 Nov 2017 17:59:09 +0100 Subject: [PATCH 11/11] change Readme --- README.md | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 79de7d5..18ba1e3 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,14 @@ Scripts for easy backup and restore of Docker volumes ```bash ./docker_volume_backup.sh {compose_file_path} {project_name} {backup_path} {backup_or_restore} {restore_date} +# or +./docker_full_backup.sh {compose_file_path} {project_name} {backup_path} {backup_or_restore} {restore_date} ``` ## Examples +### docker_volume_backup.sh + Backup ```bash @@ -21,12 +25,30 @@ Restore ./docker_volume_backup.sh /home/kiview/Gitlab/docker-compose.yml gitlab $(pwd)/backup restore 2016-10-19 ``` +### docker_full_backup.sh + +```bash +MODE=backup # or restore + +path=/opt/mydocker/project1/docker-compose.yml +project=project1 +BACKUP_DIR=/tmp/mybackups +DATE=xxxx-xx-xx + +#export EXCLUDE_CONTAINER=1 +#export EXCLUDE_VOLUMES=1 + +./docker_full_backup.sh $path $project $BACKUP_DIR $MODE $DATE +``` + ## Docker Container Usage After building your container, ```bash docker build -t docker_volume_backup . +# or +./build.sh ``` you can use it like this: @@ -38,14 +60,7 @@ BACKUP_DIR # directory where the tar-files are stored / readed MODE # backup or restore DATE # if MODE=restore than the date who should restore -# $MODE=backup -docker run \ - -v "$PROJECT_DIR:/project" \ - -v "$BACKUP_DIR:/backup" \ - -v /var/run/docker.sock:/var/run/docker.sock \ - docker_volume_backup:latest $PROJECT_NAME /backup $MODE - -# $MODE=restore +# $MODE=backup --> $DATE is ignored docker run \ -v "$PROJECT_DIR:/project" \ -v "$BACKUP_DIR:/backup" \