Voraussichtliche Lesedauer: 6 Minuten
Docker hat die Art und Weise, wie Entwickler Software entwickeln, testen und bereitstellen, revolutioniert. In diesem Artikel vergleichen wir zwei grundlegende Werkzeuge, die bei der Verwendung von Docker zum Einsatz kommen: Docker Run und Docker Compose. Wir verwenden Portainer und Docker Netzwerke als Beispiele, um ihre Anwendung zu veranschaulichen und die Vorteile von Docker Compose, insbesondere im Hinblick auf Infrastructure as Code, zu diskutieren.
Was ist Docker Run?
Docker Run ist ein Befehl, der verwendet wird, um einen Docker-Container aus einem Docker-Image zu starten. Es ist der direkteste Weg, einen Container zu starten und zu verwalten. Zum Beispiel:
docker run -d -p 80:80 docker/getting-started
Dieser Befehl startet einen Container im Hintergrund und öffnet Port 80 auf dem Host, um auf die App zuzugreifen.
Was ist Docker Compose?
Docker Compose ist ein Tool, das die Definition und den Betrieb von Multi-Container Docker-Anwendungen erleichtert. Mit einer YAML-Datei können Sie Dienste, Netzwerke und Volumes konfigurieren und dann alle Dienste mit einem einzigen Befehl starten:
version: '3.8'
services:
web:
image: nginx
ports:
- "80:80"
Docker Run vs. Docker Compose: Warum Docker Compose die bessere Wahl ist
Docker Compose bietet im Vergleich zu Docker Run mehrere Vorteile:
- Vereinfachte Konfiguration: Docker Compose erlaubt es dir, deine gesamte Anwendungsstruktur in einer einzigen Datei zu definieren, was Fehler minimiert und die Wiederverwendbarkeit erhöht.
- Einfache Skalierung: Mit Docker Compose kannst du leicht die Anzahl der Container für jeden Dienst erhöhen oder verringern.
- Entwicklerfreundlichkeit: Entwickler können mit einem einzigen Befehl komplette Umgebungen hochfahren und herunterfahren, was den Entwicklungsprozess beschleunigt.
Anwendungsbeispiel: Portainer mit Docker Compose einrichten
Portainer ist ein leichtgewichtiger Management-UI, der es Ihnen ermöglicht, Ihre Docker-Umgebungen einfach zu verwalten. Hier ist eine Schritt-für-Schritt-Anleitung, wie du Portainer mit Docker Compose einrichten kannst:
Erstellen einer docker-compose.yml Datei:
version: '3'
services:
portainer:
image: portainer/portainer-ce
ports:
- "9000:9000"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
- "portainer_data:/data"
volumes:
portainer_data:
Starten von Portainer:
docker-compose up -d
Nach dem Starten kannst du auf Portainer über http://<IP-deines-Servers>:9000
zugreifen und beginnen deine Docker-Container zu verwalten. Mehr zur Einrichtung von Portainer findest du auf dem vorherigen Artikel Portainer einfach einrichten: Meistern von Docker & Kubernetes.
Docker Netzwerke und deren Vorteile
Was sind Docker Netzwerke?
Bevor du dich mit externen und internen Netzwerken beschäftigst, solltest du verstehen, was Docker Netzwerke überhaupt sind. Ein Docker Netzwerk ermöglicht es Containern, miteinander und mit dem Host zu kommunizieren. Docker verwaltet diese Netzwerke und bietet dir verschiedene Netzwerk-Treiber, die spezifische Isolations- und Netzwerkeigenschaften bieten.
Interne Netzwerke: Sicherheit und Isolation
Erstelle interne Netzwerke, wenn deine Container untereinander kommunizieren müssen, ohne von der äußeren Welt erreicht zu werden. Dies ist besonders nützlich, wenn du empfindliche Daten verarbeitest oder Dienste betreibst, die nicht öffentlich exponiert sein sollen.
In deiner docker-compose.yml
definierst du ein internes Netzwerk einfach durch Hinzufügen des Schlüssels internal: true
unter der Netzwerkspezifikation. Hier ein Beispiel:
version: '3'
services:
portainer:
image: portainer/portainer-ce
networks:
- backend
networks:
backend:
internal: true
Ohne die Angabe von internal: true
ist es ebenfalls ein internes Netzwerk, was auf dem Ordner basiert, in dem die docker-compose.yml
liegt. In diesem Setup kann der Service portainer
ausschließlich auf das interne Netzwerk backend
zugreifen. Keine externe Kommunikation ist möglich. Andere Container, die sich ebenfalls in dem Netzwerk befinden, können auf den Container zugreifen und vice versa.
Externe Netzwerke: Verbindung mit der Außenwelt
Manchmal müssen deine Container mit externen Netzwerken oder Services kommunizieren. Vielleicht greift deine Anwendung auf eine externe Datenbank zu oder muss Dienste im Internet erreichen. Hierfür richtest du ein externes Netzwerk ein. In einem Heimserver Setup ist dies zu bevorzugen, da die Wartbarkeit und Konfiguration wesentlich simpler ist, wenn alle Container sich untereinander kennen und aufeinander zugreifen können.
Ein externes Netzwerk in Docker Compose wird nicht direkt in der Compose-Datei erstellt. Stattdessen definierst du es vorab mit Docker CLI und referenzierst es dann in deiner Compose-Datei:
docker network create unraid-ext
Und in deiner docker-compose.yml
:
version: '3'
services:
portainer:
image: portainer
networks:
- unraid-ext
networks:
unraid-ext:
external: true
Mit dieser Konfiguration kann der portainer
Service über das externe Netzwerk unraid-ext
kommunizieren, was Verbindungen außerhalb deines Docker Hosts ermöglicht.
Best Practices für Netzwerke in Docker Compose
- Isoliere Produktionsumgebungen: Nutze interne Netzwerke, um deine Produktionsumgebungen zu isolieren und schützen.
- Vermeide Netzwerkkonflikte: Achte darauf, Namen von externen Netzwerken eindeutig zu wählen, um Konflikte zu vermeiden.
- Monitor deine Netzwerke: Überwache den Netzwerkverkehr, um ungewöhnliche Aktivitäten schnell zu erkennen.
Durch das Verständnis und die korrekte Anwendung von internen und externen Netzwerken in Docker Compose kannst du die Sicherheit und Effizienz deiner Container-Anwendungen erheblich verbessern. Nutze diese Tools weise, um deine Entwicklungen sicher und effektiv zu gestalten!
Umsetzung im YouTube-Video
Fazit
Fassen wir zusammen, wie Docker die Softwareentwicklung verändert hat und warum Docker Compose oft die bessere Wahl gegenüber Docker Run ist, besonders wenn du komplexe Anwendungen effizient verwalten möchtest. Docker Compose erleichtert dir nicht nur das Leben durch die Vereinfachung der Konfiguration deiner Dienste in einer einzigen YAML-Datei, sondern steigert auch die Skalierbarkeit und Entwicklerfreundlichkeit deiner Projekte. Du kannst Umgebungen mit einem einzigen Befehl hoch- und herunterfahren, was die Entwicklung beschleunigt und die Konsistenz sichert.
Setze Docker Netzwerke strategisch ein, um die Kommunikation deiner Container optimal zu gestalten. Mit internen Netzwerken schützt du sensible Daten und sorgst für eine sichere Umgebung, während externe Netzwerke die Verbindung deiner Anwendungen mit der Außenwelt ermöglichen. Denke daran, die Netzwerke sorgfältig zu planen und zu überwachen, um Konflikte und Sicherheitsrisiken zu minimieren. Im Heimnetzwerk reicht ein externes Netzwerk oftmals aus.
Insgesamt bietet Docker, insbesondere durch Docker Compose, eine robuste Plattform für das Management deiner Anwendungen. Nutze die Möglichkeiten von Docker Compose voll aus, um deine Entwicklungsprozesse zu optimieren oder deine Anwendungen effizient und sicher zu betreiben.
0 Kommentare