Skip to content
Snippets Groups Projects
Commit a1c6cf8a authored by Mickael Masquelin's avatar Mickael Masquelin
Browse files

feat(exercices): Ajout exercice registre prive

parent 305decc0
Branches
No related tags found
No related merge requests found
README.md 0 → 100644
# Exercices
## Utilisation d'un registre privé
### Détail de la configuration appliquée
Ci-dessous le détail de la stack `compose` mise en oeuvre :
```bash
# docker-compose.yml
services:
registry:
restart: always
image: registry:2
container_name: mon-registre
# On mappe le port 5000 exposé par défaut au port 5000 sur l'hôte Docker
ports:
- 5000:5000
environment:
# On déclare un fichier `htpasswd` qui contient des infos de connexion locales
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registre Formation Docker
volumes:
# On mappe des volumes locaux afin que les données soient persistantes
- ./data/:/var/lib/registry
- ./auth/:/auth
[...]
```
Le registre privé est situé derrière un reverse-proxy HTTPS (Traefik) qui écoute sur les ports 80/tcp et 443/tcp. Son adresse URL est `https://hub.chez-wam.info`. L'identifiant à utiliser est `formation`.
> Le mot de passe vous sera fourni sur les slides.
### Travail à faire
Nous allons créer d'abord un fichier `Dockerfile` dont le contenu sera le suivant :
```bash
FROM alpine:latest
RUN apk add --no-cache git
```
Une fois cette opération effectuée, construire une image nommée `alpine-git` et lui mettre un tag `v1.0.0`. En vue de le pousser dans notre registre privé, il faut au préalable créer un nouveau tag en respectant ce format : `<URL_REGISTRE>:<PORT_REGISTRE>/<NOM_STAGIAIRE>/<NOM_CT>`.
Exemple pour moi :
```bash
docker tag alpine-git:v1.0.0 hub.chez-wam.info:443/masqueli/alpine-git:v1.0.0
```
La commande `docker image list` vous retournera la liste des images par date de création (de la plus récente à la moins récente). Essayez de pousser votre image sur le registre. Exemple pour moi :
```bash
docker push hub.chez-wam.info:443/masqueli/alpine-git:v1.0.0
```
Votre client Docker doit refuser l'envoi et vous retourner un message du type "*no basic auth credentials*". C'est "normal" ! Il faut être authentifié pour envoyer sur le registre. Cela se fait à l'aide de la commande `docker login <URL_REGISTRE>:<PORT_REGISTRE>`. Vous communiquerez à votre client Docker l'identifiant (`formation`) et le mot de passe du registre associé.
```bash
docker login hub.chez-wam.info:443
```
Si tout se passe bien, le message "*Login Succeeded*" devrait apparaître. Essayez à nouveau de poussez l'image à l'aide de la commande `docker push`.
```bash
docker push hub.chez-wam.info:443/masqueli/alpine-git:v1.0.0
```
Nous allons créer ensuite un second fichier `Dockerfile` dont le contenu sera le suivant :
```bash
FROM alpine:latest
RUN apk add --no-cache mysql-client
ENTRYPOINT ["mysql"]
```
Nous construirons cette image qui sera nommée `alpine-mysql` avec un tag de version `v1.0.0` et nous la pousserons dans le registre comme vu précédemment dans cet exercice.
Vérifions maintenant le contenu du catalogue de notre registre. Nous pouvons utiliser la commande `curl` en CLI pour cela :
```bash
curl -u formation:<password> -X GET https://hub.chez-wam.info:443/v2/_catalog
```
Vous devriez obtenir la liste de vos images présentes dans le catalogue global (`<nom_stagiaire>/alpine-git` et `<nom_stagiaire>/alpine-mysql`). Nous allons ajouter le tag `latest` que nous avons oublié pour l'image `alpine-mysql` ... toujours en respectant le format décrit plus haut : `<URL_REGISTRE>:<PORT_REGISTRE>/<NOM_STAGIAIRE>/<NOM_CT>`. Une fois cette opération effectuée, envoyez l'image marquée `latest` dans le registre.
Vérifions maintenant les tags pour votre image `alpine-mysql`, toujours à l'aide de `curl` en CLI. Exemple pour moi :
```bash
curl -u formation:<password> -X GET https://hub.chez-wam.info:443/v2/masqueli/alpine-mysql/tags/list
```
Vous devriez obtenir, pour l'image `<nom_stagiaire>/alpine-mysql` les tags `v1.0.0` et `latest` au prompt. Nous allons enfin voir comment récupérer une image depuis le registre. Supprimez d'abord les images `<nom_stagiaire>/alpine-git:*` créées localement à l'aide de la commande `docker rmi`. Exemple pour moi :
```bash
# pour les clients Linux ou macOS
docker rmi $(docker images 'alpine-git' -a -q)
# pour les clients Windows, avec PowerShell
docker rmi $(docker images --format "{{.Repository}}:{{.Tag}}"|findstr "alpine-git")
```
Vérifiez à nouveau à l'aide de la commande `docker image list` que toutes les références et les images locales `alpine-git` ont bien été supprimées. Essayez maintenant de récupérer l'image depuis le registre. Exemple pour moi :
```bash
docker pull hub.chez-wam.info:443/masqueli/alpine-git:v1.0.0
```
Vérifiez à nouveau à l'aide de la commande `docker image list` qu'il existe bien une image correspondant au nom et au tag donné précédemment. Félicitations ! Vous connaissez désormais les opérateurs de base pour interagir avec un registre privé :)
......@@ -3,15 +3,19 @@ services:
restart: always
image: registry:2
container_name: registre-prive
# On mappe le port 5000 exposé par défaut au port 5000 sur l'hôte Docker
ports:
- 5000:5000
environment:
# On déclare les certificats serveurs à utiliser, connus des CA
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/moncertif.crt
REGISTRY_HTTP_TLS_KEY: /certs/macledecertif.key
# On déclare un fichier `htpasswd` qui contient des infos de connexion locales
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
volumes:
# On utilise des volumes locaux afin que les données soient persistantes
- ./data/:/var/lib/registry
- ./certs/:/certs
- ./auth/:/auth
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment