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 AnschriftWie 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/tcpSie können auch einen UDP-Port freigeben (sagen wir UDP-Port 53 ) mit der folgenden Zeile in Ihrem Dockerfile :
AUFDECKEN53/udpSie können den TCP- und den UDP-Port gleichzeitig mit den folgenden Zeilen in Ihrem Dockerfile :
AUFDECKEN53/tcpAUFDECKEN53/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 :
AUFDECKEN53Dann 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/tcpAUFDECKEN8080/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 :
AUFDECKEN80AUFDECKEN8080
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 .
AUFDECKEN80AUFDECKEN8080
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.