Compare commits
1 Commits
Author | SHA1 | Date |
---|---|---|
GregLebreton | 21738aa5cc | 2 years ago |
@ -1,69 +0,0 @@ |
|||||||
# DOCKER REGISTRE AVEC UI |
|
||||||
|
|
||||||
Ce projet a pour but d'instancier un registre Docker sécurisé par mot de passe et |
|
||||||
accessible via une UI. Votre Docker Hub! |
|
||||||
|
|
||||||
### CREATION D'UN PASSWORD: |
|
||||||
|
|
||||||
Ici, remplacer testuser et testpassword par le nom d'utilisateur et le mot de passe désiré. |
|
||||||
```sh |
|
||||||
sudo apt-get install apache2-utils |
|
||||||
htpasswd -Bbn testuser testpassword > auth/htpasswd |
|
||||||
``` |
|
||||||
|
|
||||||
### LANCER LA STACK |
|
||||||
```sh |
|
||||||
docker-compose up -d |
|
||||||
``` |
|
||||||
|
|
||||||
### SE CONNECTER A L'ADRESSE: |
|
||||||
http://locahost:8087 |
|
||||||
|
|
||||||
### POUSSER UNE IMAGE: |
|
||||||
|
|
||||||
Login au docker registry (nécessaire une fois): |
|
||||||
```sh |
|
||||||
docker login localhost:5000 |
|
||||||
``` |
|
||||||
|
|
||||||
Entrer l'utilisateur et le mot de passe créés plus tôt, puis: |
|
||||||
```sh |
|
||||||
docker tag localhost/mon_image:tag |
|
||||||
docker push localhost/mon_image:tag |
|
||||||
``` |
|
||||||
### MAINTENACE REGISTRE: |
|
||||||
|
|
||||||
Dans le dossier utils du projet, vous trouverez des scripts de maintenance de votre registre. Ils nécessitent des champs à renseigner tel que l'adresse du registre ou le chemin de stockage de votre volume contenant les images du registre. |
|
||||||
|
|
||||||
#### STACK-BACKUP-REGISTRY |
|
||||||
|
|
||||||
1) Renseigner lURL du registre |
|
||||||
|
|
||||||
2) Créer un crontab pour sauvegarde quotidienne: |
|
||||||
```bash |
|
||||||
crontab -e |
|
||||||
``` |
|
||||||
|
|
||||||
3) Configurer l'heure de sauvegarde (ici, à 00h00 chaque jours): |
|
||||||
```bash |
|
||||||
0 0 * * * /path/docker/utils/stack-backup-registry.sh |
|
||||||
``` |
|
||||||
|
|
||||||
#### REGISTRY-IMAGE-CLEANING |
|
||||||
|
|
||||||
1) Copier regctl: |
|
||||||
```bash |
|
||||||
sudo mv utils/regctl /usr/bin/ |
|
||||||
``` |
|
||||||
|
|
||||||
2) Renseigner /path/docker/utils/registry-image-cleaning.sh |
|
||||||
|
|
||||||
3) Créer une crontab: |
|
||||||
```bash |
|
||||||
crontab -e |
|
||||||
``` |
|
||||||
|
|
||||||
4) A la fin du fichier, y placer la fréquence de la crontab ainsi que le chemin du script: |
|
||||||
```bash |
|
||||||
0 0 * * * /path/docker/utils/registry-image-cleaning.sh |
|
||||||
``` |
|
@ -1,36 +0,0 @@ |
|||||||
version: '2.0' |
|
||||||
services: |
|
||||||
|
|
||||||
# REGISTRY |
|
||||||
registry: |
|
||||||
image: registry:2.6.2 |
|
||||||
container_name: registry |
|
||||||
ports: |
|
||||||
- "5000:5000" |
|
||||||
environment: |
|
||||||
REGISTRY_AUTH: htpasswd |
|
||||||
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm |
|
||||||
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd |
|
||||||
volumes: |
|
||||||
- ./auth:/auth |
|
||||||
- ./registry-data:/var/lib/registry |
|
||||||
- ./registry-config:/etc/docker/registry |
|
||||||
networks: |
|
||||||
- registry-ui-net |
|
||||||
|
|
||||||
# UI |
|
||||||
ui: |
|
||||||
image: joxit/docker-registry-ui:1.5-static |
|
||||||
container_name: ui_registry |
|
||||||
ports: |
|
||||||
- 8087:80 |
|
||||||
environment: |
|
||||||
- REGISTRY_TITLE=DockerRegistry |
|
||||||
- REGISTRY_URL=http://registry:5000 |
|
||||||
depends_on: |
|
||||||
- registry |
|
||||||
networks: |
|
||||||
- registry-ui-net |
|
||||||
|
|
||||||
networks: |
|
||||||
registry-ui-net: |
|
Binary file not shown.
@ -1,63 +0,0 @@ |
|||||||
#!/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é" |
|
@ -1,89 +0,0 @@ |
|||||||
#!/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" |
|
Loading…
Reference in new issue