docker-internal: Fix typos
This commit is contained in:
parent
5ff94431cb
commit
8a84f7a527
@ -5,6 +5,6 @@
|
|||||||
|
|
||||||
Des expériences sont en cours pour essayer de faire un format
|
Des expériences sont en cours pour essayer de faire un format
|
||||||
d'archive pour les couches qui permettrait d'utiliser les conteneurs
|
d'archive pour les couches qui permettrait d'utiliser les conteneurs
|
||||||
sans avoir eu besoin préalablement d'avoir télécharger le contenu des
|
sans avoir eu besoin préalablement d'avoir téléchargé le contenu des
|
||||||
couches :
|
couches :
|
||||||
<https://github.com/containerd/stargz-snapshotter/blob/main/docs/estargz.md>
|
<https://github.com/containerd/stargz-snapshotter/blob/main/docs/estargz.md>
|
||||||
|
@ -4,7 +4,7 @@ Systèmes de fichiers et couches
|
|||||||
===============================
|
===============================
|
||||||
|
|
||||||
Les images de conteneurs sont distribuées en couches, chaque couche contenant
|
Les images de conteneurs sont distribuées en couches, chaque couche contenant
|
||||||
les différences apportée par rapport à la couche précédente : l'ajout d'un
|
les différences apportées par rapport à la couche précédente : l'ajout d'un
|
||||||
fichier, la suppression d'un dossier, ...
|
fichier, la suppression d'un dossier, ...
|
||||||
|
|
||||||
L'intérêt principal est bien entendu d'optimiser l'espace de stockage, en
|
L'intérêt principal est bien entendu d'optimiser l'espace de stockage, en
|
||||||
@ -41,7 +41,7 @@ paquets, ou ajouter ses propres applications, documents, photos, ...
|
|||||||
Historiquement, le noyau Linux devait être *patché* pour supporter ce type de
|
Historiquement, le noyau Linux devait être *patché* pour supporter ce type de
|
||||||
système de fichiers (que ce soit `unionfs` ou `aufs`, les deux principaux
|
système de fichiers (que ce soit `unionfs` ou `aufs`, les deux principaux
|
||||||
*patch* apportant cette fonctionnalité). Les systèmes BSD disposent d'une
|
*patch* apportant cette fonctionnalité). Les systèmes BSD disposent d'une
|
||||||
implémentation depuis au moins 1995 et c'est SunOS qui fût le premier OS à
|
implémentation depuis au moins 1995 et c'est SunOS qui fut le premier OS à
|
||||||
développer cette technique dès 1986 (pour un système de fichier appelé
|
développer cette technique dès 1986 (pour un système de fichier appelé
|
||||||
*Translucent File Service*). Pour Linux, il aura fallu attendre 2014 pour voir
|
*Translucent File Service*). Pour Linux, il aura fallu attendre 2014 pour voir
|
||||||
l'arrivée du système de fichier OverlayFS dans un noyau sans *patch*.
|
l'arrivée du système de fichier OverlayFS dans un noyau sans *patch*.
|
||||||
@ -109,7 +109,7 @@ davantage de place au fil du temps et des modifications, que l'union.
|
|||||||
## OverlayFS
|
## OverlayFS
|
||||||
|
|
||||||
OverlayFS est arrivé dans le noyau 3.18, après de plus de 4 années de réécritures
|
OverlayFS est arrivé dans le noyau 3.18, après de plus de 4 années de réécritures
|
||||||
et d'amélioration structurelles, pour atteindre le niveau d'exigence et sans
|
et d'améliorations structurelles, pour atteindre le niveau d'exigence et sans
|
||||||
compromis nécessaire à son intégration dans le noyau officiel.
|
compromis nécessaire à son intégration dans le noyau officiel.
|
||||||
|
|
||||||
::::: {.question}
|
::::: {.question}
|
||||||
@ -121,8 +121,8 @@ L'un des problèmes les plus délicats est de trouver une manière de représent
|
|||||||
les suppressions de fichiers et de dossiers : cela doit être un fichier valide
|
les suppressions de fichiers et de dossiers : cela doit être un fichier valide
|
||||||
(avec ou sans métadonnée) car il faut pouvoir stocker l'information
|
(avec ou sans métadonnée) car il faut pouvoir stocker l'information
|
||||||
concrètement. Dans de nombreuses implémentations, un fichier `.wh.<filename>`
|
concrètement. Dans de nombreuses implémentations, un fichier `.wh.<filename>`
|
||||||
sert de *whiteout file*, ce qui peut créer des conflits avec des fichiers de
|
sert de *whiteout file*, ce qui peut créer des conflits avec les noms des
|
||||||
l'utilisateur (ou réduire ses choix de noms de fichiers).
|
fichiers de l'utilisateur (ou réduire ses choix de noms de fichiers).
|
||||||
|
|
||||||
Un problème similaire s'applique aux dossiers : est-ce qu'il faut supprimer
|
Un problème similaire s'applique aux dossiers : est-ce qu'il faut supprimer
|
||||||
chaque fichier contenu dans le dossier ou la simple présence d'un *opaque
|
chaque fichier contenu dans le dossier ou la simple présence d'un *opaque
|
||||||
@ -136,11 +136,11 @@ fichiers.
|
|||||||
L'implémentation de `mmap(2)` est nécessairement un cauchemar : lorsqu'un
|
L'implémentation de `mmap(2)` est nécessairement un cauchemar : lorsqu'un
|
||||||
fichier est modifié par deux processus qui le `mmap(2)`, on s'attend
|
fichier est modifié par deux processus qui le `mmap(2)`, on s'attend
|
||||||
normalement à voir les modifications dans les deux processus, or le premier à
|
normalement à voir les modifications dans les deux processus, or le premier à
|
||||||
faire une modification a créer un nouveau fichier dans la branche accessible en
|
faire une modification crée un nouveau fichier dans la branche accessible en
|
||||||
écriture. Il est ardu de réconcilier les pointeurs deux des processus.
|
écriture. Il est alors ardu de réconcilier les pointeurs des deux processus.
|
||||||
|
|
||||||
D'une manière similaire, il faut penser à la gestion des *hard links* : tous
|
D'une manière similaire, il faut penser à la gestion des *hard links* : tous
|
||||||
les pointeurs d'un contenu mis à jour devrait être modifié dans la couche en
|
les pointeurs d'un contenu mis à jour devraient être modifiés dans la couche en
|
||||||
écriture, cependant il n'y a pas d'index des pointeurs, il n'est donc pas
|
écriture, cependant il n'y a pas d'index des pointeurs, il n'est donc pas
|
||||||
facile de retrouver les fichiers à mettre à jour.
|
facile de retrouver les fichiers à mettre à jour.
|
||||||
|
|
||||||
@ -160,12 +160,12 @@ choix et différences : <https://lwn.net/Articles/325369/>,
|
|||||||
:::::
|
:::::
|
||||||
|
|
||||||
Afin de satisfaire les contraintes d'intégration au noyau, le minimum de
|
Afin de satisfaire les contraintes d'intégration au noyau, le minimum de
|
||||||
fonctionnalités ont été retenues : on ne peut notamment avoir qu'une seule
|
fonctionnalités a été retenu : on ne peut notamment avoir qu'une seule couche
|
||||||
couche en écriture, qui se positionne nécessairement au sommet, en
|
en écriture, qui se positionne nécessairement au sommet, en superposition des
|
||||||
superposition des autres. C'est de là que vient le nom du système de fichiers,
|
autres. C'est de là que vient le nom du système de fichiers, puisqu'il s'agit
|
||||||
puisqu'il s'agit davantage d'une superposition (*overlay*) d'un système de
|
davantage d'une superposition (*overlay*) d'un système de fichiers sur un
|
||||||
fichiers sur un autre, plutôt qu'une union de plusieurs systèmes aux politiques
|
autre, plutôt qu'une union de plusieurs systèmes aux politiques d'écritures
|
||||||
d'écritures potentiellement plus variées.
|
potentiellement plus variées.
|
||||||
|
|
||||||
|
|
||||||
### Utilisation
|
### Utilisation
|
||||||
@ -196,7 +196,7 @@ mount -t overlay -olowerdir=/lower,upperdir=/upper,workdir=/work ignored /merged
|
|||||||
Le type à utiliser est `overlay`, avec les options `lowerdir` qui indique
|
Le type à utiliser est `overlay`, avec les options `lowerdir` qui indique
|
||||||
l'emplacement du/des dossiers à combiner en lecture seule (on les sépare par
|
l'emplacement du/des dossiers à combiner en lecture seule (on les sépare par
|
||||||
des `:` lorsqu'il y en a plusieurs), on indique également le répertoire
|
des `:` lorsqu'il y en a plusieurs), on indique également le répertoire
|
||||||
contenant le système en lecture/écriture dans l'option `upperdir`, et on il
|
contenant le système en lecture/écriture dans l'option `upperdir`, et il ne
|
||||||
faut pas oublier l'option `workdir` un chemin sur la même partition que
|
faut pas oublier l'option `workdir` un chemin sur la même partition que
|
||||||
l'`upperdir`, qui doit être vide.
|
l'`upperdir`, qui doit être vide.
|
||||||
|
|
||||||
@ -259,7 +259,7 @@ On peut également voir les dossiers utilisés en inspectant notre conteneur :
|
|||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
Si on teste avec une image avec plus de couches, on obtient davantage de
|
Si on teste avec une image ayant plus de couches, on obtient davantage de
|
||||||
`lowerdir`, un par couche. N'hésitez pas à faire la même série de commandes
|
`lowerdir`, un par couche. N'hésitez pas à faire la même série de commandes
|
||||||
avec l'image `python` par exemple.
|
avec l'image `python` par exemple.
|
||||||
|
|
||||||
@ -267,7 +267,7 @@ avec l'image `python` par exemple.
|
|||||||
### Ajout de fichiers
|
### Ajout de fichiers
|
||||||
|
|
||||||
À ce stade, si nous regardons le contenu de notre dossier `upperdir`, nous
|
À ce stade, si nous regardons le contenu de notre dossier `upperdir`, nous
|
||||||
pouvons remarqué que celui-ci est vide. C'est normal puisque nous n'avons apporté
|
pouvons remarquer que celui-ci est vide. C'est normal puisque nous n'avons apporté
|
||||||
aucune modification.
|
aucune modification.
|
||||||
|
|
||||||
Dans notre conteneur précédemment lancé, apportons une modification, en
|
Dans notre conteneur précédemment lancé, apportons une modification, en
|
||||||
@ -387,7 +387,7 @@ monté conduisent à des résultats explicitement indéfinis.
|
|||||||
|
|
||||||
Le concept de *whiteout file*, comme on a pu le voir, diffère en fonction du
|
Le concept de *whiteout file*, comme on a pu le voir, diffère en fonction du
|
||||||
système de fichiers. Il s'avère que même si l'OverlayFS a été intégré dans le
|
système de fichiers. Il s'avère que même si l'OverlayFS a été intégré dans le
|
||||||
noyau Linux après maintes péripéties, Docker, lorsqu'à été spécifié le format
|
noyau Linux après maintes péripéties, Docker, lorsqu'a été spécifié le format
|
||||||
des archives utilisées pour distribuer les couches, utilise aujourd'hui le
|
des archives utilisées pour distribuer les couches, utilise aujourd'hui le
|
||||||
format d'AuFS pour représenter les suppressions. Il est donc important de le
|
format d'AuFS pour représenter les suppressions. Il est donc important de le
|
||||||
voir également.
|
voir également.
|
||||||
|
@ -64,7 +64,7 @@ services:
|
|||||||
|
|
||||||
On retrouve nos différentes sections : `kernel` indique qu'il faut récupérer
|
On retrouve nos différentes sections : `kernel` indique qu'il faut récupérer
|
||||||
l'image `linuxkit/kernel` depuis le registre Docker : il ne s'agit pas d'une
|
l'image `linuxkit/kernel` depuis le registre Docker : il ne s'agit pas d'une
|
||||||
image qui sera lancé, elle est plutôt utilisée comme une archive de stockage
|
image qui sera lancée, elle est plutôt utilisée comme une archive de stockage
|
||||||
pour le noyau et ses modules. LinuxKit au moment de la construction de l'image
|
pour le noyau et ses modules. LinuxKit au moment de la construction de l'image
|
||||||
se chargera de placer les fichiers aux bons endroits.
|
se chargera de placer les fichiers aux bons endroits.
|
||||||
|
|
||||||
@ -78,7 +78,7 @@ Ensuite, nous avons une section `init` qui déclare 3 images Docker :
|
|||||||
Ces trois images ne sont pas non plus des images Docker conventionnelles, dans
|
Ces trois images ne sont pas non plus des images Docker conventionnelles, dans
|
||||||
le sens où on ne peut pas les utiliser pour faire un `docker container
|
le sens où on ne peut pas les utiliser pour faire un `docker container
|
||||||
run`. Elles contiennent chacune une partie de l'arborescence du système de
|
run`. Elles contiennent chacune une partie de l'arborescence du système de
|
||||||
fichiers, uniquement les fichiers nécessaire, en plus, au fonctionnement du
|
fichiers, uniquement les fichiers nécessaires, en plus, au fonctionnement du
|
||||||
programme qu'elles ajoutent. Les images déclarées dans la section `init` seront
|
programme qu'elles ajoutent. Les images déclarées dans la section `init` seront
|
||||||
fusionnées ensemble et formeront le système de fichiers de base de notre image
|
fusionnées ensemble et formeront le système de fichiers de base de notre image
|
||||||
LinuxKit.
|
LinuxKit.
|
||||||
@ -95,7 +95,7 @@ d'avoir un shell sur la machine !
|
|||||||
|
|
||||||
On notera cependant que, positionné dans `services`, le shell que nous
|
On notera cependant que, positionné dans `services`, le shell que nous
|
||||||
obtiendrons sera lui-même exécuté dans un conteneur, nous n'aurons donc pas un
|
obtiendrons sera lui-même exécuté dans un conteneur, nous n'aurons donc pas un
|
||||||
accès entièrement privilégier. Pour déboguer, il faut placer cette image dans
|
accès entièrement privilégié. Pour déboguer, il faut placer cette image dans
|
||||||
la partie `init`, elle sera alors lancée comme un équivalent de
|
la partie `init`, elle sera alors lancée comme un équivalent de
|
||||||
`init=/bin/sh`.[^infogetty]
|
`init=/bin/sh`.[^infogetty]
|
||||||
|
|
||||||
@ -172,7 +172,7 @@ réutiliser plus tard ce chemin, en remplacement du mot clef `new` :
|
|||||||
|
|
||||||
Toute la puissance de `linuxkit` repose dans son système de construction et
|
Toute la puissance de `linuxkit` repose dans son système de construction et
|
||||||
surtout de lancement. En effet, il peut construire des images pour un grand
|
surtout de lancement. En effet, il peut construire des images pour un grand
|
||||||
nombre de plate-forme, mais il est également possible d'utiliser les API de ces
|
nombre de plate-formes, mais il est également possible d'utiliser les API de ces
|
||||||
plates-formes pour aller y lancer des instances de cette image !
|
plates-formes pour aller y lancer des instances de cette image !
|
||||||
|
|
||||||
Pour construire l'image faite précédemment :
|
Pour construire l'image faite précédemment :
|
||||||
|
@ -11,9 +11,9 @@ fragmentation de l'écosystème.
|
|||||||
|
|
||||||
Trois spécifications ont été écrites :
|
Trois spécifications ont été écrites :
|
||||||
|
|
||||||
- [`runtime-spec`](https://github.com/opencontainers/runtime-spec/blob/master/spec.md#platforms): définis les paramètres du démarrage d'un conteneur ;
|
- [`runtime-spec`](https://github.com/opencontainers/runtime-spec/blob/master/spec.md#platforms): définit les paramètres du démarrage d'un conteneur ;
|
||||||
- [`image-spec`](https://github.com/opencontainers/image-spec/blob/master/spec.md): définis la construction, le transport et la préparation des images ;
|
- [`image-spec`](https://github.com/opencontainers/image-spec/blob/master/spec.md): définit la construction, le transport et la préparation des images ;
|
||||||
- [`distribution-spec`](https://github.com/opencontainers/distribution-spec/blob/master/spec.md): définis la manière dont sont partagées et récupérées les images.
|
- [`distribution-spec`](https://github.com/opencontainers/distribution-spec/blob/master/spec.md): définit la manière dont sont partagées et récupérées les images.
|
||||||
|
|
||||||
|
|
||||||
### `runtime-spec`
|
### `runtime-spec`
|
||||||
@ -36,14 +36,14 @@ suite](https://github.com/opencontainers/runtime-spec/blob/master/config.md).
|
|||||||
Aujourd'hui, les dernières versions de `docker` utilisent `runc` pour l'étape
|
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
|
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
|
l'empilement de couches dans un répertoire prédéterminé. `docker` ne lance donc
|
||||||
plus de conteneur a proprement parlé, il fait seulement en sorte d'atteindre
|
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`.
|
l'état voulu par cette spécification, avant de passer la main à `runc`.
|
||||||
|
|
||||||
|
|
||||||
### `image-spec`
|
### `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 suite de couches de systèmes de
|
||||||
fichiers, d'une configuration ainsi qu'un index d'image optionnel.
|
fichiers, d'une configuration ainsi que d'un index d'image optionnel.
|
||||||
|
|
||||||
Le
|
Le
|
||||||
[manifest](https://github.com/opencontainers/image-spec/blob/master/manifest.md)
|
[manifest](https://github.com/opencontainers/image-spec/blob/master/manifest.md)
|
||||||
|
@ -146,7 +146,8 @@ tar xzf ${DL_LAYER} -C rootfs
|
|||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
Et voilà, nous avons extrait notre première image, nous devrions pouvoir :
|
Et voilà, nous avons extrait notre première image, nous devrions pouvoir entrer
|
||||||
|
dedans :
|
||||||
|
|
||||||
<div lang="en-US">
|
<div lang="en-US">
|
||||||
```
|
```
|
||||||
|
@ -126,7 +126,7 @@ ajouter un élément à cette liste, demandant de *bind* :
|
|||||||
|
|
||||||
À vous maintenant d'éditer votre `config.json`, pour lancer le service youp0m.
|
À vous maintenant d'éditer votre `config.json`, pour lancer le service youp0m.
|
||||||
|
|
||||||
Dans un premier temps, assurez-vous de pouvoir télécharger et d'assembler
|
Dans un premier temps, assurez-vous de pouvoir télécharger et assembler
|
||||||
rapidement les couches du conteneur.
|
rapidement les couches du conteneur.
|
||||||
|
|
||||||
À partir du fichier `config.json` fourni, adaptez la ligne de commande à lancer
|
À partir du fichier `config.json` fourni, adaptez la ligne de commande à lancer
|
||||||
@ -138,7 +138,7 @@ stocker les photos (dossier `/srv/images`)[^chmod].
|
|||||||
simple pour l'instant serait d'attribuer les permissions `0777` à la
|
simple pour l'instant serait d'attribuer les permissions `0777` à la
|
||||||
source, temporairement.
|
source, temporairement.
|
||||||
|
|
||||||
Pour cette étape, Considérez que vous avez réussi si vous voyez s'afficher :
|
Pour cette étape, considérez que vous avez réussi si vous voyez s'afficher :
|
||||||
|
|
||||||
> `Ready, listening on :8080`
|
> `Ready, listening on :8080`
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ utiliser la commande `lxc-console` pour nous attacher aux conteneurs. À tout
|
|||||||
moment, nous pouvons nous détacher de la console (sans que cela n'affecte
|
moment, nous pouvons nous détacher de la console (sans que cela n'affecte
|
||||||
l'état du conteneur) en pressant les touches : `^A q`.
|
l'état du conteneur) en pressant les touches : `^A q`.
|
||||||
|
|
||||||
Connectons-nous, lancons quelques commandes puis éteignons la machine en
|
Connectons-nous, lançons quelques commandes puis éteignons la machine en
|
||||||
lançant la commande `poweroff` dans le conteneur. Il est également possible de
|
lançant la commande `poweroff` dans le conteneur. Il est également possible de
|
||||||
lancer la commande `lxc-stop --name toto_first` dans un autre terminal, depuis
|
lancer la commande `lxc-stop --name toto_first` dans un autre terminal, depuis
|
||||||
la machine hôte.
|
la machine hôte.
|
||||||
@ -209,7 +209,7 @@ configuration du conteneur afin qu'il ne puisse pas utiliser plus que 256 MB de
|
|||||||
RAM et 512 MB de swap.
|
RAM et 512 MB de swap.
|
||||||
|
|
||||||
Limitez ensuite les `capabilities(7)` de ce conteneur afin qu'il s'exécute avec
|
Limitez ensuite les `capabilities(7)` de ce conteneur afin qu'il s'exécute avec
|
||||||
le strict minimum de droits, nécessaire au bon fonctionnement des programmes
|
le strict minimum de droits, nécessaires au bon fonctionnement des programmes
|
||||||
installés.
|
installés.
|
||||||
|
|
||||||
**Rendez le fichier `config` de ce premier conteneur.** N'hésitez pas à laisser
|
**Rendez le fichier `config` de ce premier conteneur.** N'hésitez pas à laisser
|
||||||
@ -218,7 +218,7 @@ installés.
|
|||||||
### Questions
|
### Questions
|
||||||
|
|
||||||
1. Quels sont les autres types de virtualisation réseau existants ? Expliquez
|
1. Quels sont les autres types de virtualisation réseau existants ? Expliquez
|
||||||
en chacun une phrase leurs particularités.
|
leurs particularités en une phrase.
|
||||||
|
|
||||||
1. Quel fichier de configuration devriez-vous changer pour rendre persistante la
|
1. Quel fichier de configuration devriez-vous changer pour rendre persistante la
|
||||||
valeur d'`ip_forward` ?
|
valeur d'`ip_forward` ?
|
||||||
|
Loading…
x
Reference in New Issue
Block a user