2016-09-08 01:44:20 +00:00
|
|
|
|
\newpage
|
|
|
|
|
|
|
|
|
|
Composition de Docker
|
2021-09-21 09:44:12 +00:00
|
|
|
|
---------------------
|
2016-09-08 01:44:20 +00:00
|
|
|
|
|
2017-10-04 07:00:58 +00:00
|
|
|
|
Docker est un écosystème d'outils de haut niveau, permettant d'utiliser des
|
|
|
|
|
*conteneurs*.
|
2016-09-08 01:44:20 +00:00
|
|
|
|
|
|
|
|
|
Docker est composé d'un daemon lancé au démarrage de votre machine, avec lequel
|
2021-09-16 01:45:54 +00:00
|
|
|
|
vous interagissez via un client (le programme `docker`). La communication entre
|
2019-10-01 09:03:15 +00:00
|
|
|
|
le daemon et le client s'effectuant sur une API REST généralement au travers
|
|
|
|
|
d'une socket.
|
2016-09-08 01:44:20 +00:00
|
|
|
|
|
2019-10-01 09:03:15 +00:00
|
|
|
|
Le client peut d'ailleurs ne pas être sur la même machine qui exécutera
|
2021-09-16 01:45:54 +00:00
|
|
|
|
effectivement les conteneurs.[^dockermachine]
|
2022-02-24 19:43:43 +00:00
|
|
|
|
C'est ce qu'il se passe lorsqu'on utilise *Docker4Windows* ou *Docker4Mac* :
|
2021-09-16 01:45:54 +00:00
|
|
|
|
une machine virtuelle Linux est lancée parallèlement au système de base et
|
|
|
|
|
chaque commande `docker` tapée est passée au deamon dans la machine virtuelle.
|
2016-09-08 01:44:20 +00:00
|
|
|
|
|
2017-10-04 23:42:56 +00:00
|
|
|
|
[^dockermachine]: Il suffit de modifier la variable d'environnement
|
|
|
|
|
`DOCKER_HOST` ou de passer le paramètre `-H` suivi de l'URL de la socket à
|
2022-02-24 19:43:43 +00:00
|
|
|
|
`docker`. Voir aussi : <https://docs.docker.com/machine/overview/>
|
2016-09-08 01:44:20 +00:00
|
|
|
|
|
2021-09-19 22:19:49 +00:00
|
|
|
|
Commençons par planter le décor, en détaillant les principaux mécanismes de
|
2021-09-12 08:31:36 +00:00
|
|
|
|
Docker.
|
|
|
|
|
|
2016-09-08 01:44:20 +00:00
|
|
|
|
|
2021-09-21 09:44:12 +00:00
|
|
|
|
### Les images Docker
|
2016-09-08 01:44:20 +00:00
|
|
|
|
|
2016-09-08 02:40:34 +00:00
|
|
|
|
Une image Docker est un système de fichiers en lecture seule. Elle est formée
|
|
|
|
|
d'un ensemble de couches, agrégées selon le principe d'UnionFS.
|
2016-09-08 01:44:20 +00:00
|
|
|
|
|
2022-02-24 19:43:43 +00:00
|
|
|
|
Une image peut, par exemple, contenir :
|
2018-10-03 08:56:13 +00:00
|
|
|
|
|
2021-09-12 08:31:36 +00:00
|
|
|
|
* un système Ubuntu opérationnel,
|
2018-10-03 08:56:13 +00:00
|
|
|
|
* le programme `busybox`,
|
|
|
|
|
* un serveur web et votre application web, prêts à l'emploi,
|
2022-04-08 13:28:11 +00:00
|
|
|
|
* ...
|
2016-09-08 01:44:20 +00:00
|
|
|
|
|
2019-10-01 09:03:15 +00:00
|
|
|
|
Les images sont utilisées comme **modèle** qui sera ensuite dupliqué à chaque
|
|
|
|
|
fois que l'on démarrera un nouveau conteneur.
|
2016-09-08 01:44:20 +00:00
|
|
|
|
|
2022-02-24 19:43:43 +00:00
|
|
|
|
Il y a deux méthodes pour obtenir des images Docker : soit les construire avec
|
2016-09-08 01:44:20 +00:00
|
|
|
|
les outils fournis, soit les récupérer depuis un registre.
|
|
|
|
|
|
|
|
|
|
|
2021-09-21 09:44:12 +00:00
|
|
|
|
### Les registres Docker (*Docker registries*)
|
2021-09-16 01:45:54 +00:00
|
|
|
|
|
|
|
|
|
Les registres sont des plates-formes de stockage, publiques ou privées,
|
|
|
|
|
contenant des images. Ils permettent de récupérer des images, mais également
|
|
|
|
|
d'en envoyer.
|
|
|
|
|
|
2022-02-24 19:43:43 +00:00
|
|
|
|
Le registre utilisé de base est le [Docker Hub](https://hub.docker.com/) : il
|
|
|
|
|
contient à la fois des images officielles (ubuntu, debian, nginx, ...), des
|
2021-09-16 01:45:54 +00:00
|
|
|
|
images créées par des utilisateurs, mais aussi des images de grands éditeurs,
|
|
|
|
|
payantes, à destination des entreprises.
|
|
|
|
|
|
|
|
|
|
Des registres alternatifs existent comme celui de [quay.io](https://quay.io/search),
|
|
|
|
|
et les dépôts de sources tels que
|
|
|
|
|
[GitHub](https://github.blog/2020-09-01-introducing-github-container-registry/)
|
|
|
|
|
et [GitLab](https://docs.gitlab.com/ee/user/packages/container_registry/) le
|
|
|
|
|
proposent également.
|
|
|
|
|
|
|
|
|
|
|
2021-09-21 09:44:12 +00:00
|
|
|
|
### Les conteneurs Docker
|
2016-09-08 01:44:20 +00:00
|
|
|
|
|
|
|
|
|
Alors que les images constituent la partie immuable de Docker, les conteneurs
|
2022-02-24 19:43:43 +00:00
|
|
|
|
sont sa partie vivante. Chaque conteneur est créé à partir d'une image : à
|
2021-09-12 08:31:36 +00:00
|
|
|
|
chaque fois que nous lançons un conteneur, une couche lecture/écriture est
|
2017-10-16 20:59:22 +00:00
|
|
|
|
ajoutée au dessus de l'image. Cette couche est propre au conteneur et
|
2022-02-24 19:43:43 +00:00
|
|
|
|
temporaire : l'image n'est pas modifiée par l'exécution d'un conteneur.
|
2016-09-08 01:44:20 +00:00
|
|
|
|
|
2019-10-01 09:03:15 +00:00
|
|
|
|
![Couches d'un conteneur](layers-multi-container.png "Couches d'un conteneur"){ width=70% }
|
|
|
|
|
|
2016-09-08 01:44:20 +00:00
|
|
|
|
Chaque conteneur s'exécute dans un environnement restreint et distinct de
|
2016-09-08 02:40:34 +00:00
|
|
|
|
l'environnement principal (où vous avez votre bureau). Par exemple, dans cet
|
2017-10-16 20:59:22 +00:00
|
|
|
|
environnement, vous ne pouvez pas voir les processus qui sont situés en dehors,
|
2016-09-08 02:40:34 +00:00
|
|
|
|
ni accéder aux fichiers extérieurs.
|