Docker est un outil astucieux qui permet aux développeurs de créer et d’exécuter leurs applications.
Fait amusant : DotCloud, une société de plateforme en tant que service (PaaS), l’a en fait créé en tant qu’outil interne !
Cependant, l’entreprise a rapidement réalisé son véritable potentiel et l’a mis à disposition en tant que projet open-source en 2013. Ce que nous connaissons aujourd’hui sous le nom de Docker Inc. est rapidement devenu populaire, avec des dizaines de milliers d’utilisateurs et de grands partenariats avec des entreprises comme Red Hat, IBM, Microsoft, Google et Cisco Systems !
Aujourd’hui, le développement de logiciels exige de l’agilité et une réponse rapide aux changements. Nous évaluons notre travail en points d’histoire, participons à des réunions d’information et utilisons des méthodologies telles que Scrum. Docker peut soutenir notre agilité.
Vous devez savoir que la phase de déploiement de tout développement de logiciel est coûteuse. C’est là que la plateforme Docker entre en jeu. Elle simplifie le déploiement en utilisant des logiciels virtuels au niveau du système d’exploitation pour placer les logiciels dans des conteneurs.
L’avantage de cette plateforme est qu’elle regroupe une application et toutes ses dépendances – comme les binaires, les bibliothèques, les fichiers de configuration, les scripts, les bocaux et autres – en un seul paquet facile à utiliser. Il s’agit d’une approche simple et normalisée qui a facilité la vie des développeurs de logiciels partout dans le monde !
Docker simplifie la collaboration et la mise en réseau entre les plateformes
Avant Docker, il était courant d’avoir besoin d’une combinaison de technologies, telles que des machines virtuelles, des outils de gestion de configuration, des systèmes de gestion de paquets et des réseaux complexes de dépendances de bibliothèques, pour gérer le mouvement des logiciels dans le pipeline de développement. La maintenance et l’administration de ces outils nécessitaient l’intervention d’ingénieurs qualifiés, et la plupart d’entre eux exigeaient des paramètres personnalisés.
Docker a changé la donne en permettant à tous les ingénieurs participant à ce processus de communiquer dans un seul et même langage, ce qui simplifie la collaboration.
Par l’intermédiaire de la machine hôte, les conteneurs Docker communiquent entre eux et avec le monde extérieur à l’aide du réseau Docker. Le modèle de réseau de conteneurs (CNM) contrôle le réseau Docker, qui utilise plusieurs pilotes de réseau différents. Les critères de sélection du réseau seront basés sur la fonction et l’objectif du conteneur.
Ils sont incroyablement puissants car ils peuvent connecter des charges de travail d’autres plateformes avec des services et des conteneurs Docker. Qu’ils fonctionnent sous Windows ou Linux, vous pouvez utiliser Docker pour gérer vos hôtes Docker sans tenir compte de la plateforme.
Comment fonctionne la mise en réseau Docker ?
Docker a spécifié un modèle de réseau fondamental connu sous le nom de modèle de réseau de conteneurs (CNM), avec des spécifications que tout logiciel qui met en œuvre un réseau de conteneurs doit respecter. Le CNM conserve la configuration du réseau dans une mémoire clé-valeur distribuée de type console.
Les trois composants du CNM sont le bac à sable, le point de terminaison et le réseau :
- Bac à sable : Le bac à sable contient la configuration du réseau du conteneur. Au sein du conteneur, il fonctionne comme une pile de réseau.
- Point d’extrémité : Le point d’extrémité est une interface pour un réseau qui se présente généralement par paires. Nous configurons la paire en plaçant une extrémité dans le réseau choisi et l’autre dans le bac à sable. Par ailleurs, les points d’extrémité ne rejoignent qu’un seul réseau, et un seul bac à sable de réseau peut contenir plus d’un point d’extrémité.
- Réseau : Il s’agit d’un ensemble de points d’extrémité dotés de capacités de communication directe.
Dans un bac à sable, chaque point d’extrémité ne peut avoir qu’une seule connexion réseau, même si plusieurs points d’extrémité sont présents. Un réseau est un regroupement de quelques points d’extrémité interconnectés ou plus.
Le pilote de réseau de Docker met en œuvre les idées du CNM. Docker utilise deux types de pilotes de réseau : les pilotes de réseau natifs et les pilotes de réseau distants. Les pilotes de réseau natifs, communément appelés pilotes intégrés, sont fournis par Docker et livrés avec le moteur Docker. En revanche, les pilotes tiers proposés par les fournisseurs sont connus sous le nom de pilotes réseau distants.
Il est possible de concevoir des pilotes qui intègrent des fonctionnalités spécifiques.
Réseaux Docker
Il existe principalement cinq réseaux dans Docker : bridge, host, overlay, none et macvlan.
Le réseau Bridge est le réseau par défaut de Docker. Une introduction à ces réseaux a été donnée dans mon article précédent sur l’architecture de Docker.
Dans cet article, je vais vous montrer la partie pratique du réseau docker. Vous apprendrez comment vérifier les détails de votre réseau docker, comment vous connecter à un réseau, comment créer votre réseau, et plus encore. Commençons donc.
Chaque fois que vous lancez un conteneur Docker, un réseau de pont par défaut appelé docker0 est associé au conteneur, à moins qu’un autre réseau ne soit spécifié. Par exemple, lorsque je lance la commande ifconfig
, vous obtiendrez les détails du réseau docker0 de type bridge ainsi que d’autres détails du réseau.
osboxes@worker2:~$ ifconfig
docker0 : flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 172.17.0.1 netmask 255.255.0.0 broadcast 172.17.255.255
ether 02:42:f6:59:4a:5f txqueuelen 0 (Ethernet)
Paquets RX 0 octets 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
Paquets TX 0 octets 0 (0.0 B)
Erreurs TX 0 abandonnées 0 dépassements 0 porteuse 0 collisions 0
enp0s3 : flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.2.15 netmask 255.255.255.0 broadcast 10.0.2.255
inet6 fe80::763e:c0b4:14df:b273 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:68:64:9a txqueuelen 1000 (Ethernet)
Paquets RX 2157 octets 2132896 (2.1 MB)
Erreurs RX 0 drop 0 overruns 0 frame 0
Paquets TX 952 octets 151610 (151.6 KB)
Erreurs TX 0 abandonnées 0 dépassements 0 porteuse 0 collisions 0
enp0s8 : flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.56.102 netmask 255.255.255.0 broadcast 192.168.56.255
inet6 fe80::20a:6c57:839d:2652 prefixlen 64 scopeid 0x20<link>
ether 08:00:27:53:45:82 txqueuelen 1000 (Ethernet)
Paquets RX 10597 octets 1497146 (1.4 MB)
Erreurs RX 0 drop 0 overruns 0 frame 0
Paquets TX 12058 octets 1730219 (1.7 MB)
Erreurs TX 0 abandonnées 0 dépassements 0 porteuse 0 collisions 0
lo : flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<hôte>
loop txqueuelen 1000 (Local Loopback)
Paquets RX 1196 octets 105396 (105.3 KB)
Erreurs RX 0 drop 0 overruns 0 frame 0
Paquets TX 1196 octets 105396 (105.3 KB)
Erreurs TX 0 abandonnées 0 dépassements 0 porteuse 0 collisions 0
Liste des réseaux
Exécutez la commande ls
pour vérifier tous les réseaux en cours d’exécution sur l’hôte actuel. Vous pouvez voir que sept réseaux sont présents actuellement, y compris bridge, host et none qui sont créés automatiquement lorsque vous installez Docker. En fonction des conteneurs que j’ai exécutés dans le passé, il y a également des détails sur d’autres réseaux personnalisés.
geekflare@geekflare:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
fec751a6ae21 bridge bridge local
21943b20735d docker_gwbridge bridge local
f51d1f3379e0 host host local
ppp8i7tvrxa0 ingress overlay swarm
ba68f73abeed mean-app_default bridge local
d466e75d86fa mean_default bridge local
5e5d9a192c00 none null local
Inspection du réseau
Vous pouvez lancer la commande inspect
pour obtenir tous les détails sur un type de réseau. Elle fournit des informations sur le réseau, notamment le nom, l’identifiant, l’heure de création, l’étendue, le pilote, les détails de configuration tels que le sous-réseau et l’adresse de la passerelle. Elle donne également des détails sur les conteneurs si l’un d’entre eux est en cours d’exécution. Sinon, il renverra une chaîne vide.
geekflare@geekflare:~$ docker network inspect bridge
[
{
"Name" : "bridge",
"Id" : "fec751a6ae21f20a06cdc6eb823e773caec063b6bf9a388016594e59fd1db475",
"Créé" : "2019-08-01T10:30:27.595054009-04:00",
"Scope" : "local",
"Driver" : "bridge",
"EnableIPv6" : false,
"IPAM" : {
"Driver" : "default",
"Options" : null,
"Config" : [
{
"Subnet" : "172.17.0.0/16",
"Gateway" : "172.17.0.1"
}
]
},
"Internal" : faux,
"Attachable" : false,
"Ingress" : faux,
"ConfigFrom" : {
"Network" : ""
},
"ConfigOnly" : faux,
"Containers" : {},
"Options" : {
"com.docker.network.bridge.default_bridge" : "true",
"com.docker.network.bridge.enable_icc" : "true",
"com.docker.network.bridge.enable_ip_masquerade" : "true",
"com.docker.network.bridge.host_binding_ipv4" : "0.0.0.0",
"com.docker.network.bridge.name" : "docker0",
"com.docker.network.driver.mtu" : "1500"
},
"Labels" : {}
}
]
Créer un réseau
La commande create
vous permet de créer votre propre réseau. Vous devez indiquer le type de pilote avec le drapeau --driver
, dans l’exemple ci-dessous j’utilise le type bridge.
geekflare@geekflare:~$ docker network create --driver bridge geekflare_network
08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409
Exécutez la commande ls pour vérifier si le réseau a été créé.
geekflare@geekflare:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
fec751a6ae21 bridge bridge local
21943b20735d docker_gwbridge bridge local
08e0da91f6de geekflare_network bridge local
f51d1f3379e0 host host local
ppp8i7tvrxa0 ingress overlay swarm
ba68f73abeed mean-app_default bridge local
d466e75d86fa mean_default bridge local
5e5d9a192c00 none null local
Je vais maintenant exécuter un conteneur docker sur le réseau que j’ai créé. Je lance un simple conteneur de serveur Apache dans la commande ci-dessous.
geekflare@geekflare:~$ docker run -it -d --network=geekflare_network httpd
38a0b0646da1a0045afcf7aa0cd6228b851f74107a6718bb19d599e896df1002
Exécution de la commande inspect pour vérifier toutes les informations de geekflare_network. Vous pouvez trouver les détails du conteneur dans la sortie de la commande inspect ; le nom du conteneur est determined_dubinsky.
geekflare@geekflare:~$ docker network inspect geekflare_network
[
{
"Name" : "geekflare_network",
"Id" : "08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409",
"Créé" : "2019-09-03T13:56:36.244295204-04:00",
"Scope" : "local",
"Driver" : "bridge",
"EnableIPv6" : false,
"IPAM" : {
"Driver" : "default",
"Options" : {},
"Config" : [
{
"Subnet" : "172.21.0.0/16",
"Gateway" : "172.21.0.1"
}
]
},
"Internal" : faux,
"Attachable" : false,
"Ingress" : faux,
"ConfigFrom" : {
"Network" : ""
},
"ConfigOnly" : faux,
"Containers" : {
"38a0b0646da1a0045afcf7aa0cd6228b851f74107a6718bb19d599e896df1002": {
"Name" : "déterminé_dubinsky",
"EndpointID" : "30d252720e0f381ba01d6f5414525dff8587abcf3c4920100f112898a52c8a23",
"MacAddress" : "02:42:ac:15:00:02",
"IPv4Address" : "172.21.0.2/16",
"IPv6Address" : ""
}
},
"Options" : {},
"Labels" : {}
}
]
Déconnexion du réseau
Pour déconnecter
le réseau du conteneur, exécutez la commande ci-dessous. Vous devez mentionner le nom du réseau et le nom du conteneur dans la commande disconnect.
geekflare@geekflare:~$ docker network disconnect geekflare_network determined_dubinsky
Ce réseau n’exécutera plus le conteneur determined_dubinsky ; le champ conteneur sera vide.
geekflare@geekflare:~$ docker network inspect geekflare_network
[
{
"Name" : "geekflare_network",
"Id" : "08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409",
"Créé" : "2019-09-03T13:56:36.244295204-04:00",
"Scope" : "local",
"Driver" : "bridge",
"EnableIPv6" : false,
"IPAM" : {
"Driver" : "default",
"Options" : {},
"Config" : [
{
"Subnet" : "172.21.0.0/16",
"Gateway" : "172.21.0.1"
}
]
},
"Internal" : faux,
"Attachable" : false,
"Ingress" : faux,
"ConfigFrom" : {
"Network" : ""
},
"ConfigOnly" : faux,
"Containers" : {},
"Options" : {},
"Labels" : {}
}
]
Pour créer un réseau autre que bridge, vous devez mentionner le nom du pilote autre que bridge. Pour créer un réseau overlay
, exécutez la commande ci-dessous.
geekflare@manager1:~$ docker network create --driver overlay geekflare_network_2
ynd2858eu1cngwhpc40m3h1nx
geekflare@manager1:~$ docker network ls
NETWORK ID NAME DRIVER SCOPE
fec751a6ae21 bridge bridge local
21943b20735d docker_gwbridge bridge local
08e0da91f6de geekflare_network bridge local
f51d1f3379e0 host host local
ppp8i7tvrxa0 ingress overlay swarm
ba68f73abeed mean-app_default bridge local
d466e75d86fa mean_default bridge local
5e5d9a192c00 none null local
ynd2858eu1cn geekflare_network_2 overlay swarm
Pour créer un réseau d’hôtes
, mentionnez host avec l’option –driver. L’exemple ci-dessous renvoie une erreur car une seule instance de réseau hôte est autorisée, qui était déjà en cours d’exécution auparavant. Cette commande ne créera donc pas d’autre réseau d’hôtes.
geekflare@manager1:~$ docker network create --driver host geekflare_network_3
Réponse d'erreur du démon : une seule instance du réseau "host" est autorisée
Conclusion
Nous avons tout dit sur le réseau docker et sur la façon dont vous pouvez vous connecter, vous déconnecter, créer et inspecter les réseaux docker. Essayez ces commandes pour vous familiariser avec le réseau Docket. Si vous êtes curieux d’apprendre Net Devops, alors consultez ce cours Udemy.