Docker - Porten verwalten: Ein Anfängerleitfaden

Hallo zusammen, zukünftige Docker-Enthusiasten! Ich freue mich sehr, Ihr Guide auf dieser aufregenden Reise in die Welt der Docker-Portverwaltung zu sein. Als jemand, der seit Jahren Informatik unterrichtet, habe ich selbst gesehen, wie Docker die Art und Weise, wie wir Anwendungen entwickeln und bereitstellen, revolutioniert hat. Also tauchen wir ein und enträtseln das Konzept der Portverwaltung in Docker!

Docker - Managing Ports

EXPOSE vs. PUBLISH: Verständnis der Unterschiede

Bevor wir mit dem Code unsere Hände schmutzig machen, lassen Sie uns eine häufige Verwirrung klären, die viele meiner Schüler erleben: den Unterschied zwischen EXPOSE und PUBLISH in Docker.

EXPOSE

EXPOSE ist wie das Aufstellen eines "Zu Verkaufen"-Schildes an einem Haus. Es gibt an, dass der Container auf bestimmten Ports lauscht, macht diese Ports aber nicht tatsächlich von außerhalb des Containers zugänglich.

PUBLISH

PUBLISH hingegen ist wie das Öffnen der Eingangstür und das Einladen von Menschen hinein. Es verknüpft einen Port vom Container mit einem Port auf dem Host-Computer, sodass er von außerhalb zugänglich ist.

Sehen wir uns eine einfache Tabelle zur Zusammenfassung an:

Befehl Zweck Zugänglich von außerhalb?
EXPOSE Dokumentiert Ports Nein
PUBLISH Verknüpft Ports Ja

Nun, da wir das geklärt haben, sehen wir uns an, wie wir diese in der Praxis verwenden können!

Wie man einen Port in Docker mit PUBLISH暴露?

Wenn Sie einen Container ausführen, können Sie die -p oder --publish-Option verwenden, um einen Container-Port auf einen Host-Port zu verknüpfen. Angenommen, wir haben eine Webanwendung, die im Container auf Port 8080 läuft und wir möchten sie auf Port 80 unseres Host-Rechners zugreifen.

So machen wir das:

docker run -p 80:8080 my-web-app

Lassen Sie uns das einmal auseinandernehmen:

  • docker run: Dieser Befehl führt einen Container aus
  • -p 80:8080: Dies verknüpft Port 8080 im Container mit Port 80 auf dem Host
  • my-web-app: Dies ist der Name unserer Docker-Image

Nachdem Sie diesen Befehl ausgeführt haben, können Sie Ihre Webanwendung aufrufen, indem Sie zu http://localhost in Ihrem Webbrowser navigieren. Ist das nicht toll?

Aber was ist, wenn wir mehrere Ports verknüpfen möchten? Kein Problem! Wir können mehrere -p-Flags verwenden:

docker run -p 80:8080 -p 443:8443 my-web-app

Dies verknüpft Port 8080 mit 80 für HTTP-Verkehr und 8443 mit 443 für HTTPS-Verkehr. Es ist wie das Geben von sowohl einer Vordertür als auch einer Hintertür für Ihre Anwendung!

Wie man einen Port in Dockerfile暴露?

Nun, lassen Sie uns darüber sprechen, wie wir Ports direkt in unserer Dockerfile暴露 können. Dies ist super nützlich, wenn Sie Ihre eigenen Docker-Images erstellen.

Hier ist eine einfache Dockerfile für eine Node.js-Anwendung:

FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "node", "server.js" ]

Lassen Sie uns das einmal auseinandernehmen:

  • FROM node:14: Dies setzt unser Basis-Image auf Node.js Version 14
  • WORKDIR /app: Dies setzt das Arbeitsverzeichnis in unserem Container
  • COPY package*.json ./: Dies kopiert unsere package.json-Datei
  • RUN npm install: Dies installiert unsere Abhängigkeiten
  • COPY . .: Dies kopiert unseren Anwendungscode
  • EXPOSE 8080: Dies teilt Docker mit, dass der Container auf Port 8080 lauschen wird
  • CMD [ "node", "server.js" ]: Dies ist der Befehl, um unsere Anwendung zu starten

Die EXPOSE-Anweisung hier ist wie das Aufstellen unseres "Zu Verkaufen"-Schildes, das wir earlier erwähnt haben. Es sagt Docker, "Hey, dieser Container wird auf Port 8080 lauschen!"

Aber denken Sie daran, dass EXPOSE allein den Port nicht veröffentlicht. Um den Port tatsächlich zugänglich zu machen, wenn wir den Container ausführen, müssen wir immer noch die -p-Option verwenden:

docker run -p 80:8080 my-node-app

Dies verknüpft den暴露en Port 8080 im Container mit Port 80 auf unserem Host-Rechner.

Fazit

Und da haben Sie es, Leute! Wir haben die Welt der Docker-Portverwaltung bereist, von der Verständigung der Unterschiede zwischen EXPOSE und PUBLISH bis hin zur tatsächlichen Implementierung in unseren Dockerfiles und Run-Befehlen.

Denken Sie daran, dass die Verwaltung von Ports in Docker alles um Kommunikation dreht. EXPOSE ist wie dem Sagen von Docker, "Hey, ich werde diese Ports verwenden," während PUBLISH wie dem Sagen an Ihren Computer, "Ich möchte, dass du auf diese Ports des Docker-Containers hörst."

Während Sie Ihre Docker-Abenteuer fortsetzen, werden Sie feststellen, dass das Verständnis der Portverwaltung entscheidend für die Bereitstellung von Anwendungen, insbesondere in komplexen Microservice-Architekturen, ist. Aber keine Sorge, mit Übung wird es zur zweiten Natur!

FAQ

Hier sind einige häufig gestellte Fragen, die meine Schüler oft stellen:

  1. F: Kann ich EXPOSE in einem docker run-Befehl verwenden? A: Nein, EXPOSE wird nur in Dockerfiles verwendet. Für die Laufzeit-Portverknüpfung verwenden Sie das -p-Flag.

  2. F: Was passiert, wenn ich PUBLISH nicht verwende, wenn ich einen Container ausführe? A: Der Container wird ausgeführt, aber Sie können nicht von außerhalb des Docker-Netzwerks darauf zugreifen.

  3. F: Kann ich einen Container-Port auf mehrere Host-Ports verknüpfen? A: Ja! Sie können mehrere -p-Flags verwenden, um einen einzelnen Container-Port auf mehrere Host-Ports zu verknüpfen.

  4. F: Gibt es eine Obergrenze für die Anzahl der Ports, die ich暴露en oder veröffentlichen kann? A: Es gibt keine harte Obergrenze in Docker, aber Ihr Betriebssystem könnte Einschränkungen für verfügbare Ports haben.

  5. F: Was ist der Unterschied zwischen -p und -P in docker run? A: -p ermöglicht es Ihnen, Portverknüpfungen anzugeben, während -P alle暴露en Ports auf zufällige Ports auf dem Host veröffentlicht.

Denken Sie daran, dass der beste Weg zum Lernen das Tun ist. Also öffnen Sie Ihr Terminal, beginnen Sie mit der Erstellung einiger Dockerfiles und viel Spaß beim Programmieren!

Credits: Image by storyset