Geekflare wird von unserem Publikum unterstützt. Wir können Affiliate-Provisionen durch den Kauf von Links auf dieser Website verdienen.
Teilen:

Docker-Netzwerk 101

Docker-Netzwerk
Invicti Web Application Security Scanner – die einzige Lösung, die eine automatische Verifizierung von Schwachstellen mit Proof-Based Scanning™ bietet.

Docker ist ein nettes Tool, mit dem Entwickler ihre Anwendungen erstellen und ausführen können.

Fun Fact: DotCloud, ein Platform as a Service (PaaS)-Unternehmen, hat es eigentlich als internes Tool entwickelt!

Das Unternehmen erkannte jedoch bald sein wahres Potenzial und stellte es 2013 als Open-Source-Projekt zur Verfügung. Was wir heute kennen Docker Inc. wurde bald populär, mit Zehntausenden von Benutzern und großen Partnerschaften mit Unternehmen wie Red Hat, IBM, Microsoft, Google und Cisco Systems!

Die heutige Softwareentwicklung erfordert Agilität und schnelle Reaktion auf Änderungen. Wir bewerten unsere Arbeit in Story Points, nehmen an Stand-ups teil und verwenden Methoden wie Scrum. Docker kann unsere Agilität unterstützen.

Sie müssen sich bewusst sein, dass die Bereitstellungsphase jeder Softwareentwicklung teuer ist. Und hier kommt die Docker-Plattform ins Spiel. Sie vereinfacht die Bereitstellung, indem sie virtuelle Software auf Betriebssystemebene verwendet, um Software in Containern zu platzieren.

Docker Hub

Das Tolle an dieser Plattform ist, dass sie eine Anwendung und alle ihre Abhängigkeiten – wie Binärdateien, Bibliotheken, Konfigurationsdateien, Skripte, JAR-Dateien und mehr – in einem einzigen, benutzerfreundlichen Paket bündelt. Es ist ein einfacher und standardisierter Ansatz, der Softwareentwicklern überall das Leben leichter gemacht hat!

Docker vereinfacht die Zusammenarbeit und Vernetzung über Plattformen hinweg

Vor Docker war es üblich, eine Kombination von Technologien zu benötigen, wie z virtuelle Maschinen, Konfigurationsverwaltungstools, Paketverwaltungssysteme und komplexe Netze von Bibliotheksabhängigkeiten, um die Bewegung von Software in der Entwicklungspipeline zu verwalten. Um diese Tools zu warten und zu verwalten, wurden qualifizierte Ingenieure benötigt; die meisten erforderlichen benutzerdefinierten Einstellungen.

Docker hat dies geändert, indem es allen an diesem Prozess beteiligten Ingenieuren ermöglicht hat, in einer einzigen Sprache zu kommunizieren, was die Zusammenarbeit vereinfacht.

Über die Host-Maschine kommunizieren Docker-Container über Docker-Netzwerke miteinander und mit der Außenwelt. Das Container Network Model (CNM) steuert das Docker-Netzwerk, das mehrere verschiedene Netzwerktreiber verwendet. Die Auswahlkriterien für das Netzwerk basieren auf der Funktion und dem Zweck des Containers.

Sie sind unglaublich leistungsfähig, weil sie Workloads von anderen Plattformen mit Docker-Diensten und Containern verbinden können. Unabhängig davon, ob sie Windows oder Linux ausführen, können Sie Docker verwenden, um Ihre zu verwalten Docker-Hosts plattformneutral.

Wie funktioniert Docker-Netzwerk?

Docker hat ein grundlegendes Netzwerkmodell spezifiziert, das als Container-Netzwerkmodell (CNM) bekannt ist, mit Spezifikationen, die jede Software erfüllen muss, die ein Container-Netzwerk implementiert. CNM speichert die Netzwerkkonfiguration in einem verteilten Schlüsselwertspeicher im Konsolenstil.

Docker-Netzwerk-Container

Die drei Komponenten des CNM sind die Sandbox, der Endpunkt und das Netzwerk:

  1. Sandkasten: Eine Sandbox enthält die Netzwerkkonfiguration für den Container. Innerhalb des Containers fungiert es als Netzwerkstapel.
  2. Endpunkt: Endpunkt ist eine Schnittstelle für ein Netzwerk, das normalerweise paarweise vorhanden ist. Wir konfigurieren das Paar, indem wir ein Ende im ausgewählten Netzwerk und das andere in der Sandbox platzieren. Außerdem treten Endpunkte nur einem Netzwerk bei, und eine einzelne Netzwerk-Sandbox kann mehr als einen Endpunkt enthalten.
  3. Netzwerk: Es umfasst eine Sammlung von Endpunkten mit direkten Kommunikationsfähigkeiten.

In einer Sandbox kann jeder Endpunkt nur eine Netzwerkverbindung haben, auch wenn mehrere Endpunkte vorhanden sind. Ein Netzwerk ist eine Gruppierung einiger oder mehrerer miteinander verbundener Endpunkte.

Der Netzwerktreiber im Docker-Netzwerk setzt CNM-Ideen in die Tat um. Es gibt zwei verschiedene Arten von Netzwerktreibern, die Docker verwendet: native Netzwerktreiber und Remote-Netzwerktreiber. Native Netzwerktreiber, allgemein als integrierte Treiber bezeichnet, werden von Docker bereitgestellt und mit der Docker-Engine ausgeliefert. Während die Treiber von Drittanbietern von den Anbietern als Remote-Netzwerktreiber bezeichnet werden.

Es ist möglich, Treiber zu entwerfen, die spezifische Merkmale enthalten.

Docker Networks

Docker enthält hauptsächlich fünf Netzwerke: Bridge, Host, Overlay, None und Macvlan.

Das Brückennetzwerk ist das Standardnetzwerk im Docker. Eine Einführung in diese Netzwerke wurde in meinem vorherigen Artikel über gegeben Docker-Architektur.

In diesem Artikel zeige ich Ihnen den praktischen Teil der Docker-Vernetzung. Sie erfahren, wie Sie die Details Ihres Docker-Netzwerks überprüfen, eine Verbindung zu einem Netzwerk herstellen, Ihr Netzwerk erstellen und vieles mehr. Also lasst uns anfangen.

Immer wenn Sie einen Docker-Container ausführen, wird ein Standard-Bridge-Netzwerkaufruf ausgeführt docker0 wird dem Container zugeordnet, sofern kein anderes Netzwerk angegeben ist. Zum Beispiel, wenn ich renne ifconfig Befehl erhalten Sie die Details des Docker0-Netzwerks vom Brückentyp zusammen mit anderen Netzwerkdetails.

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

Führen Sie die ls Befehl zum Überprüfen aller auf dem aktuellen Host ausgeführten Netzwerke. Sie können sehen, dass derzeit sieben Netzwerke vorhanden sind, einschließlich Bridge, Host und keines, die bei der Installation von Docker automatisch erstellt werden. Abhängig von den Containern, die ich in der Vergangenheit ausgeführt habe, gibt es auch Details zu anderen benutzerdefinierten Netzwerken.

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

Du kannst rennen inspect Befehl, um alle Details zu einem Netzwerktyp abzurufen. Es enthält Informationen zum Netzwerk, einschließlich Name, ID, Erstellungszeit, Umfang, Treiber, Konfigurationsdetails wie Subnetz und Gateway-Adresse. Ich werde auch Containerdetails angeben, wenn ein Container in Betrieb ist. Andernfalls wird eine leere Zeichenfolge zurückgegeben.

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

Die create Befehl können Sie Ihr eigenes Netzwerk erstellen. Sie müssen den Treibertyp mit angeben --driver flag, im folgenden Beispiel verwende ich den Brückentyp.

geekflare@geekflare:~$ docker network create --driver bridge geekflare_network

08e0da91f6de6c640b1b6f8a8602973f310b8ee9b04961389b7dfda842ccc409

Führen Sie den Befehl ls aus, um zu überprüfen, ob das Netzwerk erstellt wurde.

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

Jetzt werde ich einen Docker-Container in dem von mir erstellten Netzwerk ausführen. Ich führe einen einfachen Apache-Server-Container im folgenden Befehl aus.

geekflare@geekflare:~$ docker run -it -d --network=geekflare_network httpd

38a0b0646da1a0045afcf7aa0cd6228b851f74107a6718bb19d599e896df1002

Ausführen des Befehls inspect, um alle Informationen von zu überprüfen geekflare_network. Die Containerdetails finden Sie diesmal in dieser Ausgabe. Der Containername lautet bestimmt_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

Zu disconnect Führen Sie im folgenden Container den folgenden Befehl aus, um das Netzwerk zu öffnen. Sie müssen den Netzwerknamen und den Containernamen im Befehl zum Trennen angeben.

geekflare@geekflare:~$ docker network disconnect geekflare_network determined_dubinsky

In diesem Netzwerk wird der Container Determined_Dubinsky nicht mehr ausgeführt. Das Containerfeld ist leer.

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": {}

}

]

Um ein anderes Netzwerk als das Bridge-Netzwerk zu erstellen, müssen Sie einen anderen Treibernamen als Bridge angeben. So erstellen Sie eine overlay Netzwerk, führen Sie den folgenden Befehl aus.

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

So erstellen Sie ein host Netzwerk, Host mit –driver Flag erwähnen. Das folgende Beispiel gibt einen Fehler zurück, da nur eine Host-Netzwerkinstanz zulässig ist, die bereits zuvor ausgeführt wurde. Dieser Befehl erstellt also kein weiteres Host-Netzwerk.

geekflare@manager1:~$ docker network create --driver host  geekflare_network_3

Error response from daemon: only one instance of "host" network is allowed

Fazit

Hier ging es um Docker-Netzwerke und darum, wie Sie Docker-Netzwerke verbinden, trennen, erstellen und überprüfen können. Probieren Sie diese Befehle aus, um sich mit dem Docket-Netzwerk vertraut zu machen. Wenn Sie neugierig auf das Erlernen von Net Devops sind, lesen Sie dies Udemy natürlich.

Co-Autor von: Surobhi.
Danke an unsere Sponsoren
Weitere großartige Lektüre zu DevOps
Treiben Sie Ihr Geschäft an
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti verwendet das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu verifizieren und innerhalb weniger Stunden umsetzbare Ergebnisse zu generieren.
    Versuchen Sie es mit Invicti
  • Web-Scraping, Wohn-Proxy, Proxy-Manager, Web-Unlocker, Suchmaschinen-Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie es mit Brightdata
  • Semrush ist eine All-in-One-Lösung für digitales Marketing mit mehr als 50 Tools in den Bereichen SEO, Social Media und Content-Marketing.
    Versuchen Sie es mit Semrush
  • Intruder ist ein Online-Schwachstellenscanner, der Cyber-Sicherheitslücken in Ihrer Infrastruktur findet, um kostspielige Datenschutzverletzungen zu vermeiden.
    MIT DER INTELLIGENTEN SCHADENKALKULATION VON Intruder