Installation
Le docker-compose
Pour installer notre registry, nous allons créer un dossier registry dans lequel, nous allons créer un fichier docker-compose.yml avec le contenu suivant:
version: "3"
services:
registry:
image: registry:2
ports:
- 5000:5000
environment:
- "REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/data"
- "REGISTRY_AUTH=htpasswd"
- "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm"
- "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd"
restart: unless-stopped
networks:
- dockernetwork
volumes:
- ./data:/data
- /home/richard/registry/auth:/auth
labels:
- "traefik.enable=true"
- "traefik.http.routers.registry.entrypoints=web,websecure"
- "traefik.http.routers.registry.rule=Host(`registry.mydomain.com`)"
- "traefik.http.services.registry.loadbalancer.server.port=5000"
- "traefik.http.routers.registry.tls=true"
- "traefik.http.routers.registry.tls.certresolver=richard"
networks:
dockernetwork:
external: true
Pour que traefk demande à letsencrypt de générer un certificat https, on déclare des labels dans notre docker-compose ou on lui spécifie les entrypoints, le nom du domaine de notre registry, le port qui expose le service, l’option tls à true pour le certificat et le nom de notre resolver (Un article sur traefik est disponible ici).
L’authentification
Pour l’authentification, nous allons créer un dossier auth dans notre répertoire registry.
Nous lancons ensuite la commande suivante pour générer une utilisateur et un mot de passe associé:
docker run --entrypoint htpasswd httpd:2 -Bbn richard monsupermotdepasse > auth/htpasswd
Lancement de notre registry
On lance notre container avec la commande suivante:
docker-compose up -d
Si on n’a pas de message d’erreur, on va pouvoir essayer de se connecter depuis un serveur distant avec la commande: docker login url_du_repo
richard@docker:~$ docker login https://registry.mydomain.com
Username: richard
Password:
WARNING! Your password will be stored unencrypted in /home/richard/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
Login Succeeded
On se déconnecte avec la commande: docker logout
richard@docker:~$ docker logout
Removing login credentials for https://index.docker.io/v1/
Nous avons dorénavant un registry privé sur lequel nous pouvons pousser et récuperer les images docker que nous aurons créer.