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 [2021/12/28 20:45] – Ajout section résolution de nom 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 ====== | ||
- | 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. | + | Pour des généralités concernant |
- | 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 59: | 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 171: | Ligne 293: | ||
</ | </ | ||
+ | ===== Peuplement du fichier /etc/host ===== | ||
+ | |||
+ | :TODO: : | ||
+ | |||
+ | https:// | ||
===== Résolution de nom ===== | ===== Résolution de nom ===== | ||
Ligne 232: | Ligne 359: | ||
* https:// | * https:// | ||
* https:// | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||
+ | * https:// | ||