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.

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.

Die drei Komponenten des CNM sind die Sandbox, der Endpunkt und das Netzwerk:
- Sandkasten: Eine Sandbox enthält die Netzwerkkonfiguration für den Container. Innerhalb des Containers fungiert es als Netzwerkstapel.
- 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.
- 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.