Outils pour utilisateurs

Outils du site


sysadmin:docker:configuration_reseau

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
sysadmin:docker:configuration_reseau [2022/01/30 11:11] yoannsysadmin:docker:configuration_reseau [2022/12/12 22:03] (Version actuelle) – Ajout d'un lien référence yoann
Ligne 1: Ligne 1:
-{{tag>sysadmin netadmin docker network réseau todo}}+{{tag>sysadmin netadmin docker network réseau}}
  
 ====== 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:docker:concepts_et_philosophie_gestion_reseau]]. Pour des généralités concernant la conception et la gestion des réseaux avec Docker voir la note [[sysadmin:docker:concepts_et_philosophie_gestion_reseau]].
  
-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 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'option **%%--network%%**. On peut également spécifier une adresse IP via les options **%%--ip%%** ou **%%--ip6%%**. Si rien n'est spécifié, un réseau dédié est créé pour le conteneur.+Initialement Docker possède 3 réseaux. Les réseaux existants peuvent être listés via la commande **''docker network ls''**. Succinctement on peut dire: 
 + 
 +^ bridge  | Réseau utilisé par défaut pour les conteneurs. 
 +^ 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:latest /bin/sh 
 + 
 +# depuis le shell du conteneur, on affiche les interfaces et la passerelle 
 +ip a show 
 + 
 +1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000 
 +    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
 +    inet 127.0.0.1/8 scope host lo 
 +       valid_lft forever preferred_lft forever 
 +17: eth0@if18: <BROADCAST,MULTICAST,UP,LOWER_UP,M-DOWN> mtu 1500 qdisc noqueue  
 +    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff 
 +    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0 
 +       valid_lft forever preferred_lft forever 
 + 
 +ip route show 
 + 
 +default via 172.17.0.1 dev eth0  
 +172.17.0.0/16 dev eth0 scope link  src 172.17.0.2  
 +</code> 
 + 
 +Le conteneur utilise le réseau 172.17.0.0/16, il a l'adresse 172.17.0.2 et contacte la passerelle 172.17.0.1 pour joindre tout autre réseau. Si on affiche les interfaces de la machine hôte exécutant Docker Engine, on peut voir une interface nommée **docker0**: 
 + 
 +<code bash> 
 +# Liste des interfaces de la machine hôte 
 +ip addr show 
 +. . . 
 +6: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default  
 +    link/ether 02:42:f5:c5:d5:9d brd ff:ff:ff:ff:ff:ff 
 +    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 
 +       valid_lft forever preferred_lft forever 
 +    inet6 fe80::42:f5ff:fec5:d59d/64 scope link  
 +       valid_lft forever preferred_lft forever 
 + 
 +. . . 
 +</code> 
 + 
 +Ici on voit que l'interface **docker0** à l'adresse 172.17.0.1, c'est donc la **passerelle du réseau par défaut bridge**. 
 + 
 +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'argument **%%--net%%** ou **%%--network%%**: 
 + 
 +<code bash> 
 +# Ici on isole le conteneur en l'associant au réseau none 
 +docker container run --rm -it --name conteneur_test --net=none busybox:latest /bin/sh 
 + 
 +# Equivalent 
 +docker container run --rm -it --name conteneur_test --network none busybox:latest /bin/sh 
 +/ # ip a show 
 +1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue qlen 1000 
 +    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 
 +    inet 127.0.0.1/8 scope host lo 
 +       valid_lft forever preferred_lft forever 
 +</code> 
 + 
 + 
 +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'option **%%--network%%**. On peut également spécifier une adresse IP via les options **%%--ip%%** ou **%%--ip6%%**. Si rien n'est spécifié, un réseau dédié est créé pour le conteneur.
  
 <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/16 On constate bien qu'une nouvelle interface connecte le conteneur au réseau 172.24.0.0/16
 +
 +===== Accès au conteneur depuis l'extérieur =====
 +
 +Pour accèder au conteneur (et à ses services) depuis l'extérieur du réseau dans lequel il est confiné, Docker permet de crééer des translations par port ou **PAT**((**P**ort **A**ddress **T**ranslation)).
 +On associe des ports libres de l'hote aux ports à l'écoute des conteneurs via le paramètre **%%--publish%%**:
 +
 +<code bash>
 +# Associe a un port libre de l'hote le port 80 du conteneur
 +docker run --rm -d --name nginx --publish=80 nginx:alpine
 +
 +# Associe le port 8080 de l'hote au port 80 du conteneur
 +docker run --rm -d --name nginx --publish=8080:80 nginx:alpine
 +</code>
  
 ===== Liaison entre conteneurs ===== ===== Liaison entre conteneurs =====
Ligne 211: Ligne 293:
 </code> </code>
  
 +===== Peuplement du fichier /etc/host =====
 +
 +:TODO: :TODO_DOCUPDATE:
 +
 +https://runebook.dev/fr/docs/docker/engine/reference/run/index
  
 ===== Résolution de nom ===== ===== Résolution de nom =====
Ligne 273: Ligne 360:
   * https://stackoverflow.com/questions/39493490/provide-static-ip-to-docker-containers-via-docker-compose   * https://stackoverflow.com/questions/39493490/provide-static-ip-to-docker-containers-via-docker-compose
   * https://linuxconfig.org/basic-example-on-how-to-link-docker-containers   * https://linuxconfig.org/basic-example-on-how-to-link-docker-containers
 +  * https://runebook.dev/fr/docs/docker/engine/reference/run/index
 +  * https://kerneltalks.com/networking/how-docker-container-dns-works/
  
sysadmin/docker/configuration_reseau.1643541060.txt.gz · Dernière modification : 2022/01/30 11:11 de yoann