virli/tutorial/devops/publish-docker.md

3.8 KiB

Publier une image Docker

Toutes les tâches de publication peuvent s'assimiler à des tâches de déploiement continu. C'est en particulier le cas lorsque le produit de compilation sera simplement publié et qu'il n'y a pas de service à mettre à jour ensuite (par exemple, dans le cas de Firefox ou de LibreOffice, une fois testés, les paquets sont envoyés sur le serveur d'où ils seront distribués ; il n'y a pas de service/docker à relancer).

À l'inverse, youp0m est à la fois un programme que l'on peut télécharger et un service qu'il faut déployer pour le mettre à jour. Afin de simplifier son déploiement en production, nous utiliserons une image Docker.

Fonctionnement du registre de Gitea \

Gitea intègre un registre d'images Docker (depuis la version 1.17, mi-2022). Pour le moment, les images sont uniquement liées à un compte utilisateur ou à une organisation, pas directement à un dépôt. Une page permet de rattacher l'image envoyée à un dépôt, ce que l'on fera dans un deuxième temps.

Afin de pouvoir envoyer une image nous-même, nous devons nous connecter au registre :

``` docker login localhost:3000 ```

::::: {.question}

N'a-t-on pas besoin d'un certificat TLS pour utiliser un registre Docker ? {-}

\

Ceci est possible exclusivement parce que le registre localhost est considéré non-sûr par défaut. C'est-à-dire qu'il n'a pas besoin de certificat TLS valide sur sa connexion HTTP pour être utilisé.\

Si on avait dû utiliser un autre nom de domaine, il aurait fallu l'ajouter à la liste des insecure-registries.

:::::

Nous pouvons ensuite envoyer une image pour s'assurer que tout va bien :

```bash docker build -t localhost:3000/${USER}/youp0m . docker push localhost:3000/${USER}/youp0m ```

Rendez-vous ensuite sur la page http://gitea:3000/${USER}/-/packages pour attribuer l'image au dépôt youp0m (voir pour cela dans les paramètres de l'image).

Notre image youp0m dans Gitea !{height=6cm}

Publication de l'image \

Une fois le registre testé, il ne nous reste plus qu'à ajouter une étape de publication de l'image Docker. Cela se fait au moyen du plugin suivant :
http://plugins.drone.io/drone-plugins/drone-docker/.

::::: {.exercice}

Continuons d'éditer le fichier .drone.yml du dépôt pour faire générer à Drone l'image Docker, et la publier.

Attention dans Drone, le domaine à utiliser pour contacter Gitea (et donc le registre), n'est pas localhost, mais gitea. Comme notre registre n'a pas de certificat TLS pour utiliser https, il est nécessaire de définir l'option insecure à true. Utilisez les secrets de Drone pour stocker le nom d'utilisateur et le mot de passe d'accès au registre.

:::::

Test de l'image \

Sur notre hôte, nous pouvons tester que l'image a bien été publiée grâce à la commande suivante :

```bash docker pull localhost:3000/${USER}/youp0m docker run --rm -p 8080:8080 localhost:3000/${USER}/youp0m ```

Si une nouvelle image est bien récupérée du dépôt, bravo, vous avez réussi !

Vers le déploiement

Nous n'allons pas faire le déploiement aujourd'hui, car nous n'avons pas d'environnement de production sur lequel déployer notre service.

Vous pouvez néanmoins tester les plugins scp ou ansible si vous avez une machine virtuelle avec une connexion SSH. N'hésitez pas à l'ajouter à votre .droneci.yml.

Profitons !

Sonarqube a repéré quelques erreurs dans le code de youp0m, essayez de les corriger, et publiez une nouvelle version, pour observer toute la chaîne en action !