‫Voraussetzungen für diesen Abschnitt sind Kenntnisse zum Starten eines Containers. Dann grundlegende TCP /
‫IP-Netzwerkkonzepte wie Subnetze und IPs sowie Ports und Firewalls.
‫Sie müssen das nicht alles wissen, aber es wird Ihnen auf jeden Fall
‫viel leichter fallen, diesen Abschnitt zu verstehen, der sich
‫auf konzeptionelle Dinge konzentriert, bevor wir uns in der nächsten Vorlesung mit den Kommandozeilen-Dingen befassen.
‫Ich möchte Sie nur an die Option -p in Ihren Container-Run-Befehlen erinnern, die den Port
‫auf Ihrem Computer offen legt.
‫Im Hintergrund des Docker-Netzwerks ist noch viel mehr los, worüber wir sprechen werden.
‫Docker hat dieses Konzept der Batterien enthalten, aber entfernbar, was im Grunde bedeutet, dass die Standardeinstellungen ziemlich einfach
‫und üblich sind, aber dass Sie viele der Optionen unter der Haube ändern können.
‫In dieser Vorlesung werden wir uns schnell mit dem Container-Port-Befehl befassen, mit dem Sie schnell
‫feststellen können, welche Ports für diesen Container in Ihrem Netzwerk geöffnet sind.
‫Dann werden wir einige Konzepte von Docker-Netzwerken und virtuellen Netzwerken aufschlüsseln und erläutern,
‫wie Pakete im Netzwerk fließen.
‫Und wir werden mit einem Netzwerkdiagramm abschließen, das zeigt, wie Container untereinander kommunizieren und wie sich
‫dies von dem -p unterscheidet, wenn sie im physischen Netzwerk verfügbar gemacht werden.
‫Wenn Sie tatsächlich einen Container starten, befinden Sie sich wirklich im Hintergrund und stellen eine Verbindung zu
‫einem bestimmten Docker-Netzwerk her. Standardmäßig ist dies das Bridge-Netzwerk, da wir gleich auschecken werden. Jedes dieser Netzwerke, mit
‫denen Sie eine Verbindung herstellen würden, wird über eine NAT-Firewall weitergeleitet. Dabei handelt es sich um
‫den Docker-Dämon, der die Host-IP-Adresse auf der Standardschnittstelle so konfiguriert, dass Ihre Container auf das
‫Internet oder den Rest Ihres Netzwerks zugreifen können Netzwerk und dann zurück.
‫Aber wir brauchen das -p nicht wirklich zu verwenden, wenn wir bestimmte Container haben,
‫die in unserem Host miteinander kommunizieren wollen.
‫Wenn Sie beispielsweise eine Anwendung mit einem Folgeserver und einem PHP-Apache-Container hatten, sollten sich diese beiden Container im
‫selben Netzwerk befinden und miteinander kommunizieren können, ohne ihre Ports für den Rest
‫Ihres physischen Netzwerks zu öffnen .
‫Wenn Sie eine andere Anwendung hatten, die nichts damit zu tun hat, verwenden Sie Mongo und Node. js, Sie könnten ein Netzwerk dafür erstellen,
‫damit sie miteinander sprechen können, ohne das -p zu verwenden, um
‫sie dem Netzwerk auszusetzen. Sie konnten jedoch nicht mit dem anderen Netzwerk kommunizieren, in
‫dem möglicherweise eine unabhängige App ausgeführt wird.
‫Aber die Sache ist, dass fast alle Einstellungen, die ich beschrieben habe, tatsächlich änderbar sind.
‫Und das ist ein gutes Sprichwort, das Docker gerne verwendet ... Das heißt, Batterien enthalten, aber entfernbar.
‫Sie werden feststellen, dass es in diesem Kurs häufig Standardeinstellungen gibt, die sofort
‫funktionieren.
‫Sie müssen sie nicht einmal angeben. Man merkt nur, dass die Dinge auf eine Art Standardart
‫konfiguriert sind.
‫Viele dieser Optionen können jedoch entweder zur Laufzeit konfiguriert oder nachträglich geändert werden. Und wir werden einige davon hier sehen,
‫wenn wir mit den Netzwerken herumspielen.
‫Einige der Dinge, die Sie tatsächlich ändern können, sind das Erstellen mehrerer virtueller
‫Netzwerke, möglicherweise eines pro App, oder verschiedene, die auf unterschiedlichen Sicherheitsanforderungen basieren.
‫Sie können tatsächlich, genau wie in der physischen Welt, zwei physische Netzwerkkarten auf einem realen Computer haben. Sie können tatsächlich zwei
‫virtuelle Netzwerke mit einem Container verbinden oder den Container mit keinem
‫Netzwerk kommunizieren lassen.
‫Sie können eine beliebige Konfiguration des virtuellen Netzwerks überspringen und tatsächlich -
‫net
‫= host verwenden. Dadurch verlieren Sie einige der Containerisierungsvorteile.
‫In einigen Fällen kann dies jedoch erforderlich sein.
‫Später werden wir uns mit den Docker-Netzwerktreibern befassen. Es gibt dieses gesamte
‫Plugin-Ökosystem rund um Docker, das die Funktionen von Docker auf viele Tools von Drittanbietern erweitert.
‫Aber in diesem Fall werden wir uns einige verschiedene Docker-Netzwerktreiber ansehen und wie sie
‫unser Netzwerk verändern und uns neue Fähigkeiten verleihen können.
‫Das kratzt wirklich nur an der Oberfläche.
‫Während dieses Kurses gibt es tatsächlich Netzwerkkonzepte, in denen
‫wir über fortgeschrittenere Themen des Multi-Host-Private-Networking und Konzepte wie Sub-Interfaces usw. sprechen.
‫Aber jetzt wollen wir uns mit ein paar Kommandozeilen-Dingen befassen.
‫Schauen wir
‫uns zur schnellen Überprüfung das -p unserer Container-Running-Befehle an ... Docker-Container ausführen.
‫Wenn Sie sich erinnern, als wir zum ersten Mal einen Container ausführten, haben wir mit -p den Port 80 unseres Nginx verfügbar gemacht.
‫Das nahm die linke Seite, die der Host-Port ist, und leitete den Verkehr von diesem Port in den Port 80
‫des Containers weiter.
‫Wenn wir Docker-Container-Port-Webhost verwendet haben, zeigt dies in einem schönen, einfachen Format, welche Ports
‫den Datenverkehr vom Host zum Container selbst weiterleiten.
‫Wir haben nicht über die IP-Adresse des Containers gesprochen.
‫Sie können also davon ausgehen, dass der Container dieselbe IP-Adresse wie der Host verwendet. Aber standardmäßig ist das nicht
‫wahr.
‫Wir können die Docker-IP dieses Containers leicht ermitteln, indem wir ihn untersuchen. Wir werden den
‫Befehl format oder die Option really verwenden. Sie werden feststellen, dass dieser Befehl ein ziemlich spezifisches Format zum
‫Filtern eingehender Daten hat.
‫Sie können immer den grep-Befehl verwenden, den wir zuvor zum Herausfiltern Ihrer Textausgabe verwendet haben,
‫aber das Format, das --format, ist tatsächlich ein wenig sauberer und konsistenter. Sie machen zwei geschweifte Klammern und sobald wir uns
‫an das Format der Konfigurationsdatei gewöhnt haben, kennen wir die NetworkSettings. Die IP-Adresse ist der eigentliche
‫Knoten der JSON-Ausgabe, die wir anzeigen möchten.
‫Und dann Webhost. Hoppla, das heißt, ich habe es nicht richtig geschrieben.
‫I P A d d.
‫Und das habe ich nicht erwartet.
‫Wenn ich die IP meines Hosts verwenden wollte, weil ich meine Macs in meinem lokalen Netzwerk kenne, und wenn ich eine ifconfig
‫auf meinem Mac durchführe, weiß ich nur, dass sich die IP-Adresse in meinem Heimnetzwerk oder in einem 1 9 2 1 6 befindet 8 Subnetz.
‫Das ist interessant, dass sie nicht dasselbe Netzwerk sind.
‫Warum ist das so?
‫Mal sehen, ob es sinnvoller ist, wenn ich es herausziehe.
‫Wenn mein Host-Betriebssystem mit meinem Netzwerk verbunden ist ... das ist mein netzwerk ... physisches Netzwerk. Dann ist dies
‫die Ethernet-Schnittstelle meines Host-Rechners, in meinem Fall mein Mac.
‫Es gibt eine kleine Firewall, die verschiedene Aufgaben erfüllt. Es blockiert den gesamten vom Netzwerk eingehenden Datenverkehr, sodass standardmäßig
‫alle Daten blockiert werden. Ich würde es eine Firewall nennen. Jeder Verkehr,
‫der aus meinen Containern kommt, wird standardmäßig NAT-behandelt.
‫Es verhält sich wie eine ziemlich verbreitete Edge-Firewall in einem Netzwerk.
‫Es gibt jedoch dieses Konzept der virtuellen Netzwerke, und standardmäßig wird ein Netzwerk
‫mit dem Namen Bridge oder Docker0 angezeigt.
‫Wenn Sie einen neuen Container starten, nennen wir ihn C1, dieser Container ist an dieses Netzwerk, dieses virtuelle
‫Netzwerk und dieses virtuelle Netzwerk ist automatisch an Ihre Ethernet-Schnittstelle auf Ihrem Host angeschlossen, damit er
‫aussteigen kann.
‫In unserem Fall, als wir dieses Nginx gerade auf den Markt brachten, gaben wir es mit -p 80:80 an. Das hat es hierher gebracht, Port 80 auf meiner
‫Ethernet-Schnittstelle auf meinem Mac zu öffnen und alles, was über dieses virtuelle Netzwerk in Port
‫80 eingeht, an Port 80 in
‫diesem Container weiterzuleiten.
‫Wenn ich einen zweiten Container erstelle, wird dieser standardmäßig in dasselbe Bridge-Netzwerk gestellt.
‫Diese beiden Container können an ihren exponierten Ports frei hin- und herschalten.
‫Ohne Angabe von -p gelangt kein Datenverkehr in meine internen Netzwerke zu meinen
‫Containern.
‫Ich kann tatsächlich mehr virtuelle Netzwerke erstellen und sie so nennen, wie ich es möchte. Ich werde dieses eine Netz
‫meine App nennen, sagen wir mal. Angenommen, ich verbinde hier zwei Container ... Ich habe MySQL.
‫Dann habe ich einen Apachen bekommen.
‫Unter MySQL habe ich
‫keine Ports geöffnet und nie ein -p angegeben. Aber auf dem Apache
‫habe ich einen -p von 8080: 80 angegeben.
‫Das würde bedeuten, dass hier rechts an meiner Ethernet-Schnittstelle auf meinem Host Port 8080
‫abgehört wird.
‫Sobald der Datenverkehr auf meinem Host über Port 8080 eingeht, wird er an dieses neue virtuelle
‫Netzwerk weitergeleitet, das ich erstellt habe, und an diesen Apache-Server über Port 80.
‫Innerhalb dieses virtuellen Netzwerks kann der Apache-Server über seinen Listening-Port mit dem MySQL-Server
‫kommunizieren.
‫Wenn Sie über virtuelle Netzwerke in Docker nachdenken und über die Zugehörigkeit von Containern nachdenken, sollten Sie überlegen, wie
‫Sie verschiedene Container in der Nähe zueinander platzieren, da sie in ihrer Anwendung zusammenhängen.
‫Wie Sie sehen können, ist es sinnvoll, diese beiden Beispiele beizubehalten, wenn
‫ich einen Container eins und einen Container zwei an oberster Stelle habe
‫sie in separaten virtuellen Netzwerken.
‫Wenn sie jemals miteinander reden müssten, müssten sie ihre
‫veröffentlichten Ports vollständig durchgehen.
‫Zur Erinnerung: Sie können auf keiner Schnittstelle Ihres Hosts mehr als einen Port auf mehrere Container überwachen.
‫Auf Hostebene können also nicht zwei Container den Port 80 überwachen.
‫Das kann nur einer.
‫Wenn Sie versuchen, einen anderen Container zu starten, tritt tatsächlich ein Fehler auf und es
‫ist bereits etwas anderes an diesem Port vorhanden. Dies ist keine Docker-Einschränkung. Dies ist nur eine Einschränkung der typischen
‫Funktionsweise von IP-Netzwerken.
‫Nur ein kurzer Rückblick auf diesen Abschnitt. Tatsächlich haben wir viel Zeit mit den Konzepten des Docker-Netzwerks verbracht,
‫einschließlich der Freigabe von Ports auf Ihrem Host für das physische Netzwerk mithilfe von -p. Die Idee von Docker, sich auf vernünftige Standardeinstellungen
‫zu konzentrieren, bei denen es sich um Batterien handelt, die enthalten, aber entfernbar sind.
‫Wie für lokale Entwickler und Tests können Sie wahrscheinlich nur mit den Standardeinstellungen auskommen, aber alles ist änderbar.
‫Dann lernten wir den Container-Port-Befehl kennen, der eine schnelle Möglichkeit darstellt, die für Ihre
‫bestimmten Container freigegebenen Ports anzuzeigen.
‫Dann haben wir die Pakete aufgeschlüsselt, die sich in virtuellen Netzwerken bewegen, und wie sich diese auf andere
‫virtuelle Netzwerke beziehen und wie sie auf Ihrem Docker-Computer ein- und ausgehen.
‫Das sind also alles wirklich gute Konzepte, die wir verstehen sollten, wenn wir in der nächsten Vorlesung auf das eigentliche
‫CLI-Zeug eingehen.