feat: Ajout du service de Registry

This commit is contained in:
Simon 2020-06-01 09:42:30 +02:00
parent 5ee693b8f3
commit afe28be81e
7 changed files with 173 additions and 0 deletions

14
registry/.env Normal file
View File

@ -0,0 +1,14 @@
## DOCKER
COMPOSE_FILE=./docker-compose.yml:./docker-compose.traefik.yml
TRAEFIK_NETWORK_NAME=kifeart
## REGISTRY
REGISTRY_IMAGE=registry:2.7.1
REGISTRY_CUSTOM_IMAGE=custom/registry
REGISTRY_DOMAIN=registry.cool.life
REGISTRY_VOLUME_NAME=registry
REGISTRY_CONTAINER_NAME=registry
REGISTRY_USER=kosssi
REGISTRY_PASSWORD=z9NdYNJi50cA1Pqjpsww58Vpaev7lPmYoVz9OygJSZP4oMCBD5

1
registry/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
auth

3
registry/Dockerfile Normal file
View File

@ -0,0 +1,3 @@
FROM registry:2.7.1
COPY ./auth /auth

58
registry/README.md Normal file
View File

@ -0,0 +1,58 @@
# Registry
> Une Docker Registry est une application qui permet de distribuer des images Docker au sein de votre organisation.
>
> <cite></cite>
## Authentification
De base le service est complètement ouvert, ce qui peut être dangereux si le service est accessible par internet.
Il existe plusieurs façon de mettre en place une authentification, je vais utiliser ici la plus simple avec une authentification *htpasswd*.
Une simple commande permet de générer un fichier *htpasswd* :
```sh
./run htpasswd
```
## Dépliement
Il faut ensuite générer l'image avec le fichier mot de passe intégré :
```sh
./run build
```
Puis déployer le service (après avoir modifier le fichier `.env`) :
```sh
docker-compose up -d
```
Pour se connecter :
```sh
docker login https://$REGISTRY_DOMAIN
```
## Aide
Pour connaître les images du registry :
```sh
curl -u "$REGISTRY_USER:$REGISTRY_PASSWORD" -X GET https://$REGISTRY_DOMAIN/v2/_catalog
```
## Liens
- [Documentation][documentation]
- [Docker Hub][dockerhub]
## TODO
- Supprimer le Dockerfile et importer directement le dossier auth depuis docker-compose
[article]: https://blog.eleven-labs.com/fr/mise-en-place-docker-registry-privee/
[documentation]: https://docs.docker.com/registry/
[dockerhub]: https://hub.docker.com/_/registry

View File

@ -0,0 +1,13 @@
version: '3.8'
networks:
default:
name: ${TRAEFIK_NETWORK_NAME}
services:
registry:
labels:
traefik.enable: 'true'
traefik.docker.network: ${TRAEFIK_NETWORK_NAME}
traefik.http.routers.registry.rule: 'Host(`${REGISTRY_DOMAIN}`)'
traefik.http.routers.registry.entrypoints: 'web'

View File

@ -0,0 +1,20 @@
version: '3.8'
volumes:
registry:
name: ${REGISTRY_VOLUME_NAME}
services:
registry:
container_name: ${REGISTRY_CONTAINER_NAME}
image: ${REGISTRY_IMAGE}
restart: always
environment:
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_STORAGE_DELETE_ENABLED: "true"
volumes:
- registry:/var/lib/registry
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro

64
registry/run Executable file
View File

@ -0,0 +1,64 @@
#!/bin/bash
set -eu
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
. $DIR/../help.sh
. $DIR/../postgres/run --only-source
registry_help() {
echo "./run htpasswd : 🔑 Génération du fichier htpasswd"
echo "./run build : 🏗 Construction de l'image custom"
echo "./run backup : 💾 Sauvegarde des images du registry"
}
registry_htpasswd() {
script_env
mkdir -p auth
echo "🔑 Génération du fichier htpasswd"
docker run --entrypoint htpasswd $REGISTRY_IMAGE -Bbn $REGISTRY_USER $REGISTRY_PASSWORD > auth/htpasswd
}
registry_build() {
script_env
echo "🏗 Construction de l'image custom"
DOCKER_FILE_DEFAULT=.
DOCKER_FILE=${DOCKER_FILE:-$DOCKER_FILE_DEFAULT}
docker build $DOCKER_FILE -t $REGISTRY_CUSTOM_IMAGE
}
registry_backup() {
script_env
echo "💾 Sauvegarde des images du registry"
REGISTRY_BACKUP_FILE_DEFAULT=`date +%Y%m%d_%H%M%S`_${REGISTRY_DOMAIN}.tar
REGISTRY_BACKUP_FILE=${REGISTRY_BACKUP_FILE:-$REGISTRY_BACKUP_FILE_DEFAULT}
docker run --rm --volumes-from registry -v /home/pi/backups/registry:/backup alpine:3.11.6 ash -c "cd /var/lib/registry && tar cvf /backup/$REGISTRY_BACKUP_FILE ."
}
registry_restore() {
script_env
docker run -it --rm -v $HOME/backups/${REGISTRY_DOMAIN}:/backup --volumes-from registry alpine:3.11.6 ash -c "cd /var/lib/registry && tar xvf /backup/${BACKUP_DATE}_${REGISTRY_DOMAIN}.tar --strip 1"
}
if [ $# -ge 1 ]; then
if [ "${1}" == "htpasswd" ]; then
script_start
registry_htpasswd
script_end
elif [ "${1}" == "build" ]; then
script_start
registry_build
script_end
elif [ "${1}" == "backup" ]; then
script_start
registry_backup
script_end
elif [ "${1}" != "--only-source" ]; then
registry_help
fi
else
registry_help
fi