push registry
This commit is contained in:
Executable
BIN
Binary file not shown.
Executable
+63
@@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
|
||||
#//// GREG POUR LE GARAGE NUMERIQUE \\\\#
|
||||
|
||||
# Ce script fonctionne avec le docker-compose.yml du projet https://gitlab.com/greglebreton/docker.git -> branche docker-registry
|
||||
# Ce script maintient un registre privée accueillant des sauvegardes de conteneurs quotidiennement de manière automatisée.
|
||||
# Le delta est exprimé en jour et est effectué par comparaison entre la date du jour et la date d'enregistrement de l'image.
|
||||
|
||||
date=$(date +"%Y-%m-%d")
|
||||
|
||||
# A RENSEIGNER
|
||||
## chemin vers le dossier docker cloné sans le dernier /
|
||||
registryPath=""
|
||||
## exemple monRegistreDocker.monDomaine.com
|
||||
dockerRegistryAdress=""
|
||||
## nombre de jours de sauvegarde à conserver par rapport à la date du jour (à ajuster si les sauvegardes ne sont pas quotidiennes)
|
||||
max=""
|
||||
## registres à ignorer
|
||||
exceptions=( "container1" "container2" )
|
||||
|
||||
###################################################################################################
|
||||
|
||||
echo "docker clean start..."
|
||||
|
||||
## DOCKER LIST IMG REGISTRY
|
||||
registry=$(ls $registryPath/registry-data/docker/registry/v2/repositories/)
|
||||
|
||||
## DOCKER LIST TAGS FOR EACH REPO
|
||||
for repo in $registry
|
||||
do
|
||||
for ex in ${exceptions[@]}
|
||||
do
|
||||
if [ $repo == $ex ]
|
||||
then
|
||||
break
|
||||
else
|
||||
tags=$(ls $registryPath/registry-data/docker/registry/v2/repositories/$repo/_manifests/tags/)
|
||||
|
||||
for tag in $tags
|
||||
do
|
||||
datebackup=$(stat -c '%w' $registryPath/registry-data/docker/registry/v2/repositories/$repo/_manifests/tags/$tag)
|
||||
gooddatebackup="${datebackup:0:10}"
|
||||
|
||||
echo $gooddatebackup
|
||||
|
||||
if [ ${tag:0:2} == "01" ]
|
||||
then
|
||||
break
|
||||
else
|
||||
let delta=($(date +%s -d $date)-$(date +%s -d $gooddatebackup))/86400
|
||||
|
||||
if [ $delta -gt $max ]
|
||||
then
|
||||
echo "$dockerRegistryAdress/$repo:$tag deleted!"
|
||||
regctl tag rm $dockerRegistryAdress/$repo:$tag
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
echo "registre nettoyé"
|
||||
Executable
+89
@@ -0,0 +1,89 @@
|
||||
#!/bin/bash
|
||||
|
||||
#//// GREG POUR LE GARAGE NUMERIQUE \\\\#
|
||||
|
||||
# Script automatisant le push de conteneur vers un registre privé de backups ainsi que les volumes correspondants.
|
||||
# Le docker login au registre doit être effectué au moins une fois manuellement.
|
||||
# Configurer l'adresse du registre ainsi que les informations sur le serveur de backups
|
||||
# Les volumes et labels sont archivés et transférés par ssh vers le serveur de backup une fois par mois (le 1er).
|
||||
|
||||
############################## CONFIG ##############################
|
||||
|
||||
date=`date +%d-%m`
|
||||
# dockerregistry="monregistre.mondomaine.com"
|
||||
dockerregistry=""
|
||||
# sshHost="user@server-IP"
|
||||
sshHost=""
|
||||
# sshPort=9999
|
||||
sshPort=
|
||||
backupFolder="~/docker-volumes-backup/"
|
||||
# exceptions=( "container1" "container2")
|
||||
#exceptions=( "" )
|
||||
|
||||
############################## CONTAINERS BACKUP ##############################
|
||||
|
||||
# LISTING DES CONTAINERS
|
||||
stack=$(docker ps -aq)
|
||||
|
||||
for container in $stack
|
||||
do
|
||||
echo "backup du conteneur $container"
|
||||
# GET CONTAINER NAME
|
||||
docker inspect --format='{{.Name}}' $container > containers.txt
|
||||
containerName=$(sed 's/[/]*//' containers.txt)
|
||||
|
||||
for exception in ${exceptions[@]}
|
||||
do
|
||||
if [ $container == $exception ]
|
||||
then
|
||||
break
|
||||
else
|
||||
# COMMIT AND PUSH TO REGSTRY
|
||||
docker container commit $container $dockerregistry$containerName-backup:$date
|
||||
docker push $dockerregistry$containerName-backup:$date
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
# CLEANING
|
||||
rm -rf containers.txt
|
||||
|
||||
############################## VOLUMES & LABELS BACKUP ##############################
|
||||
|
||||
if [ ${date:0:02} == "01" ]
|
||||
then
|
||||
# LISTING DES VOLUMES
|
||||
volumes=$(docker volume ls -q)
|
||||
|
||||
for volume in $volumes
|
||||
do
|
||||
echo "backup du volume $volume"
|
||||
|
||||
# GET CONTAINER ID
|
||||
containerId=$(docker ps -a -q --filter volume=$volume)
|
||||
# GET CONTAINER NAME
|
||||
docker inspect --format='{{.Name}}' $containerId > volumes.txt
|
||||
container=$(sed 's/[/]*//' volumes.txt)
|
||||
|
||||
# STOP THE CONTAINER (FOR VOLUMES INTEGRITY)
|
||||
docker stop $container
|
||||
# BACKUP VOLUME IN ARCHIVE
|
||||
docker run -v $volume:/volume -v $(pwd)/backup:/backup --rm loomchild/volume-backup backup volumes/$container-volume:$date
|
||||
# BACKUP DOCKER VOLUMES LABELS
|
||||
docker inspect $volume -f "{{json .Labels}}" > backup/labels/$container-labels.json
|
||||
# RESTART THE CONTAINER
|
||||
docker start $container
|
||||
|
||||
# CLEANING
|
||||
rm -rf volumes.txt
|
||||
done
|
||||
|
||||
# MV VOLUMES & LABELS BACKUP TO BACKUP HOST
|
||||
scp -r -P $sshPort $(pwd)/backup/* $sshHost:$backupFolder
|
||||
# CLEANING
|
||||
rm -rf containers.txt; rm -rf $(pwd)/backup/volumes/*; rm -rf $(pwd)/backup/labels/*
|
||||
|
||||
echo "copie des archives de volumes vers le serveur de backup ok"
|
||||
fi
|
||||
|
||||
echo "backup des containers terminée"
|
||||
Reference in New Issue
Block a user