Make OCI part an introduction to subsiduaries sections
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
4e58219ba8
commit
394091338f
3 changed files with 96 additions and 34 deletions
|
|
@ -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.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue