Compare commits
1
Commits
f6a873c954
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
21738aa5cc |
@@ -0,0 +1,107 @@
|
|||||||
|
# DOCKER
|
||||||
|
|
||||||
|
Une simple Dockerfile contenant un NGINX 1.19 pouvant accueillir un site web.
|
||||||
|
|
||||||
|
## PROCESSUS
|
||||||
|
|
||||||
|
### INSTALLATION DE DOCKER (DEBIAN 10):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt-get update
|
||||||
|
|
||||||
|
sudo apt-get install \
|
||||||
|
apt-transport-https \
|
||||||
|
ca-certificates \
|
||||||
|
curl \
|
||||||
|
gnupg \
|
||||||
|
lsb-release
|
||||||
|
|
||||||
|
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
|
||||||
|
|
||||||
|
echo \
|
||||||
|
"deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
|
||||||
|
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||||
|
|
||||||
|
sudo apt-get update
|
||||||
|
|
||||||
|
sudo apt-get install docker-ce docker-ce-cli containerd.io -y
|
||||||
|
```
|
||||||
|
|
||||||
|
### CREER UN COMPTE SUR DOCKER HUB:
|
||||||
|
|
||||||
|
https://hub.docker.com
|
||||||
|
|
||||||
|
* clonage du repo Docker:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo git clone https://github.com/GregLebreton/docker.git
|
||||||
|
```
|
||||||
|
|
||||||
|
### CONSTRUCTION DE L'IMAGE:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker build .
|
||||||
|
```
|
||||||
|
|
||||||
|
### TAG DE L'IMAGE:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker tag <ID_de_l'image> <nom_de_votre_registre>/<nom_de_l'image>:<tag>
|
||||||
|
```
|
||||||
|
|
||||||
|
* ou on peux tagger l'image lors du docker run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -d -p 80:80 -t <nom_de_l_image_docker>:<tag_de_l_image>
|
||||||
|
```
|
||||||
|
|
||||||
|
### DEMARRER UN CONTENAIRE DE L'IMAGE EN Y MAPPANT LE PORT 80 DE LA MACHINE HÔTE:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker run -d -p 7000:80 <nom_de_votre_registre>/<nom_de_l'image>:<tag>
|
||||||
|
```
|
||||||
|
|
||||||
|
### VISITER SON NAVIGATEUR A L'ADRESSE:
|
||||||
|
|
||||||
|
http://localhost:7000
|
||||||
|
|
||||||
|
### TIPS:
|
||||||
|
|
||||||
|
* Docker sans sudo:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo groupadd -f docker
|
||||||
|
sudo chown root:docker /var/run/docker.sock
|
||||||
|
sudo usermod -a -G docker "$(whoami)"
|
||||||
|
newgrp docker
|
||||||
|
sudo systemctl restart docker
|
||||||
|
```
|
||||||
|
|
||||||
|
* Autres commandes utiles:
|
||||||
|
|
||||||
|
- push un conteneur sur son registre DockerHub:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker push
|
||||||
|
```
|
||||||
|
- afficher les images docker:
|
||||||
|
```bash
|
||||||
|
docker ps
|
||||||
|
```
|
||||||
|
- afficher les containers docker:
|
||||||
|
```bash
|
||||||
|
docker ls
|
||||||
|
```
|
||||||
|
- Effacer une image:
|
||||||
|
```bash
|
||||||
|
docker rmi
|
||||||
|
```
|
||||||
|
- Effacer un conteneur:
|
||||||
|
```bash
|
||||||
|
docker rm
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -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"
|
|
||||||
Reference in New Issue
Block a user