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

100 lines
3.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

\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 :
<div lang="en-US">
```bash
docker run --rm -d --name registry --network droneci -p 5000:5000 \
registry:2
```
</div>
Vous trouverez davantage d'informations pour le déploiement
[ici](https://docs.docker.com/registry/deploying/).
Nous pouvons tester le bon fonctionnement de notre registre avec la commande
suivante :
<div lang="en-US">
```bash
42sh$ curl http://localhost:5000/v2/
{}
```
</div>
## 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 :
<div lang="en-US">
```bash
docker run --rm -p 8080:8080 localhost:5000/youp0m
```
</div>
::::: {.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`](https://docs.docker.com/registry/insecure/).
:::::
## 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`](http://plugins.drone.io/appleboy/drone-scp/) ou
[`ansible`](http://plugins.drone.io/drone-plugins/drone-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 !