Make OCI part an introduction to subsiduaries sections
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
nemunaire 2022-12-17 23:12:17 +01:00
commit 394091338f
3 changed files with 96 additions and 34 deletions

View file

@ -33,16 +33,61 @@ rejoindre), quelles *capabilities* resteront disponibles, quels nouveaux points
de montages, ... Voir [la
suite](https://github.com/opencontainers/runtime-spec/blob/master/config.md).
Aujourd'hui, les dernières versions de `docker` utilisent `runc` pour l'étape
de lancement du conteneur, après avoir téléchargé l'image puis mis en place
l'empilement de couches dans un répertoire prédéterminé. `docker` ne lance donc
plus de conteneur à proprement parler, il fait seulement en sorte d'atteindre
l'état voulu par cette spécification, avant de passer la main à `runc`.
Aujourd'hui, `docker` utilise `runc` pour l'étape de lancement du conteneur,
après avoir téléchargé l'image puis mis en place l'empilement de couches dans
un répertoire prédéterminé. `docker` ne lance donc plus de conteneur à
proprement parler, il fait seulement en sorte d'atteindre l'état voulu par
cette spécification, avant de passer la main à `runc`.
::::: {.question}
##### Si `docker` fait appel à un programme externe pour lancer effectivement nos conteneurs, c'est que l'on peut changer cette implémentation ? {-}
<!-- https://ops.tips/blog/run-docker-with-forked-runc/ -->
Oui ! Et il n'y a même pas besoin de faire beaucoup d'efforts, car c'est une
possibilité qui est offerte au travers d'une option du daemon Docker. Le
binaire doit simplement avoir la même interface de ligne de commande que `runc`
(les arguments `create` et `start`, nous les verrons plus tard).
Pour l'ajouter, il convient de passer l'option suivante au daemon Docker lors
de son lancement (dans le fichier de service `systemd`, ou d'`init`) :
<div lang="en-US">
```sh
/usr/bin/dockerd [...] --add-runtime=my-runtime=/usr/local/bin/my-runtime
```
</div>
Ou bien en passant par le fichier de configuration `/etc/docker/daemon.json` :
<div lang="en-US">
```json
{
"runtimes": {
"my-runtime": {
"path": "/usr/local/bin/my-runtime",
"runtimeArgs": []
}
}
}
```
</div>
Pour chaque nouveau conteneur lancé, il sera alors possible de préciser le *runtime* à utiliser grâce à l'option `--runtime` :
<div lang="en-US">
```sh
docker container run [...] --runtime=my-runtime nginx:alpine
```
</div>
:::::
### `image-spec`
Une image OCI est composée d'un manifest, d'une suite de couches de systèmes de
Une image OCI est composée d'un manifest, d'une série de couches de systèmes de
fichiers, d'une configuration ainsi que d'un index d'image optionnel.
Le
@ -52,14 +97,13 @@ trouver les différents éléments : configuration et couches. Lorsqu'une même
image a des variations en fonction de l'architecture du processeur, du système
d'exploitation, ... dans ce cas [l'index
d'image](https://github.com/opencontainers/image-spec/blob/master/image-index.md)
est utilisé pour sélectionner le bon manifest.
est utilisé pour sélectionner le bon manifest correspondant au système.
Le format des [couches de système de
fichiers](https://github.com/opencontainers/image-spec/blob/master/layer.md)
sont spécifiées : il est nécessaire de passer par des formats standards (comme
les tarballs), contenant éventuellement des fichiers et dossiers spéciaux
contenant les modifications, suppressions, ... éventuelles de la couche
représentée.
représentant les modifications ou les suppressions éventuelles de la couche.
La
[configuration](https://github.com/opencontainers/image-spec/blob/master/config.md)
@ -72,14 +116,14 @@ des couches du système de fichiers, ainsi que l'historique de l'image.
### `distribution-spec`
Dernière née de l'organisme, cette spécification fédère la notion de
*registre* : une API REST sur HTTP où l'on peut récupérer des images, mais
aussi en envoyer.
Enfin, cette spécification fédère la notion de *registre* et la manière dont
les clients vont interagir avec : il s'agit d'une API REST au dessus du
protocole HTTP.
Cela permet de récupérer des images, mais aussi d'en envoyer, en gérant
éventuellement la manière de s'authentifier.
### Pour aller plus loin {-}
\
Si maintenant `docker` fait appel à un programme externe pour lancer
effectivement nos conteneurs, c'est que l'on peut changer cette
implémentation ? la réponse dans l'article :\
<https://ops.tips/blog/run-docker-with-forked-runc/>
Nous allons voir plus en détails, dans les chapitres suivantes, ce que l'on
peut tirer de ces spécifications, en décortiquant des usages précis.