commit
635545cecc
@ -0,0 +1,2 @@ |
|||||||
|
FROM nginx:1.19 |
||||||
|
COPY index.html /usr/share/nginx/html/index.html |
@ -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 |
||||||
|
``` |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -0,0 +1,69 @@ |
|||||||
|
# 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 |
||||||
|
``` |
@ -0,0 +1,36 @@ |
|||||||
|
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: |
@ -0,0 +1,5 @@ |
|||||||
|
<html> |
||||||
|
<title>Hello Docker</title> |
||||||
|
<p>Hello le Garage numerique!</p> |
||||||
|
</html> |
||||||
|
|
Binary file not shown.
@ -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é" |
@ -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" |
Loading…
Reference in new issue