virli/tutorial/devops/publish-docker.md

100 lines
3.1 KiB
Markdown
Raw Normal View History

2020-10-28 22:16:34 +00:00
\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
2022-02-24 19:43:43 +00:00
testés, les paquets sont envoyés sur le serveur d'où ils seront distribués ; il
2020-10-28 22:16:34 +00:00
n'y a pas de service/docker à relancer).
2022-02-24 19:43:43 +00:00
À 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 ...
2020-10-28 22:16:34 +00:00
## Mise en place du registre
2021-11-19 23:00:30 +00:00
::::: {.more}
Si vous avez choisi Gitlab, vous pouvez utiliser directement le registre
Docker intégré. Si vous utilisez Gitea, continuez cette section.
:::::
2020-10-28 22:16:34 +00:00
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
2022-02-24 19:43:43 +00:00
comme suit :
2020-10-28 22:16:34 +00:00
<div lang="en-US">
```bash
2022-05-04 09:18:16 +00:00
docker run --rm -d --name registry --network droneci -p 5000:5000 \
registry:2
2020-10-28 22:16:34 +00:00
```
</div>
2021-11-19 23:00:30 +00:00
Vous trouverez davantage d'informations pour le déploiement
2020-10-28 22:16:34 +00:00
[ici](https://docs.docker.com/registry/deploying/).
2021-11-19 23:00:30 +00:00
Nous pouvons tester le bon fonctionnement de notre registre avec la commande
2022-02-24 19:43:43 +00:00
suivante :
2020-10-28 22:16:34 +00:00
<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
2022-02-24 19:43:43 +00:00
publication de l'image Docker. Cela se fait au moyen du plugin suivant :\
2020-10-28 22:16:34 +00:00
<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
2022-02-24 19:43:43 +00:00
commande suivante :
2020-10-28 22:16:34 +00:00
<div lang="en-US">
```bash
docker run --rm -p 8080:8080 localhost:5000/youp0m
```
</div>
::::: {.question}
2020-10-28 22:16:34 +00:00
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é.\
2020-10-28 22:16:34 +00:00
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/).
2021-11-19 23:00:30 +00:00
:::::
2020-10-28 22:16:34 +00:00
## Suite du déploiement
Nous en resterons là pour le déploiement, car nous n'avons
2020-10-28 22:16:34 +00:00
pas d'environnement de production sur lequel déployer notre service.
2021-11-19 23:00:30 +00:00
Vous pouvez néanmoins tester les plugins
2020-10-28 22:16:34 +00:00
[`scp`](http://plugins.drone.io/appleboy/drone-scp/) ou
2021-11-19 23:00:30 +00:00
[`ansible`](http://plugins.drone.io/drone-plugins/drone-ansible/) si vous avez
2020-10-28 22:16:34 +00:00
une machine virtuelle avec une connexion SSH. N'hésitez pas à l'ajouter à votre
`.droneci.yml`.
2022-02-24 19:43:43 +00:00
## Profitons !
2020-10-28 22:16:34 +00:00
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
2022-02-24 19:43:43 +00:00
action !