virli/tutorial/1/what.md

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).