Communication avec l’extérieur

Support de présentation : https://soleil-docker.jrobert-orleans.fr/03-Communication_avec_le_reste_du_monde

Réseau

SNAT

Lancez un conteneur alpine et constatez que vous pouvez communique avec l’extérieur.

docker run -it --rm alpine sh
ping google.com

Par défaut vos conteneurs ont accès à l’extérieur (SNAT).

Expériementation du DNAT

A la création d’un conteneur, on crée une redirection de port en ajoutant l’option -p PORTHOTE:PORTCONTENEUR à docker run. Cela ouvre le port PORTHOTE sur votre machine et redirige tout ce qui y arrive sur le port PORTCONTENEUR du conteneur.

Par exemple, en partant de l’image nginx qui lance un serveur web qui écoute sur le port 80 du conteneur, nous allons pouvoir exposer le port 8000 de notre machine : docker run -p 8000:80 nginx.

Essayez ! Essayez avec d’autres ports pour vous assurer que les choses sont claires.

Variables d’environnement

Créez un fichier affiche_variable_essai.sh contenant le code suivant :

#!/bin/bash

echo Le contenu de la variable ESSAI :
echo $ESSAI

Ce script affiche la valeur de la variable d’environnement ESSAI. Pour le constater, il faut faire :

export ESSAI="Bonjour"
./affiche_variable_essai.sh
  • Écrivez un dockerfile sur la base de alpine dont l’entrypoint est ce fichier afficher_essai.sh (pensez à donner les droits d’exécution à affiche_variable_essai.sh)

  • Exécutez ce conteneur après avoir exporté la variable d’environnement ESSAI. Ca ne donne rien et c’est normal, ce n’est pas de cette façon que l’on passe des variables d’environnement au conteneur.

  • Pour passer une valeur à l’environnement à l’exécution du conteneur on fera : docker run -e "ESSAI=Bonjour" -it --rm IMAGE

Essayez !

Bind mount

Un bind mount est un montage d’un dossier de l’hôte dans un dossier du conteneur. A la création d’un conteneur, on crée un bind mount en ajoutant l’option -v CHEMINHOTE:CHEMINCONTENEUR à docker run.

Essayez en lançant une image alpine avec la commande sh et montant le répertoire courant dans le dossier /opt/ .

Volumes

Un volume est un peu comme un bind mount, à la différence que le volume est un espace de stockage géré par docker (par exemple en utilisant un répertoire quelque part sur le disque, ou encore en utilisant un stockage réseau en NFS, …)

Pour créer un volume on fera : docker volume create nom_volume . Ensuite, au lancement d’un conteneur en ajoutant l’option -v nom_volume:CHEMINCONTENEUR à docker run.