# Labo 8 - Le réseau, partie 2

Il existe 5 types de drivers réseaux que nous pouvons utiliser lors de la création d'un conteneur en ajoutant cet argument

```
--network <type>
```

##### Driver 1 : none

Absence totale de réseau au conteneur

```
sudo docker run -ti --rm --network none bash
```

[![image-1605530172447.png](https://kb.numericare.fr/uploads/images/gallery/2020-11/scaled-1680-/7r1bhe9HjILnKQTf-image-1605530172447.png)](https://kb.numericare.fr/uploads/images/gallery/2020-11/7r1bhe9HjILnKQTf-image-1605530172447.png)

Même en spécifiant un port avec -p il n'y aura pas de communication réseau

##### Driver 2 : bridge

Iil est le pilote par défaut. Il peut être utilisé pour faire communiquer plusieurs conteneurs entre eux quand c'est spécifié

Nous avons des adresses ip et nous voyons que les conteneurs se voient

[![image-1605530674999.png](https://kb.numericare.fr/uploads/images/gallery/2020-11/scaled-1680-/tLR39IdZaXafri7O-image-1605530674999.png)](https://kb.numericare.fr/uploads/images/gallery/2020-11/tLR39IdZaXafri7O-image-1605530674999.png)

Les deux conteneurs peuvent également communiquer avec le réseau de l'hôte qui a par défaut l'adresse ip 172.17.0.1

[![image-1605530791449.png](https://kb.numericare.fr/uploads/images/gallery/2020-11/scaled-1680-/kDChOEOcWrSNxXIA-image-1605530791449.png)](https://kb.numericare.fr/uploads/images/gallery/2020-11/kDChOEOcWrSNxXIA-image-1605530791449.png)

Maintenant chaque conteneur créé pourra communiquer avec un autre grâce au bridge par défaut.   
Il est cependant possible d'isoler les réseaux des conteneurs en créant un clone du bridge

```
sudo docker network create --driver=bidge mon_bridge
```

Puis un

```
sudo docker network ls
```

[![image-1605531194118.png](https://kb.numericare.fr/uploads/images/gallery/2020-11/scaled-1680-/2h1kNvakCOuebauw-image-1605531194118.png)](https://kb.numericare.fr/uploads/images/gallery/2020-11/2h1kNvakCOuebauw-image-1605531194118.png)

Voyons comment créer des conteneurs sur ce nouveau bridge

```
sudo docker run -ti --rm --network=mon_bridge --name=srv1 bash
```

Puis

```
ifconfig
```

Et pour le deuxième conteneur

```
sudo docker run -ti --rm --network=mon_bridge --name=srv2 bash
```

Puis

```
ifconfig
```

[![image-1605531621956.png](https://kb.numericare.fr/uploads/images/gallery/2020-11/scaled-1680-/ioX5SQshO7mznaIx-image-1605531621956.png)](https://kb.numericare.fr/uploads/images/gallery/2020-11/ioX5SQshO7mznaIx-image-1605531621956.png)

Le DNS interne géré par Docker ne s'applique uniquement qu'aux réseaux bridges clonés

[![image-1605531787033.png](https://kb.numericare.fr/uploads/images/gallery/2020-11/scaled-1680-/ImHEqDWlEXiOwUHX-image-1605531787033.png)](https://kb.numericare.fr/uploads/images/gallery/2020-11/ImHEqDWlEXiOwUHX-image-1605531787033.png)

Maintenant si les conteneurs sont rattachés au bridge par défaut, il est possible de les rattacher dynamiquement à un bridge cloné

```
sudo docker network connect=mon_bridge srv1
```

et

```
sudo docker network connect=mon_bridge srv2
```

Pour supprimer un bridge cloné, il suffit de faire

```
sudo docker network rm mon_bridge
```

[![image-1605532605274.png](https://kb.numericare.fr/uploads/images/gallery/2020-11/scaled-1680-/lD9WH5js7RPuZoDh-image-1605532605274.png)](https://kb.numericare.fr/uploads/images/gallery/2020-11/lD9WH5js7RPuZoDh-image-1605532605274.png)

<p class="callout info">Cette opération ne peut se faire si nous n'avons plus aucun conteneur attaché à ce réseau</p>

##### Driver 3 : host

Il permet à un conteneur de partager la même pile réseau que celle de l'hôte

Par exemple avec nginx nous avions spécifié un port particulier mais si nous faisons simplement

```
sudo docker run --rm --network=host nginx
```

On a bien accès au serveur nginx via un navigateur web  
L'accès au network host est assez peu courant

##### Driver 4 : overlay

Il permet de connecter entre eux qui tournent sous des hôtes différents

##### Driver 5 : Macvlan

Il permet d'attribuer une adresse MAC à l'interface réseau virtuelle de chaque conteneur