Notions · Conteneurs

Volumes et ports

Les deux ponts entre le conteneur jetable et le monde réel.

Le problème

Une boîte fermée et jetable

Le conteneur vit isolé : son réseau est privé, ses fichiers meurent avec lui. Détruisez-le, et tout ce qu'il contenait disparaît.

La machine hôte
Le conteneur les données du site
docker rm
La machine hôte
tout a disparu

Deux ponts règlent le problème : le volume pour les fichiers, le port pour les visiteurs.

Le volume · 1

Un répertoire qui survit au conteneur

Le volume branche un répertoire du conteneur directement sur le disque de la machine. Le conteneur peut mourir et renaître : les données, elles, restent sur le disque.

La machine hôte
Le conteneur mysql /var/lib/mysql
-v
/home/alice/donnees
Le volume · 2

Trois volumes du quotidien

Les fichiers du site

Le site vit sur la machine, le serveur web le sert depuis le conteneur. On modifie un fichier, le site change aussitôt.

La base de données

Un volume nommé, géré par Docker. La boutique survit à toutes les mises à jour du conteneur.

La configuration

Un seul fichier, monté en lecture seule (:ro) : le conteneur le lit, mais ne peut pas l'abîmer.

# les fichiers du site, la base, la configuration
docker run -v ${PWD}/www:/var/www/html httpd
docker run -v donnees-boutique:/var/lib/mysql mysql:8.0
docker run -v ${PWD}/nginx.conf:/etc/nginx/nginx.conf:ro nginx

donnees-boutique est un volume nommé : un répertoire sur le disque de la machine, que l'image utilise simplement par ce nom. Docker le fabrique et se souvient où il est.

Le port · 1

Une porte percée vers le conteneur

Le conteneur a son propre réseau : sans aide, aucun visiteur ne peut l'atteindre. La redirection de port perce une porte dans la machine et la relie à celle du conteneur.

le visiteur
http://machine
La machine hôte port 80
-p 80:80
Le conteneur apache port 80
Le port · 2

Trois redirections du quotidien

Le classique

80:80 : la porte standard du web mène droit au conteneur. Le visiteur ne voit aucune différence.

Deux sites, une machine

8080 et 8081 côté machine, 80 côté conteneurs : deux sites cohabitent sans se marcher dessus.

Réservé à la maison

Avec 127.0.0.1, la base répond seulement à la machine elle-même. Les curieux de l'extérieur restent dehors.

# le classique, la cohabitation, le port privé
docker run -p 80:80 monsite
docker run -p 8080:80 boutique && docker run -p 8081:80 blogue
docker run -p 127.0.0.1:3306:3306 mysql:8.0
La combinaison

Les deux ponts dans une commande

le visiteur
-p 80:80
La machine hôte
Le conteneur port 80 /var/www/html
-v
/home/alice/www
# le visiteur entre par le port, les fichiers vivent sur le disque
docker run -p 80:80 -v ${PWD}/www:/var/www/html monimage
À retenir

Les quatre phrases du diaporama