Verwenden von Dockerfile zum Freigeben von Ports

Using Dockerfile Expose Ports



Es ist ganz einfach, ein benutzerdefiniertes Docker-Image aus vorhandenen Docker-Images zu erstellen mit Dockerfile . Normalerweise verwenden die Leute ein minimales Basis-Image wie alpin oder ubuntu/debian zu diesem Zweck. Angenommen, Sie möchten ein benutzerdefiniertes Docker-Image Ihrer bevorzugten Web-App erstellen, die in NodeJS geschrieben wurde. Die App wird auf Port ausgeführt 8080 . Standardmäßig können Sie über Port nicht auf die Web-App zugreifen 8080 von Ihrem Host-Rechner. Sie müssen Docker mitteilen, dass Sie den Port freigeben oder öffnen möchten 8080 um von Ihrem Host-Rechner darauf zugreifen zu können.

In diesem Artikel zeige ich Ihnen, wie Sie Ports mithilfe von . freigeben Dockerfile mit einem realen Beispiel. Lass uns anfangen.







Zuerst müssen wir ein Projektverzeichnis erstellen. In diesem Verzeichnis sollten Sie alle Projektdateien und a Dockerfile .



Führen Sie den folgenden Befehl aus, um ein Projektverzeichnis zu erstellen meine App/ im HOME-Verzeichnis Ihres Benutzers und navigieren Sie dorthin:



$mkdir~/meine App&& CD~/meine App

Vorbereitung der Web-App:

Jetzt ein Verzeichnis erstellen src/ innerhalb der ~/meineapp/ Verzeichnis mit folgendem Befehl:

$mkdirsrc

In dem src/ Verzeichnis wird der gesamte Quellcode meiner NodeJS-Anwendung beibehalten.

Ich werde einfach ein einfaches erstellen app.js Datei in der src/ Verzeichnis und führen Sie einen einfachen Webserver auf Port . aus 8080 nur zur Demonstration.

Die src/app.js Datei enthält die folgenden Codezeilen:

Dockerfile schreiben und Ports freigeben:

Erstellen Sie nun a Dockerfile in dem ~/meineapp Verzeichnis mit folgendem Befehl:

$berührenDockerfile

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

Hier, VON alpin:3.8 bedeutet, verwenden Sie die alpin:3.8 Docker-Image als Basis für das neue Image, das wir daraus aufbauen werden Dockerfile .

APK-Update ausführen bedeutet, laufen Sie die apk-update Befehl im Docker-Basisimage alpin:3.8 .

RUN apk add –no-cache nodejs bedeutet, laufen Sie die apk hinzufügen Befehl zum Installieren der Programmiersprache NodeJS im alpin:3.8 Docker-Basisimage.

KOPIEREN ./src /app bedeutet, kopieren Sie alle Dateien aus dem ~/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, laufen Sie die /app/app.js Datei aus dem neuen Container mit Knoten Binärdatei befindet sich in /usr/bin/node .

Schließlich zu AUSSETZEN 8080/tcp bedeutet, den TCP-Port freigeben oder öffnen 8080 zum Host-Computer.

Erstellen eines benutzerdefinierten Docker-Images mit Dockerfile:

Lassen Sie uns nun ein benutzerdefiniertes Docker-Image erstellen Alpenknoten:v1 Verwendung der Dockerfile die wir gerade erstellt haben.

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

$Docker-Build-TAlpenknoten:v1 .

Wie Sie sehen können, ist das benutzerdefinierte Docker-Image Alpenknoten:v1 wird erstellt. Das erforderliche Docker-Basisimage und die erforderlichen Pakete werden aus dem Internet abgerufen.

Wie Sie sehen können, ist das benutzerdefinierte Docker-Image Alpenknoten:v1 wird erfolgreich erstellt.

Testen des benutzerdefinierten Docker-Images:

Jetzt können wir das benutzerdefinierte Docker-Image testen Alpenknoten:v1 ganz einfach. Alles, was wir tun müssen, ist einen Container zu erstellen aus Alpenknoten:v1 Bild.

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

$Docker-Run-D -es --Namewww alpine-node:v1

Der Kontainer www geschaffen.

Lassen Sie uns nun die IP-Adresse des herausfinden www Docker-Container mit folgendem Befehl:

$Docker inspizieren www| GriffDie Anschrift

Wie Sie sehen, lautet die IP-Adresse in meinem Fall 172.17.0.3 . Die NodeJS-Anwendung, die ich geschrieben habe, sollte also über den Webbrowser an Port zugänglich sein 8080 dieser IP-Adresse.

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

So machen Sie im Grunde genommen bestimmte Ports in Ihren benutzerdefinierten Docker-Images verfügbar, die Sie verwenden werden Dockerfile .

Freigeben von TCP- und UDP-Ports mit Dockerfile:

Im vorherigen Abschnitt dieses Artikels habe ich Ihnen gezeigt, wie Sie einen TCP-Port mithilfe eines Dockerfile .

Sie können ganz einfach einen TCP-Port freigeben (sagen wir TCP-Port 53 ) in deiner Dockerfile mit folgender Zeile:

AUFDECKEN53/tcp

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

AUFDECKEN53/udp

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

AUFDECKEN53/tcp
AUFDECKEN53/udp

Wenn Sie nicht angeben, welches Protokoll (TCP oder UDP) verwendet werden soll, wird standardmäßig TCP verwendet. Wenn Sie beispielsweise die folgende Zeile in Ihr schreiben Dockerfile :

AUFDECKEN53

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

Freigeben mehrerer Ports mit Dockerfile:

Angenommen, Sie möchten ein benutzerdefiniertes MEAN-Stack-Docker-Image erstellen. In diesem Fall betreiben Sie einen HTTP-Server auf einem Port (sagen wir TCP-Port 80 oder 8080), einen FTP-Server, der auf TCP-Port 21 läuft, einen SQL-Datenbankserver (sagen wir MySQL), der auf TCP-Port 3306 läuft, oder NoSQL-Datenbankserver (sagen wir MongoDB), der auf TCP-Port 27017 oder 27018 läuft, ein SSH-Server, der auf TCP-Port 22 läuft. Das sind viele Ports!

Die gute Nachricht ist; Sie können in Ihrem benutzerdefinierten Docker-Image, das mit erstellt wurde, beliebig viele Ports freigeben Dockerfile .

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

AUFDECKEN80/tcp
AUFDECKEN8080/tcp
AUFDECKENeinundzwanzig/tcp
AUFDECKEN22/tcp
AUFDECKEN3306/tcp
AUFDECKEN27017/tcp
AUFDECKEN27018/tcp

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

AUFDECKEN80
AUFDECKEN8080
AUFDECKENeinundzwanzig
AUFDECKEN22
AUFDECKEN3306
AUFDECKEN27017
AUFDECKEN27018

Bei Bedarf können Sie TCP- und UDP-Ports in Ihrem Dockerfile . Wenn Sie beispielsweise einen DNS-Server ausführen (der auf UDP-Port 53 läuft), würden Sie neben dem obigen Beispiel die folgenden Zeilen zu Ihrem Dockerfile .

AUFDECKEN80
AUFDECKEN8080
AUFDECKENeinundzwanzig
AUFDECKEN22
AUFDECKEN53/udp
AUFDECKEN3306
AUFDECKEN27017
AUFDECKEN27018

So machen Sie Ports verfügbar mit Dockerfile . Mehr darüber lernen Dockerfile und Freilegen von Ports mit Dockerfile , Lies das Dockerfile Nachschlagewerk bei https://docs.docker.com/engine/reference/builder/#expose

Danke, dass Sie diesen Artikel gelesen haben.