Verwenden von Dockerfile, um Ports aufzudecken

Verwenden von Dockerfile, um Ports aufzudecken
Es ist wirklich einfach, ein benutzerdefiniertes Docker -Image aus vorhandenen Docker -Bildern zu erstellen Dockerfile. Normalerweise verwendet Menschen ein minimales Basisbild wie z alpin oder Ubuntu/Debian zu diesem Zweck. Nehmen wir an, Sie möchten ein benutzerdefiniertes Docker -Bild Ihrer bevorzugten Web -App in NodeJS erstellen. Die App wird am Port ausgeführt 8080. Standardmäßig können Sie nicht auf die Web -App auf Port zugreifen 8080 von Ihrem Host -Computer. Sie müssen Docker mitteilen, dass Sie den Port aufdecken oder öffnen möchten 8080 Um darauf zugreifen zu können, von Ihrem Host -Computer aus darauf zugreifen zu können.

In diesem Artikel werde ich Ihnen eine Art und Weise zeigen, wie Sie Ports mithilfe von Ports freilegen können Dockerfile Mit einem Beispiel für reale Welt. Lass uns anfangen.

Erstellen eines Projektverzeichnisses:

Zunächst müssen wir ein Projektverzeichnis erstellen. In diesem Verzeichnis sollten Sie alle Projektdateien und a behalten Dockerfile.

Führen Sie den folgenden Befehl aus, um ein Projektverzeichnis zu erstellen meine App/ In Ihrem Benutzer Home -Verzeichnis und navigieren Sie dazu:

$ mkdir ~/myapp && cd ~/myapp

Die Web -App vorbereiten:

Erstellen Sie nun ein Verzeichnis src/ in der ~/myapp/ Verzeichnis mit dem folgenden Befehl:

$ mkdir src

Im src/ Verzeichnis wird der gesamte Quellcode meiner NodeJS -Anwendung aufbewahrt.

Ich werde einfach ein einfaches erstellen App.JS Datei in der src/ Verzeichnis und führen Sie einen einfachen Webserver auf dem Port aus 8080 Nur zur Demonstration.

Der SRC/App.JS Die Datei enthält die folgenden Zeilen von Codes:

Schreiben von DockerFile und Enthüllung von Ports:

Erstellen Sie nun a Dockerfile im ~/myapp Verzeichnis mit dem folgenden Befehl:

$ touch dockerfile

Geben Sie nun die folgenden Zeilen in die Dockerfile und rette es. Ich werde diskutieren, was diese Zeilen später bedeuten.

Hier, Von Alpine: 3.8 bedeutet die Alpine: 3.8 Docker -Bild als Basis für das neue Bild, das wir daraus erstellen werden Dockerfile.

Führen Sie das APK -Update aus bedeutet die APK -Update Befehl im Basis -Docker -Bild Alpine: 3.8.

Apk ausführen add -no -cache nodejs bedeutet die apk add Befehl zur Installation der NodeJS -Programmiersprache in der Alpine: 3.8 Docker -Basisbild.

KOPIEREN ./src /App bedeutet, alle Dateien aus dem zu kopieren ~/myapp/src Verzeichnis zum /App Verzeichnis des neuen Docker -Images, das wir mit dem erstellen werden Dockerfile.

CMD ["/usr/bin/node", "/App/App".JS ”] bedeutet die /App/App.JS Datei aus dem neuen Container verwenden Knoten binär in /usr/bin/node.

Endlich zu 8080/TCP freilegen bedeutet, den TCP -Port auszusetzen oder zu öffnen 8080 zum Host -Computer.

Erstellen von benutzerdefiniertem Docker -Bild mit Dockerfile:

Lassen Sie uns nun ein benutzerdefiniertes Docker -Bild erstellen Alpinknoten: v1 Verwendung der Dockerfile dass wir gerade erstellt haben.

Stellen Sie zunächst sicher, dass Sie in der sind ~/myapp/ Verzeichnis und führen Sie dann den folgenden Befehl aus, um Ihr benutzerdefiniertes Docker -Bild zu erstellen Alpinknoten: v1:

$ Docker Build -t Alpine -Knoten: v1 .

Wie Sie sehen können, das benutzerdefinierte Docker -Bild Alpinknoten: v1 wird geschaffen. Das erforderliche Basis -Docker -Image und die Pakete werden aus dem Internet gezogen.

Wie Sie sehen können, das benutzerdefinierte Docker -Bild Alpinknoten: v1 wird erfolgreich erstellt.

Testen des benutzerdefinierten Docker -Bildes:

Jetzt können wir das benutzerdefinierte Docker -Bild testen Alpinknoten: v1 ganz einfach. Wir müssen nur einen Container heraus erstellen Alpinknoten: v1 Bild.

Führen Sie den folgenden Befehl aus, um einen Docker -Container zu erstellen www von dem Alpinknoten: v1 Docker -Bild:

$ docker run -d -it --Name www alpine -node: v1

Der Kontainer www geschaffen.

Lassen Sie uns nun die IP -Adresse des www Docker -Container mit dem folgenden Befehl:

$ docker inspizieren www | Grep -Adresse

Wie Sie sehen können, lautet die IP -Adresse in meinem Fall 172.17.0.3. Die von mir geschriebene NodeJS -Anwendung sollte also aus dem Webbrowser am Port zugänglich sein 8080 dieser IP -Adresse.

Voila! Ich kann auf den Port zugreifen 8080 von meinen www Docker -Container.

Im Grunde genommen werden Sie bestimmte Ports in Ihren benutzerdefinierten Docker -Bildern aufdecken, die Sie mithilfe von Verwendung erstellen werden Dockerfile.

Enthüllung von TCP- und UDP -Ports mit DockerFile:

Im früheren Abschnitt dieses Artikels habe ich Ihnen gezeigt, wie Sie einen TCP -Port mit a enthüllen können Dockerfile.

Sie können einen TCP -Port problemlos freilegen (sagen wir TCP -Port 53) in deinem Dockerfile mit der folgenden Zeile:

53/TCP freilegen

Sie können auch einen UDP -Anschluss enthüllen (sagen wir UDP -Port 53) mit der folgenden Zeile in Ihrem Dockerfile:

53/UDP freilegen

Sie können TCP- und UDP -Port gleichzeitig mit den folgenden Zeilen in Ihrem enthüllen Dockerfile:

53/TCP freilegen
53/UDP freilegen

Wenn Sie nicht angeben, welches Protokoll (TCP oder UDP) verwendet werden, wird TCP standardmäßig verwendet. Zum Beispiel, wenn Sie die folgende Zeile in Ihre schreiben Dockerfile:

53 entdecken

Dann geht Docker davon aus, dass Sie den TCP -Port 53 verwenden möchten.

Aufdecken mehrerer Ports mit DockerFile:

Angenommen, Sie möchten ein benutzerdefiniertes Mittelstapel -Docker -Bild erstellen. In diesem Fall werden Sie einen HTTP -Server auf einem Port ausführen (sagen wir TCP -Port 80 oder 8080), einen FTP -Server, der auf TCP -Port 21 ausgeführt wird, ein SQL -Datenbankserver (beispielsweise MySQL), der auf TCP -Port 3306 ausgeführt wird. oder NoSQL -Datenbankserver (sagen wir mongoDB), der auf TCP -Port 27017 oder 27018 ausgeführt wird, ein SSH -Server, der auf TCP -Port 22 ausgeführt wird. Das sind viele Ports!

Die gute Nachricht ist; Sie können so viele Ports nach Bedarf auf Ihrem benutzerdefinierten Docker -Image aufdecken, das mit dem mit Dockerfile.

Die Ports im obigen Beispiel können mit den folgenden Zeilen in Ihrem ausgesetzt werden Dockerfile:

80/TCP freilegen
8080/TCP freilegen
Entdecken Sie 21/TCP
22/TCP freilegen
Entdecken Sie 3306/TCP
27017/TCP freilegen
27018/TCP freilegen

Wenn Sie möchten, können Sie die Protokollspezifikation verlassen, da Docker TCP standardmäßig verwendet und dasselbe mit den folgenden Zeilen in Ihrem Dockerfile:

80 entdecken
8080 entdecken
Aufdecken 21
22 entdecken
3306 freilegen
27017 freilegen
27018 freilegen

Wenn Sie benötigen, können Sie TCP- und UDP -Anschlüsse in Ihrem mischen Dockerfile. Wenn Sie beispielsweise den DNS -Server ausführen (der auf UDP -Port 53 ausgeführt wird), werden Sie zusammen mit dem obigen Beispiel die folgenden Zeilen zu Ihrem hinzufügen Dockerfile.

80 entdecken
8080 entdecken
Aufdecken 21
22 entdecken
53/UDP freilegen
3306 freilegen
27017 freilegen
27018 freilegen

So enthüllen Sie Ports mithilfe der Verwendung Dockerfile. Mehr darüber lernen Dockerfile und Ports verwenden Dockerfile, Lies das Dockerfile Referenzhandbuch bei https: // docs.Docker.com/motor/referenz/builder/#expose

Danke, dass du diesen Artikel gelesen hast.