Portweiterleitung in Docker-Containern für den Zugang zu Anwendungen

DockerDockerBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

Dieses Tutorial führt Sie durch den Prozess des Weiterleitens von Ports in Docker-Containern, um externen Zugang zu Ihren Anwendungen bereitzustellen. Sie werden lernen, wie Sie Ports freigeben, sie zwischen Containern und dem Host zuordnen und die Portweiterleitung in Docker Compose konfigurieren. Am Ende dieses Artikels werden Sie ein solides Verständnis der Docker-Portweiterleitung haben und in der Lage sein, es auf Ihre eigenen Projekte anzuwenden.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/NetworkOperationsGroup(["Network Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/start("Start Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/ContainerOperationsGroup -.-> docker/port("List Container Ports") docker/NetworkOperationsGroup -.-> docker/network("Manage Networks") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/run -.-> lab-393010{{"Portweiterleitung in Docker-Containern für den Zugang zu Anwendungen"}} docker/start -.-> lab-393010{{"Portweiterleitung in Docker-Containern für den Zugang zu Anwendungen"}} docker/stop -.-> lab-393010{{"Portweiterleitung in Docker-Containern für den Zugang zu Anwendungen"}} docker/create -.-> lab-393010{{"Portweiterleitung in Docker-Containern für den Zugang zu Anwendungen"}} docker/port -.-> lab-393010{{"Portweiterleitung in Docker-Containern für den Zugang zu Anwendungen"}} docker/network -.-> lab-393010{{"Portweiterleitung in Docker-Containern für den Zugang zu Anwendungen"}} docker/build -.-> lab-393010{{"Portweiterleitung in Docker-Containern für den Zugang zu Anwendungen"}} end

Einführung in Docker-Container

Docker ist eine beliebte Open-Source-Plattform, die es Entwicklern ermöglicht, Anwendungen in einer containerisierten Umgebung zu erstellen, bereitzustellen und auszuführen. Container sind leichte, eigenständige und ausführbare Softwarepakete, die alles enthalten, was für die Ausführung einer Anwendung benötigt wird, einschließlich des Codes, der Laufzeitumgebung, der Systemtools und der Bibliotheken.

Docker-Container bieten eine konsistente und zuverlässige Möglichkeit, Anwendungen zu verpacken und zu verteilen, und stellen sicher, dass sie unabhängig von der zugrunde liegenden Infrastruktur auf die gleiche Weise ausgeführt werden. Dies erleichtert die Entwicklung, das Testen und die Bereitstellung von Anwendungen sowie deren Skalierung und Verwaltung in der Produktion.

Um mit Docker zu beginnen, müssen Sie den Docker-Engine auf Ihrem System installieren. Unter Ubuntu 22.04 können Sie dies tun, indem Sie die folgenden Befehle ausführen:

sudo apt-get update
sudo apt-get install -y docker.io
sudo systemctl start docker
sudo systemctl enable docker

Sobald Sie Docker installiert haben, können Sie Container mit dem Befehlszeilentool docker erstellen und verwalten. Beispielsweise können Sie einen neuen Container basierend auf dem offiziellen Ubuntu-Image erstellen, indem Sie Folgendes ausführen:

docker run -it ubuntu:latest /bin/bash

Dadurch wird ein neuer Container basierend auf dem neuesten Ubuntu-Image gestartet, und Sie gelangen in eine Bash-Shell innerhalb des Containers. Von hier aus können Sie zusätzliche Software installieren, Ihre Anwendung ausführen und vieles mehr.

Insgesamt bieten Docker-Container eine leistungsstarke und flexible Möglichkeit, Anwendungen zu entwickeln, bereitzustellen und zu verwalten, was es einfacher macht, ein konsistentes und zuverlässiges Verhalten der Anwendungen in verschiedenen Umgebungen sicherzustellen.

Grundlagen der Portzuordnung in Docker

Ports und Netzwerke in Docker-Containern

Wenn Sie einen Container ausführen, ist er vom Hostsystem und anderen Containern isoliert, einschließlich seines eigenen Netzwerkstapels. Das bedeutet, dass alle Netzwerkports, die von der im Container ausgeführten Anwendung freigegeben werden, nur innerhalb des Containers selbst zugänglich sind.

Um die Anwendung von außerhalb des Containers zugänglich zu machen, müssen Sie die Ports des Containers auf entsprechende Ports auf dem Hostsystem abbilden. Dieser Prozess wird als "Portzuordnung" oder "Portweiterleitung" bezeichnet.

Freigeben von Ports in Docker

Um einen Port in einem Docker-Container freizugeben, können Sie die -p- oder --publish-Option verwenden, wenn Sie den Befehl docker run ausführen. Beispielsweise können Sie Port 80 im Container freigeben und ihn auf Port 8080 auf dem Host abbilden, indem Sie Folgendes ausführen:

docker run -p 8080:80 nginx

Dadurch wird ein Nginx-Webserver-Container gestartet, und Port 80 innerhalb des Containers wird auf Port 8080 auf dem Hostsystem abgebildet.

Sie können auch mehrere Portzuordnungen angeben, indem Sie die -p-Option mehrmals verwenden:

docker run -p 8080:80 -p 8443:443 nginx

Dadurch wird Port 80 im Container auf Port 8080 auf dem Host und Port 443 im Container auf Port 8443 auf dem Host abgebildet.

Zugriff auf zugeordnete Ports

Sobald Sie einen Port im Container auf einen Port auf dem Host zugeordnet haben, können Sie die im Container ausgeführte Anwendung zugreifen, indem Sie sich mit dem entsprechenden Port auf dem Host verbinden. Beispielsweise können Sie, wenn Sie Port 8080 auf dem Host auf Port 80 im Container zugeordnet haben, die Anwendung zugreifen, indem Sie in Ihrem Webbrowser http://localhost:8080 besuchen.

Insgesamt ist das Verständnis der Portzuordnung von entscheidender Bedeutung, um Ihre Docker-basierten Anwendungen von außerhalb des Containers zugänglich zu machen und die Kommunikation zwischen Containern und anderen Systemen zu ermöglichen.

Freigeben von Ports für den Zugang zu Anwendungen

Identifizieren der Anwendungs-Ports

Der erste Schritt beim Freigeben von Ports für den Zugang zu Anwendungen besteht darin, die Ports zu identifizieren, auf denen Ihre Anwendung lauscht. Diese Informationen werden normalerweise in der Dokumentation der Anwendung bereitgestellt oder können durch die Inspektion des Codes oder der Konfiguration der Anwendung ermittelt werden.

Beispielsweise lauscht ein Webserver wie Nginx wahrscheinlich auf Port 80 (HTTP) und/oder Port 443 (HTTPS). Wenn Sie einen Datenbankserver ausführen, lauscht dieser möglicherweise auf einem bestimmten Port wie 3306 für MySQL oder 5432 für PostgreSQL.

Freigeben von Ports mit dem Befehl docker run

Sobald Sie die Ports identifiziert haben, die Ihre Anwendung verwendet, können Sie sie für das Hostsystem freigeben, indem Sie die -p- oder --publish-Option verwenden, wenn Sie den Befehl docker run ausführen. Dadurch werden die Ports des Containers auf entsprechende Ports auf dem Hostsystem abgebildet.

Beispielsweise können Sie Port 80 im Container freigeben und ihn auf Port 8080 auf dem Host abbilden, indem Sie Folgendes ausführen:

docker run -p 8080:80 nginx

Dadurch wird ein Nginx-Webserver-Container gestartet, und Port 80 innerhalb des Containers wird auf Port 8080 auf dem Hostsystem abgebildet.

Freigeben mehrerer Ports

Sie können mehrere Ports freigeben, indem Sie die -p-Option mehrmals verwenden. Beispielsweise können Sie Port 80 und 443 im Container freigeben und sie auf die Ports 8080 und 8443 auf dem Host abbilden, indem Sie Folgendes ausführen:

docker run -p 8080:80 -p 8443:443 nginx

Dadurch wird Port 80 im Container auf Port 8080 auf dem Host und Port 443 im Container auf Port 8443 auf dem Host abgebildet.

Durch das Freigeben der entsprechenden Ports können Sie sicherstellen, dass Ihre Docker-basierten Anwendungen von außerhalb des Containers zugänglich sind, sodass Benutzer und andere Systeme mit Ihren Anwendungen interagieren können.

Zuordnung von Ports zwischen Containern und Host

Grundlagen der Syntax für die Portzuordnung

Beim Freigeben von Ports in Docker verwenden Sie die folgende Syntax, um einen Container-Port auf einen Host-Port zuzuordnen:

-p <host_port>:<container_port>

Beispielsweise würden Sie, um Port 8080 auf dem Host auf Port 80 im Container zuzuordnen, Folgendes verwenden:

docker run -p 8080:80 nginx

Dadurch wird Port 80 im Container auf Port 8080 auf dem Hostsystem zugeordnet.

Dynamische Portzuordnung

Anstatt einen bestimmten Host-Port anzugeben, können Sie auch Docker erlauben, einen verfügbaren Port auf dem Hostsystem auszuwählen, indem Sie den Host-Port weglassen:

docker run -p 80 nginx

Dadurch wird ein verfügbarer Port auf dem Hostsystem auf Port 80 im Container zugeordnet. Sie können den zugeordneten Port finden, indem Sie docker port <container_name> ausführen oder die Netzwerkeinstellungen des Containers untersuchen.

Zuordnung mehrerer Ports

Sie können mehrere Ports zuordnen, indem Sie die -p-Option mehrmals angeben:

docker run -p 8080:80 -p 8443:443 nginx

Dadurch wird Port 80 im Container auf Port 8080 auf dem Host und Port 443 im Container auf Port 8443 auf dem Host zugeordnet.

Anzeigen der zugeordneten Ports

Sie können die zugeordneten Ports für einen laufenden Container anzeigen, indem Sie den Befehl docker port verwenden:

docker port <container_name>

Dadurch wird Ihnen die Zuordnung zwischen den Container-Ports und den Host-Ports angezeigt.

Indem Sie verstehen, wie Sie Ports zwischen Containern und dem Hostsystem zuordnen, können Sie sicherstellen, dass Ihre Docker-basierten Anwendungen von außerhalb des Containers zugänglich sind, sodass Benutzer und andere Systeme mit Ihren Anwendungen interagieren können.

Konfiguration der Portweiterleitung in Docker Compose

Einführung in Docker Compose

Docker Compose ist ein Tool zur Definition und Ausführung von Docker-Anwendungen mit mehreren Containern. Es ermöglicht Ihnen, die Dienste, Netzwerke und Volumes Ihrer Anwendung in einer einzigen YAML-Datei zu definieren, wodurch die Verwaltung und Bereitstellung Ihrer Anwendung erleichtert wird.

Konfiguration der Portweiterleitung in Docker Compose

In einer Docker Compose-Datei können Sie die Portweiterleitung mit der Direktive ports konfigurieren. Die Syntax ähnelt dem Befehl docker run:

version: "3"
services:
  web:
    image: nginx
    ports:
      - 8080:80

In diesem Beispiel wird der web-Dienst mit dem Nginx-Webserver ausgeführt, und Port 80 im Container wird auf Port 8080 auf dem Hostsystem zugeordnet.

Sie können auch mehrere Ports zuordnen, indem Sie die Direktive ports mehrmals angeben:

version: "3"
services:
  web:
    image: nginx
    ports:
      - 8080:80
      - 8443:443

Dadurch wird Port 80 im Container auf Port 8080 auf dem Host und Port 443 im Container auf Port 8443 auf dem Host zugeordnet.

Dynamische Portzuordnung

Ähnlich wie beim Befehl docker run können Sie auch die dynamische Portzuordnung in Docker Compose verwenden, indem Sie den Host-Port weglassen:

version: "3"
services:
  web:
    image: nginx
    ports:
      - 80

Dadurch wird ein verfügbarer Port auf dem Hostsystem auf Port 80 im Container zugeordnet. Sie können den zugeordneten Port finden, indem Sie docker-compose port web 80 ausführen.

Durch die Konfiguration der Portweiterleitung in Ihrer Docker Compose-Datei können Sie sicherstellen, dass Ihre Anwendungen mit mehreren Containern von außerhalb der Docker-Umgebung zugänglich sind, sodass Benutzer und andere Systeme mit Ihren Anwendungen interagieren können.

Best Practices für die Portweiterleitung

Verwenden Sie spezifische Host-Ports

Verwenden Sie, wenn möglich, spezifische Host-Ports anstatt sich auf die dynamische Portzuordnung zu verlassen. Dies erleichtert das Merken und den Zugriff auf Ihre Anwendungen und kann auch die Konfiguration von Firewalls oder Netzwerken vereinfachen, die möglicherweise erforderlich sind.

Vermeiden Sie Portkonflikte

Stellen Sie sicher, dass die von Ihnen gewählten Host-Ports nicht mit anderen Diensten oder Anwendungen auf dem Hostsystem in Konflikt stehen. Dies kann Portkonflikte vermeiden und sicherstellen, dass Ihre Docker-basierten Anwendungen problemlos zugänglich sind.

Dokumentieren Sie die Portzuordnungen

Dokumentieren Sie deutlich die von Ihren Docker-basierten Anwendungen verwendeten Portzuordnungen, sowohl in Ihrem Code als auch in jeder Bereitstellungs- oder Konfigurationsdokumentation. Dies erleichtert es anderen Entwicklern oder Betriebsteams, Ihre Anwendungen zu verstehen und mit ihnen zu arbeiten.

Verwenden Sie Umgebungsvariablen für die Portkonfiguration

Erwägen Sie die Verwendung von Umgebungsvariablen zur Konfiguration der Portzuordnungen für Ihre Docker-basierten Anwendungen. Dies kann es erleichtern, die Portkonfigurationen zu ändern, ohne den Anwendungs-Code oder die Docker-Konfigurationsdateien ändern zu müssen.

version: "3"
services:
  web:
    image: nginx
    ports:
      - ${WEB_PORT}:80

In diesem Beispiel wird die Umgebungsvariable WEB_PORT verwendet, um den Host-Port zu konfigurieren, auf den der Nginx-Webserver zugeordnet wird.

Überwachen und verwalten Sie die Portnutzung

Überwachen Sie regelmäßig die Portnutzung auf Ihren Hostsystemen, um sicherzustellen, dass Sie nicht an verfügbaren Ports für Ihre Docker-basierten Anwendungen ausgehen. Erwägen Sie die Implementierung von automatisierten Tools oder Skripten, um die Portnutzung zu verwalten und zu optimieren.

Indem Sie diese Best Practices befolgen, können Sie sicherstellen, dass Ihre Docker-basierten Anwendungen zugänglich, sicher und einfach zu verwalten sind, was die Entwicklung, Bereitstellung und Wartung Ihrer Anwendungen in einer containerisierten Umgebung erleichtert.

Zusammenfassung

In dieser umfassenden Anleitung haben Sie die Grundlagen der Portweiterleitung in Docker-Containern gelernt. Sie wissen nun, wie Sie Ports freigeben, sie zwischen Containern und dem Host zuordnen und die Portweiterleitung in Docker Compose konfigurieren. Durch die Anwendung dieser Techniken können Sie sicherstellen, dass Ihre Docker-basierten Anwendungen von der Außenwelt zugänglich sind, was eine nahtlose Integration und Bereitstellung ermöglicht. Denken Sie daran, die Best Practices für die Portweiterleitung zu befolgen, um eine sichere und effiziente Docker-Umgebung aufrechtzuerhalten.