Docker est un outil soigné où les développeurs peuvent créer et exécuter leurs applications.
Fait amusant : DotCloud, une société de plate-forme en tant que service (PaaS), l'a en fait créé comme un outil interne !
Cependant, la société a rapidement réalisé son véritable potentiel et l'a rendu disponible en tant que projet open source en 2013. Ce que nous appelons maintenant 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 !
Le développement de logiciels d'aujourd'hui exige de l'agilité et une réponse rapide aux changements. Nous évaluons notre travail en story points, participons à des stand-ups et utilisons des méthodologies comme Scrum. Docker peut soutenir notre agilité.
Vous devez être conscient que la phase de déploiement de tout développement logiciel coûte cher. Et c'est là qu'intervient la plate-forme Docker. Elle simplifie le déploiement en utilisant un logiciel virtuel au niveau du système d'exploitation pour placer les logiciels dans des conteneurs.

L'avantage de cette plate-forme est qu'elle regroupe une application et toutes ses dépendances - comme les fichiers binaires, les bibliothèques, les fichiers de configuration, les scripts, les jars, etc. - dans un seul package facile à utiliser. C'est une approche simple et standardisée qui facilite la vie des développeurs de logiciels du monde entier !
Docker simplifie la collaboration et la mise en réseau sur toutes les plateformes
Avant Docker, il était courant d'avoir besoin d'une combinaison de technologies, telles que machines virtuelles, des outils de gestion de configuration, des systèmes de gestion de packages et des réseaux complexes de dépendances de bibliothèques, pour gérer le mouvement des logiciels dans le pipeline de développement. Pour entretenir et administrer ces outils, des ingénieurs compétents étaient nécessaires ; paramètres personnalisés les plus requis.
Docker a changé cela en permettant à tous les ingénieurs participant à ce processus de communiquer dans un seul langage, simplifiant ainsi la collaboration.
Via 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 réseau différents. Les critères de sélection du réseau seront basés sur la fonction et le but du conteneur.
Ils sont incroyablement puissants car ils peuvent connecter des charges de travail d'autres plates-formes avec des services et des conteneurs Docker. Qu'ils exécutent Windows ou Linux, vous pouvez utiliser Docker pour gérer votre Hôtes Docker d'une manière indépendante de la plate-forme.
Comment fonctionne Docker Networking ?
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 implémente un réseau de conteneurs doit respecter. CNM conserve la configuration réseau dans un magasin clé-valeur distribué de style console.

Les trois composants du CNM sont le bac à sable, le point de terminaison et le réseau :
- Bac à sable: Un bac à sable héberge la configuration réseau du conteneur. Au sein du conteneur, il fonctionne comme une pile réseau.
- Endpoint: Endpoint est une interface pour un réseau qui vient 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. En outre, les points de terminaison ne rejoignent qu'un seul réseau et un seul bac à sable réseau peut contenir plusieurs points de terminaison.
- Réseau: Il comprend une collection de terminaux avec des capacités de communication directe.
Dans un bac à sable, chaque point de terminaison ne peut avoir qu'une seule connexion réseau, même si plusieurs points de terminaison sont présents. Un réseau est un groupement d'au moins quelques terminaux interconnectés.
Le pilote de réseau de la mise en réseau Docker met les idées CNM en action. Docker utilise deux types de pilotes réseau : les pilotes réseau natifs et les pilotes réseau distants. Les pilotes réseau natifs, communément appelés pilotes intégrés, sont fournis par Docker et livrés avec le moteur Docker. Alors que les pilotes tiers des fournisseurs sont appelés pilotes de réseau distants.
Il est possible de concevoir des pilotes qui intègrent des fonctionnalités spécifiques.
Docker Networks
Il existe principalement cinq réseaux dans docker - bridge, host, overlay, none et macvlan.
Le réseau de pont est le réseau par défaut dans le docker. Une introduction à ces réseaux a été donnée dans mon précédent article sur architecture de docker.
Dans cet article, je vais vous montrer la partie pratique de la mise en 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, etc. Alors, commençons.
Chaque fois que vous exécutez un conteneur Docker, un appel réseau de pont par défaut docker0 est associé au conteneur sauf si un autre réseau est spécifié. Par exemple, quand je cours ifconfig
commande, vous obtiendrez les détails du réseau docker0 de type pont 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)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 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)
RX packets 2157 bytes 2132896 (2.1 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 952 bytes 151610 (151.6 KB)
TX errors 0 dropped 0 overruns 0 carrier 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)
RX packets 10597 bytes 1497146 (1.4 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 12058 bytes 1730219 (1.7 MB)
TX errors 0 dropped 0 overruns 0 carrier 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<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 1196 bytes 105396 (105.3 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1196 bytes 105396 (105.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
Listing Network
Exécutez le ls
pour vérifier tous les réseaux fonctionnant sur l'hôte actuel. Vous pouvez voir, sept réseaux sont actuellement présents, y compris le pont, l'hôte et aucun qui est créé automatiquement lorsque vous installez Docker. En fonction des conteneurs que j'ai exécutés dans le passé, il existe é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
Inspecting Network
Tu peux courir inspect
commande pour obtenir tous les détails sur un type de réseau. Il donne des informations sur le réseau, notamment le nom, l'ID, l'heure de création, l'étendue, le pilote, les détails de configuration tels que l'adresse de sous-réseau et de passerelle. Je donnerai également des détails sur le conteneur si un conteneur est opérationnel. Sinon, il renverra une chaîne vide.
geekflare@geekflare:~$ docker network inspect bridge
[
{
"Name": "bridge",
"Id": "fec751a6ae21f20a06cdc6eb823e773caec063b6bf9a388016594e59fd1db475",
"Created": "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": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"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": {}
}
]
Create Network
En utilisant create
commande, vous pouvez créer votre propre réseau. Vous devez mentionner le type de pilote avec --driver
drapeau, dans l'exemple ci-dessous, j'utilise le type de pont.
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
Maintenant, je vais exécuter un conteneur docker sur le réseau que j'ai créé. J'exécute 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 cette fois dans cette inspection de la sortie; le nom du conteneur est determiné_dubinsky.
geekflare@geekflare:~$ docker network inspect geekflare_network
[
{
"Name": "geekflare_network",
"Id": "08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409",
"Created": "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": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"38a0b0646da1a0045afcf7aa0cd6228b851f74107a6718bb19d599e896df1002": {
"Name": "determined_dubinsky",
"EndpointID": "30d252720e0f381ba01d6f5414525dff8587abcf3c4920100f112898a52c8a23",
"MacAddress": "02:42:ac:15:00:02",
"IPv4Address": "172.21.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {}
}
]
Disconnect Network
À disconnect
le réseau à partir du conteneur, exécutez la commande ci-dessous. Vous devez mentionner le nom du réseau et le nom du conteneur dans la commande de déconnexion.
geekflare@geekflare:~$ docker network disconnect geekflare_network determined_dubinsky
Ce réseau n'exécutera plus le conteneur determiné_dubinsky; le champ conteneur sera vide.
geekflare@geekflare:~$ docker network inspect geekflare_network
[
{
"Name": "geekflare_network",
"Id": "08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409",
"Created": "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": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {},
"Labels": {}
}
]
Pour créer un réseau autre que pont, vous devez mentionner le nom du pilote autre que pont. Pour créer un overlay
network, 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
Créer un host
network, mentionnez l'hôte avec l'indicateur –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. Donc, cette commande ne créera pas un autre réseau hôte.
geekflare@manager1:~$ docker network create --driver host geekflare_network_3
Error response from daemon: only one instance of "host" network is allowed
Conclusion
Tout était question de mise en réseau Docker et comment vous pouvez vous connecter, déconnecter, créer et inspecter les réseaux Docker. Essayez ces commandes pour vous familiariser avec la mise en réseau Docket. Si vous êtes curieux d'apprendre Net Devops, consultez ceci Cours Udemy.