Geekflare est soutenu par notre public. Nous pouvons gagner des commissions d'affiliation en achetant des liens sur ce site.
Partager sur:

Réseau Docker 101

réseau Docker
Scanner de sécurité des applications Web Invicti – la seule solution qui offre une vérification automatique des vulnérabilités avec Proof-Based Scanning™.

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.

hub docker

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.

Docker-Réseau-Conteneur

Les trois composants du CNM sont le bac à sable, le point de terminaison et le réseau :

  1. Bac à sable: Un bac à sable héberge la configuration réseau du conteneur. Au sein du conteneur, il fonctionne comme une pile réseau.
  2. 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.
  3. 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.

Co-écrit par : Surobhi.
Merci à nos commanditaires
Plus de bonnes lectures sur DevOps
Alimentez votre entreprise
Certains des outils et services pour aider votre entreprise à se développer.
  • Invicti utilise Proof-Based Scanning™ pour vérifier automatiquement les vulnérabilités identifiées et générer des résultats exploitables en quelques heures seulement.
    Essayez Invicti
  • Web scraping, proxy résidentiel, proxy manager, web unlocker, moteur de recherche et tout ce dont vous avez besoin pour collecter des données Web.
    Essayez Brightdata
  • Semrush est une solution de marketing numérique tout-en-un avec plus de 50 outils de référencement, de médias sociaux et de marketing de contenu.
    Essayez Semrush
  • Intruder est un scanner de vulnérabilités en ligne qui détecte les failles de cybersécurité de votre infrastructure, afin d'éviter des violations de données coûteuses.
    Essayez Intruder