85 lines
3.4 KiB
Markdown
85 lines
3.4 KiB
Markdown
|
\newpage
|
||
|
|
||
|
Composition de Docker
|
||
|
=====================
|
||
|
|
||
|
Docker est une suite d'outils de haut niveau, permettant d'utiliser les
|
||
|
conteneurs.
|
||
|
|
||
|
Docker est composé d'un daemon lancé au démarrage de votre machine, avec lequel
|
||
|
vous interagissez via un client (le programme `docker`). La communication entre
|
||
|
le daemon et le client s'effectuant au travers d'une socket, le client peut ne
|
||
|
pas être forcément sur la machine qui exécutera effectivement les conteneurs.
|
||
|
|
||
|
C'est ce qu'il se passe lorsque vous utilisez Docker4Windows et Docker4Mac :
|
||
|
une machine virtuelle Linux est lancé parallèlement à votre système et chaque
|
||
|
commande `docker` que vous tapez est passé au deamon dans la machine virtuelle.
|
||
|
|
||
|
|
||
|
## `runc` et `containerd`
|
||
|
|
||
|
La notion de conteneurs est maintenant normalisées par
|
||
|
[l'Open Container Initiative](https://opencontainers.org).
|
||
|
|
||
|
Docker lance des conteneurs respectant cette norme grâce au programme `runc`.
|
||
|
|
||
|
Toute la gestion de l'exécution du conteneur est délégué au programme
|
||
|
`containerd`, également issue de l'initiative. C'est lui aussi un daemon (géré
|
||
|
par Docker), dont le but est de monitorer les conteneurs lancés (pour les
|
||
|
relancer en cas de crash par exemple) ou encore de récupérer les logs de chaque
|
||
|
conteneur.
|
||
|
|
||
|
|
||
|
## Les images Docker
|
||
|
|
||
|
Une image Docker est un système de fichiers en lecture seule. Il est formé d'un
|
||
|
ensemble de couches, agrégées selon le principe d'UnionFS.
|
||
|
|
||
|
Une image peut, par exemple, être un système Ubuntu complet ou juste contenir
|
||
|
le programme busybox ou encore un serveur web et votre application web, prêt à
|
||
|
l'emploi.
|
||
|
|
||
|
Les images sont utilisées pour créer des conteneurs.
|
||
|
|
||
|
Il y a deux méthodes pour obtenir des images Docker : soit les construire avec
|
||
|
les outils fournis, soit les récupérer depuis un registre.
|
||
|
|
||
|
|
||
|
## Les conteneurs Docker
|
||
|
|
||
|
Alors que les images constituent la partie immuable de Docker, les conteneurs
|
||
|
sont sa partie vivante. Chaque conteneur est créé à partir d'une image : à
|
||
|
chaque fois que vous lancez un conteneur, une couche lecture/écriture est
|
||
|
ajoutée au dessus de l'image. Cette couche est propre au conteneur et est
|
||
|
temporaire : l'image n'est pas modifié par l'exécution d'un conteneur.
|
||
|
|
||
|
Chaque conteneur s'exécute dans un environnement restreint et distinct de
|
||
|
l'environnement principal où vous avez votre bureau. Par exemple, dans cet
|
||
|
environnement, vous ne pouvez pas voir les processus qui n'y sont pas.
|
||
|
|
||
|
|
||
|
## Les registres Docker (*Docker registries*)
|
||
|
|
||
|
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 réceptionner.
|
||
|
|
||
|
Le registre utilisé de base est le [Docker Hub](https://hub.docker.com/) : il
|
||
|
contient à la fois des images officielles (ubuntu, debian, nginx, ...) et des
|
||
|
images crées par des utilisateurs.
|
||
|
|
||
|
|
||
|
## Outils annexes
|
||
|
|
||
|
En plus du Docker-engine, le daemon et client que nous allons utiliser
|
||
|
aujourd'hui, Docker développe également :
|
||
|
|
||
|
* **Docker-machine :** qui permet d'installer et configurer le daemon
|
||
|
rapidement sur plusieurs machines (afin de les utiliser au sein d'un cluster) ;
|
||
|
|
||
|
* **Docker-swarm :** désormais intégré à Docker (depuis la version 1.12), cela
|
||
|
permet de gérer un cluster de machine et de faire de l'orchestration ;
|
||
|
|
||
|
* **Docker-compose :** qui permet de lancer un ensemble de conteneurs dépend
|
||
|
les uns des autres (par exemple un serveur web et sa base de données).
|