diff --git a/README.md b/README.md new file mode 100644 index 0000000000000000000000000000000000000000..a7057ca7e3c39318e8461241b7263e81cd6716fb --- /dev/null +++ b/README.md @@ -0,0 +1,119 @@ +# 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é :) + + + + + + + + + + diff --git a/registre-prive/docker-compose.yml b/registre-prive/docker-compose.yml index c61e6b9b31020a4ffebc3af8d234a640ca44101c..9aa80b8488b2cb2a1d0b21f8f1b6980e5d3dd4eb 100644 --- a/registre-prive/docker-compose.yml +++ b/registre-prive/docker-compose.yml @@ -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