virli/tutorial/devops/publish-docker.md
Pierre-Olivier Mercier 44723afa52 Fix typos
Thanks-to: <mathieu-ghirlanda@epita.fr>
2022-06-26 21:08:01 +02:00

3.1 KiB

\newpage

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. Pour simplifier le déploiement, nous utilisons une image Docker. Il faut cependant la générer ...

Mise en place du registre

::::: {.more} Si vous avez choisi Gitlab, vous pouvez utiliser directement le registre Docker intégré. Si vous utilisez Gitea, continuez cette section. :::::

Afin de disposer de notre propre registre Docker sur lequel publier nos images, nous allons utiliser l'image de registre fournie par Docker. Elle se lance comme suit :

```bash docker run --rm -d --name registry --network droneci -p 5000:5000 \ registry:2 ```

Vous trouverez davantage d'informations pour le déploiement ici.

Nous pouvons tester le bon fonctionnement de notre registre avec la commande suivante :

```bash 42sh$ curl http://localhost:5000/v2/ {} ```

Publication de l'image

Une fois le registre démarré, 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/.

Sans plus de configuration, le registre que nous avons démarré n'attend pas d'authentification. Et comme il n'a pas de certificat TLS pour utiliser https, il est nécessaire de définir l'option insecure à true.

Test de l'image

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

```bash docker run --rm -p 8080:8080 localhost:5000/youp0m ```

::::: {.question} On notera que ceci est possible exclusivement parce que le registre localhost:5000 est considéré non-sûr par défaut. C'est-à-dire qu'il n'a pas besoin de certificat TLS 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. :::::

Suite du déploiement

Nous en resterons là pour le déploiement, 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 !