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,
|
Cette commande va automatiquement exécuter une série d'actions pour nous,
|
||||||
comme indiqué dans le message affiché en retour :
|
comme indiqué dans le message affiché en retour :
|
||||||
|
|
||||||
D'abord, le daemon va rechercher s'il possède localement l'image
|
D'abord, le daemon va rechercher s'il possède localement l'image hello-world.
|
||||||
*hello-world*. Si ce n'est pas le cas, il va aller récupérer les différentes
|
Si ce n'est pas le cas, il va commencer par demander au registre les différents
|
||||||
couches de l'image sur le registre par défaut (celui de Docker). Il assemble
|
composants de l'image. On aperçoit la récupération de l'image dans les
|
||||||
ensuite les images en ajoutant une couche en lecture/écriture, propre au
|
premières lignes :
|
||||||
conteneur. Enfin, il lance la commande par défaut, telle que définie dans les
|
|
||||||
métadonnées de l'image.
|
|
||||||
|
|
||||||
Nous pouvons directement utiliser le client pour rechercher une image sur le
|
<div lang="en-US">
|
||||||
registre, en utilisant la commande `search` :
|
```
|
||||||
|
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">
|
<div lang="en-US">
|
||||||
```bash
|
```bash
|
||||||
@ -29,21 +52,22 @@ docker search mariadb
|
|||||||
```
|
```
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
Il est possible de mettre à jour les images locales, ou télécharger les couches
|
Cette commande atteint rapidement ses limites en raison de la difficulté à
|
||||||
d'images qui nous intéressent, en utilisant la commande `pull` :
|
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">
|
Vous trouverez forcément votre bonheur parmi les images proposées par les deux
|
||||||
```bash
|
principaux registres :
|
||||||
docker image pull ubuntu
|
|
||||||
```
|
|
||||||
</div>
|
|
||||||
|
|
||||||
|
- <https://hub.docker.com/>
|
||||||
|
- <https://quay.io/>
|
||||||
|
|
||||||
::::: {.warning}
|
::::: {.warning}
|
||||||
|
|
||||||
Les registres publics tels quel le Docker Hub mettent à disposition des images
|
Les registres publics tels quel le Docker Hub mettent à disposition des images
|
||||||
officielles, mais aussi des images créées par la communauté. Chaque utilisateur
|
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
|
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
|
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
|
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
|
### Arguments de la ligne de commande
|
||||||
|
|
||||||
Remarquez comment on interagit avec chaque *objet Docker* : dans la ligne de
|
Remarquez comment on interagit avec chaque *objet Docker* : dans la ligne de
|
||||||
@ -157,28 +292,6 @@ docker container run alpine /sbin/apk stats
|
|||||||
</div>
|
</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
|
### Programme par défaut
|
||||||
|
|
||||||
Chaque image vient avec un certain nombre de métadonnées, notamment le
|
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.
|
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
|
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
|
### Les plugins Docker
|
||||||
|
Loading…
x
Reference in New Issue
Block a user