Rewrite some TP1 parts
This commit is contained in:
parent
885a410b77
commit
9587e183c8
@ -13,15 +13,38 @@ docker container run hello-world
|
||||
Cette commande va automatiquement exécuter une série d'actions pour nous,
|
||||
comme indiqué dans le message affiché en retour :
|
||||
|
||||
D'abord, le daemon va rechercher s'il possède localement l'image
|
||||
*hello-world*. Si ce n'est pas le cas, il va aller récupérer les différentes
|
||||
couches de l'image sur le registre par défaut (celui de Docker). Il assemble
|
||||
ensuite les images en ajoutant une couche en lecture/écriture, propre au
|
||||
conteneur. Enfin, il lance la commande par défaut, telle que définie dans les
|
||||
métadonnées de l'image.
|
||||
D'abord, le daemon va rechercher s'il possède localement l'image hello-world.
|
||||
Si ce n'est pas le cas, il va commencer par demander au registre les différents
|
||||
composants de l'image. On aperçoit la récupération de l'image dans les
|
||||
premières lignes :
|
||||
|
||||
Nous pouvons directement utiliser le client pour rechercher une image sur le
|
||||
registre, en utilisant la commande `search` :
|
||||
<div lang="en-US">
|
||||
```
|
||||
42sh$ docker container run hello-world
|
||||
Unable to find image 'hello-world:latest' locally
|
||||
latest: Pulling from library/hello-world
|
||||
2db29710123e: Already exists
|
||||
Digest: sha256:7d246653d0511db2a6b2e0436cfd0e52ac8c066000264b3ce63331ac66dca625
|
||||
Status: Downloaded newer image for hello-world:latest
|
||||
```
|
||||
</div>
|
||||
|
||||
Le daemon assemble ensuite l'image et met en place les différents éléments
|
||||
d'isolation pour préparer l'exécution de notre conteneur.
|
||||
|
||||
Enfin, il lance la commande qui sera le premier processus du conteneur. Cette
|
||||
commande fait parti des métadonnées de l'image. Le processus ainsi lancé est un
|
||||
peu particulier : il obtient les mêmes caractéristiques que le PID 1 de notre
|
||||
système ('init').
|
||||
|
||||
|
||||
### Recherche d'images
|
||||
|
||||
Docker est donc allé récupérer une image existante. Par défaut, il va
|
||||
rechercher sur le Docker Hub, un registre d'images géré par les équipes de
|
||||
Docker.
|
||||
|
||||
Nous pouvons explorer les images existantes en utilisant la commande suivante :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
@ -29,21 +52,22 @@ docker search mariadb
|
||||
```
|
||||
</div>
|
||||
|
||||
Il est possible de mettre à jour les images locales, ou télécharger les couches
|
||||
d'images qui nous intéressent, en utilisant la commande `pull` :
|
||||
Cette commande atteint rapidement ses limites en raison de la difficulté à
|
||||
afficher beaucoup de contenu pour faire son choix. Aussi, il est souvent plus
|
||||
pratique d'aller explorer les registres en passant directement par leur interface
|
||||
web.
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
docker image pull ubuntu
|
||||
```
|
||||
</div>
|
||||
Vous trouverez forcément votre bonheur parmi les images proposées par les deux
|
||||
principaux registres :
|
||||
|
||||
- <https://hub.docker.com/>
|
||||
- <https://quay.io/>
|
||||
|
||||
::::: {.warning}
|
||||
|
||||
Les registres publics tels quel le Docker Hub mettent à disposition des images
|
||||
officielles, mais aussi des images créées par la communauté. Chaque utilisateur
|
||||
est libre d'envoyer une image qu'il a lui-même créée : soit car l'éditeur ne
|
||||
est libre d'envoyer une image qu'il a lui-même créée : soit, car l'éditeur ne
|
||||
proposait pas d'image et que quelqu'un s'est dévoué pour la faire, soit parce
|
||||
qu'il avait des besoins plus spécifiques qui n'étaient pas couverts par l'image
|
||||
originale. Il est important de garder en tête que vous téléchargez des
|
||||
@ -56,6 +80,117 @@ assurez-vous d'avoir confiance dans la personne affiliée à l'image.**
|
||||
|
||||
:::::
|
||||
|
||||
|
||||
### Exécuter des images d'autres registres
|
||||
|
||||
Il existe une multitude de registres d'images. Le Docker Hub et Quay.io sont
|
||||
sans aucun doute les registres publics les plus utilisés. Mais il y en a
|
||||
d'autres : GitHub, Gitlab et Gitea proposent un service de registre afin de
|
||||
centraliser la récupération du code et des produits de compilation (comme les
|
||||
binaires ou les images de conteneur).
|
||||
|
||||
On a dit que Docker utilisait le Docker Hub comme registre par défaut. Cela
|
||||
signifie que sans cette facilité, nous aurions dû écrire :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
docker container run docker.io/library/hello-world
|
||||
```
|
||||
</div>
|
||||
|
||||
Vous pouvez l'essayer, c'est une commande valide. En fait, pour utiliser une
|
||||
image d'un registre, on va simplement utiliser le nom de domaine du registre en
|
||||
question.
|
||||
|
||||
Il y a encore bien d'autres registres existant. En fait, les spécifications
|
||||
sont ouvertes, chacun peut implémenter un registre dans ses logiciels, ou même
|
||||
déployer un conteneur de registre (tels que `registry` ou `harbor`).
|
||||
|
||||
|
||||
### Registres et images privés
|
||||
|
||||
Il y a certaines images que l'on désire garder privées : il peut s'agir d'un
|
||||
travail que l'on ne souhaite pas partager ou, dans le cas d'une entreprise,
|
||||
celle-ci peut préférer que son code source ou ses binaires ne soient pas
|
||||
distribués.
|
||||
|
||||
Certains registres intègrent des fonctionnalités d'authentification, afin de ne
|
||||
permettre la découverte et l'accès qu'aux seuls utilisateurs autorisés.
|
||||
|
||||
Nous n'en aurons pas besoin durant notre présente découverte, mais notons que l'on
|
||||
utiliserait la commande suivante :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
docker login registry.container.io
|
||||
```
|
||||
</div>
|
||||
|
||||
|
||||
Il convient de remplacer le dernier paramètre par le nom de domaine du registre
|
||||
(ou rien si l'on veut s'authentifier sur le registre par défaut).
|
||||
|
||||
On ne s'authentifie pas pour une image en particulier, mais pour un domaine.
|
||||
|
||||
::::: {.warning}
|
||||
|
||||
Les informations d'authentification, une fois la commande validée, sont
|
||||
stockées dans un fichier sur le disque de la machine.
|
||||
|
||||
:::::
|
||||
|
||||
::::: {.question}
|
||||
|
||||
Notez que le Docker Hub a mis en place des limites sur le nombre de requêtes qui
|
||||
lui sont faites. Avoir un compte sur le Docker Hub vous permet d'avoir des
|
||||
limites plus élevées.
|
||||
|
||||
:::::
|
||||
|
||||
|
||||
### Images vs. conteneurs
|
||||
|
||||
Exécutons sans plus attendre une nouvelle image, cette fois-ci issue d'un
|
||||
registre tiers :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
docker container un registry.nemunai.ie/hello-world
|
||||
```
|
||||
</div>
|
||||
|
||||
De la même manière que pour le `hello-world` du Docker Hub, il est d'abord
|
||||
nécessaire de récupérer l'image. Elle est ensuite exécutée. Vous devriez donc
|
||||
obtenir un résultat en deux parties, similaire à la sortie suivante :
|
||||
|
||||
<div lang="en-US">
|
||||
```bash
|
||||
Unable to find image 'registry.nemunai.re/hello-world:latest' locally
|
||||
latest: Pulling from library/hello-world
|
||||
2db29710123e: Already exists
|
||||
Digest: sha256:7d246653d0511db2a6b2e0436cfd0e52ac8c066000264b3ce63331ac66dca625
|
||||
Status: Downloaded newer image for registry.nemunai.re/hello-world:latest
|
||||
|
||||
Hello World!
|
||||
============
|
||||
|
||||
This is a container running the image hello-world.
|
||||
My name is: 32df94d25823
|
||||
|
||||
Feel free to run this image again to see if the name changes or not,
|
||||
denoting a new container or not.
|
||||
```
|
||||
</div>
|
||||
|
||||
Le conteneur affiche son nom, celui-ci sera nécessairement différent pour vous
|
||||
et il sera différent pour chaque nouveau conteneur exécuté.
|
||||
|
||||
Chaque conteneur `hello-world` est créé à partir de la même image, mais on
|
||||
arrive toujours dans un nouvel environnement. Docker assigne un nom d'hôte
|
||||
aléatoire à chaque nouveau conteneur créé. L'idée est de visualiser ici que
|
||||
chaque exécution donne naissance à un nouveau conteneur.
|
||||
|
||||
|
||||
### Arguments de la ligne de commande
|
||||
|
||||
Remarquez comment on interagit avec chaque *objet Docker* : dans la ligne de
|
||||
@ -157,28 +292,6 @@ docker container run alpine /sbin/apk stats
|
||||
</div>
|
||||
|
||||
|
||||
### Images vs. conteneurs
|
||||
|
||||
À chaque fois que nous lançons un `run`, un nouveau conteneur est créé.
|
||||
L'image fournie comme argument est utilisée comme un modèle de base pour le
|
||||
conteneur et est recopiée grâce à un mécanisme de *Copy-On-Write*: c'est donc
|
||||
très rapide et ne consomme pas beaucoup d'espace disque.
|
||||
|
||||
Étant donné que chaque conteneur est créé à partir d'un modèle, cela signifie
|
||||
que lorsque nous exécutons une commande modifiant les fichiers d'un conteneur,
|
||||
cela ne modifie pas l'image de base. La modification reste contenue dans la
|
||||
couche propre au conteneur dans l'UnionFS.
|
||||
|
||||
Dans le schéma ci-après, on considère les images comme étant la partie figée de
|
||||
Docker à partir desquelles on peut créer des conteneurs.
|
||||
|
||||
Si l'on souhaite qu'une modification faite dans un conteneur (par exemple
|
||||
l'installation d'un paquet) s'applique à d'autres conteneurs, il va falloir
|
||||
créer une nouvelle image à partir de ce conteneur.
|
||||
|
||||
{ width=85% }
|
||||
|
||||
|
||||
### Programme par défaut
|
||||
|
||||
Chaque image vient avec un certain nombre de métadonnées, notamment le
|
||||
|
@ -60,7 +60,8 @@ Il y a deux méthodes pour obtenir des images Docker : soit les construire ave
|
||||
les outils fournis, soit les récupérer depuis un registre.
|
||||
|
||||
Lorsque vous ne précisez pas l'adresse d'un registre, Docker va aller chercher
|
||||
sur le [Docker Hub](https://hub.docker.com/). C'est son registre par défaut, chaque
|
||||
sur le [Docker Hub](https://hub.docker.com/). C'est le registre utilisé par
|
||||
défaut.
|
||||
|
||||
|
||||
### Les plugins Docker
|
||||
|
Loading…
x
Reference in New Issue
Block a user