Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| sysadmin:docker:configuration_reseau [2022/01/20 10:50] – Ajour lien interne yoann | sysadmin:docker:configuration_reseau [2022/12/12 22:03] (Version actuelle) – Ajout d'un lien référence yoann | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | {{tag> | + | {{tag> |
| ====== Docker: Configuration réseau des conteneurs ====== | ====== Docker: Configuration réseau des conteneurs ====== | ||
| Ligne 5: | Ligne 5: | ||
| Pour des généralités concernant la conception et la gestion des réseaux avec Docker voir la note [[sysadmin: | Pour des généralités concernant la conception et la gestion des réseaux avec Docker voir la note [[sysadmin: | ||
| - | Par défaut le conteneur se voit attribuer une adresse IP pour chaque réseau auquel il est connecté. Le daemon Docker agit à la manière d'un serveur DHCP et fournit une IP dans le pool réservé au réseau. Chaque réseau à son propre masque et sa passerelle par défaut. | ||
| - | Lorsque | + | Initialement Docker possède 3 réseaux. Les réseaux existants peuvent être listés via la commande **'' |
| + | |||
| + | ^ bridge | ||
| + | ^ host | Le conteneur utilise la même interface que la machine hôte. A réserver à des usages spécifiques.| | ||
| + | ^ none | Pas de connexion réseau | | ||
| + | |||
| + | ===== Réseau par défaut ===== | ||
| + | |||
| + | Si on crée un conteneur sans spécifier de réseau c'est le réseau **bridge** qui est utilisé. Pour le vérifier: | ||
| + | |||
| + | <code bash> | ||
| + | # création d'un conteneur sans définition concernant le réseau | ||
| + | docker container run --name busybox --rm -it busybox: | ||
| + | |||
| + | # depuis le shell du conteneur, on affiche les interfaces et la passerelle | ||
| + | ip a show | ||
| + | |||
| + | 1: lo: < | ||
| + | link/ | ||
| + | inet 127.0.0.1/8 scope host lo | ||
| + | | ||
| + | 17: eth0@if18: < | ||
| + | link/ether 02: | ||
| + | inet 172.17.0.2/ | ||
| + | | ||
| + | |||
| + | ip route show | ||
| + | |||
| + | default via 172.17.0.1 dev eth0 | ||
| + | 172.17.0.0/ | ||
| + | </ | ||
| + | |||
| + | Le conteneur utilise le réseau 172.17.0.0/ | ||
| + | |||
| + | <code bash> | ||
| + | # Liste des interfaces de la machine hôte | ||
| + | ip addr show | ||
| + | . . . | ||
| + | 6: docker0: < | ||
| + | link/ether 02: | ||
| + | inet 172.17.0.1/ | ||
| + | | ||
| + | inet6 fe80:: | ||
| + | | ||
| + | |||
| + | . . . | ||
| + | </ | ||
| + | |||
| + | Ici on voit que l' | ||
| + | |||
| + | Le conteneur se voit attribuer une adresse IP pour chaque réseau auquel il est connecté. Le daemon Docker agit à la manière d'un serveur DHCP et fournit une IP dans le pool réservé au réseau. Chaque réseau à son propre masque et sa passerelle par défaut. | ||
| + | |||
| + | ===== Spécifier le réseau du conteneur ===== | ||
| + | |||
| + | On peut spécifier le réseau auquel connecter le conteneur via l' | ||
| + | |||
| + | <code bash> | ||
| + | # Ici on isole le conteneur en l' | ||
| + | docker container run --rm -it --name conteneur_test --net=none busybox: | ||
| + | |||
| + | # Equivalent | ||
| + | docker container run --rm -it --name conteneur_test --network none busybox: | ||
| + | / # ip a show | ||
| + | 1: lo: < | ||
| + | link/ | ||
| + | inet 127.0.0.1/8 scope host lo | ||
| + | | ||
| + | </ | ||
| + | |||
| + | |||
| + | Lors de sa création, le conteneur ne peut être connecté qu'à un seul réseau. Celui-ci peut être définit sur la ligne de commande via l' | ||
| <code bash> | <code bash> | ||
| Ligne 61: | Ligne 130: | ||
| On constate bien qu'une nouvelle interface connecte le conteneur au réseau 172.24.0.0/ | On constate bien qu'une nouvelle interface connecte le conteneur au réseau 172.24.0.0/ | ||
| + | |||
| + | ===== Accès au conteneur depuis l' | ||
| + | |||
| + | Pour accèder au conteneur (et à ses services) depuis l' | ||
| + | On associe des ports libres de l'hote aux ports à l' | ||
| + | |||
| + | <code bash> | ||
| + | # Associe a un port libre de l'hote le port 80 du conteneur | ||
| + | docker run --rm -d --name nginx --publish=80 nginx: | ||
| + | |||
| + | # Associe le port 8080 de l'hote au port 80 du conteneur | ||
| + | docker run --rm -d --name nginx --publish=8080: | ||
| + | </ | ||
| + | |||
| + | ===== Liaison entre conteneurs ===== | ||
| + | |||
| + | Pour faire communiquer des conteneurs en interne, on peut s' | ||
| + | |||
| + | Création d'un conteneur container_server en mode interactif | ||
| + | <code bash> | ||
| + | docker container run -it --rm --name container_server -h server01 busybox: | ||
| + | |||
| + | # Depuis le conteneur, on affiche le nom de la machine | ||
| + | hostname | ||
| + | |||
| + | server01 | ||
| + | </ | ||
| + | |||
| + | On souhaite pouvoir joindre via le réseau interne de Docker le conteneur " | ||
| + | |||
| + | <code bash> | ||
| + | docker container run -it --rm --name container_client -h client01 --link container_server: | ||
| + | |||
| + | # Depuis le shell du conteneur container_client | ||
| + | cat / | ||
| + | |||
| + | 127.0.0.1 | ||
| + | ::1 | ||
| + | fe00::0 ip6-localnet | ||
| + | ff00::0 ip6-mcastprefix | ||
| + | ff02::1 ip6-allnodes | ||
| + | ff02::2 ip6-allrouters | ||
| + | 172.17.0.2 | ||
| + | 172.17.0.3 | ||
| + | </ | ||
| + | |||
| + | Le fichier **/ | ||
| + | |||
| + | < | ||
| + | Selon la façon dont est construite l' | ||
| + | </ | ||
| ===== Nommage des interfaces ===== | ===== Nommage des interfaces ===== | ||
| Ligne 173: | Ligne 293: | ||
| </ | </ | ||
| + | ===== Peuplement du fichier /etc/host ===== | ||
| + | |||
| + | :TODO: : | ||
| + | |||
| + | https:// | ||
| ===== Résolution de nom ===== | ===== Résolution de nom ===== | ||
| Ligne 234: | Ligne 359: | ||
| * https:// | * https:// | ||
| * https:// | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||
| + | * https:// | ||