Docker Grundlagen: Container, Images und Volumes einfach erklärt

Docker hat die Art und Weise revolutioniert, wie Anwendungen entwickelt, bereitgestellt und betrieben werden. Mit Containern lassen sich Softwareumgebungen konsistent und isoliert ausführen, unabhängig vom zugrunde liegenden System. In diesem Tutorial werden die grundlegenden Konzepte von Docker – Container, Images und Volumes – praxisnah und leicht verständlich erklärt, sodass Einsteiger und IT-Profis direkt damit arbeiten können.

Was ist ein Docker-Container?

Ein Docker-Container ist eine isolierte Laufzeitumgebung, die eine Anwendung samt aller Abhängigkeiten enthält. Container nutzen die Ressourcen des Host-Systems, ohne eine eigene virtuelle Maschine zu benötigen, wodurch sie leichtgewichtig und schnell startbar sind.

Eigenschaften von Containern

  • Isolation: Container laufen unabhängig voneinander.
  • Portabilität: Ein Container kann auf jedem System mit Docker ausgeführt werden.
  • Effizienz: Container teilen sich den Kernel des Hosts und benötigen weniger Ressourcen als virtuelle Maschinen.
  • Reproduzierbarkeit: Anwendungen laufen identisch in Entwicklungs-, Test- und Produktionsumgebungen.

Beispiel: Einen Container starten

Mit folgendem Befehl wird ein Ubuntu-Container gestartet:

docker run -it ubuntu bash

Hierbei öffnet sich eine interaktive Shell innerhalb des Containers.

Docker-Images verstehen

Ein Docker-Image ist ein unveränderliches Template, das alle benötigten Komponenten für einen Container enthält, wie Betriebssystem, Bibliotheken und Anwendungen. Images dienen als Basis für Container.

Wichtige Punkte zu Images

  • Images sind schreibgeschützt und unveränderlich.
  • Container werden aus Images erstellt.
  • Images können versioniert und über Docker Hub oder private Registries geteilt werden.

Ein Image herunterladen

Beispiel: Herunterladen des offiziellen Ubuntu-Images:

docker pull ubuntu:latest

Eigene Images erstellen

Mit einer Dockerfile lässt sich ein eigenes Image definieren:

FROM ubuntu:latest
RUN apt update && apt install -y curl
CMD ["bash"]

Erstellen des Images:

docker build -t mein-ubuntu-image .

Docker-Volumes: Daten persistent speichern

Container sind standardmäßig flüchtig. Nach dem Stoppen oder Löschen gehen alle Daten verloren. Docker-Volumes ermöglichen die dauerhafte Speicherung von Daten außerhalb des Containers.

Volumes erstellen und nutzen

  • Volume erstellen:
    docker volume create mein_volume
  • Volume in Container einbinden:
    docker run -d -v mein_volume:/data ubuntu
  • Volume anzeigen:
    docker volume ls
  • Volume löschen:
    docker volume rm mein_volume

Bind-Mounts vs. Volumes

Bind-Mounts binden ein Verzeichnis vom Host direkt in den Container ein, während Volumes von Docker verwaltet werden. Volumes bieten Vorteile wie Backups, bessere Performance und einfache Verwaltung.

Container-Verwaltung mit Docker CLI

Docker bietet eine Vielzahl von Befehlen, um Container zu verwalten:

  • Liste der laufenden Container:
    docker ps
  • Alle Container anzeigen:
    docker ps -a
  • Container stoppen:
    docker stop <container_id>
  • Container starten:
    docker start <container_id>
  • Container löschen:
    docker rm <container_id>
  • Logs eines Containers anzeigen:
    docker logs <container_id>

Netzwerkgrundlagen in Docker

Docker erstellt standardmäßig ein Bridge-Netzwerk, über das Container untereinander kommunizieren können. Benutzerdefinierte Netzwerke ermöglichen flexiblere Szenarien.

Bridge-Netzwerk erstellen

docker network create --driver bridge mein_net

Container verbinden:

docker run -d --network mein_net --name container1 nginx

Ports veröffentlichen

Um Container-Dienste für den Host zugänglich zu machen, müssen Ports gemappt werden:

docker run -d -p 8080:80 nginx

Hierbei wird Port 80 im Container auf Port 8080 des Hosts weitergeleitet.

Praktische Beispiele für Einsteiger

  • Webserver starten:
    docker run -d -p 80:80 nginx
  • Datenbank starten und Volume nutzen:
    docker run -d -v db_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql
  • Container interaktiv nutzen:
    docker exec -it <container_id> bash

Tipps für effizientes Arbeiten mit Docker

  • Container nach Möglichkeit kurzlebig halten und Aufgaben modular gestalten.
  • Volumes für Datenpersistenz verwenden, nicht das Container-Dateisystem.
  • Offizielle Images bevorzugen, um Sicherheitsrisiken zu minimieren.
  • Regelmäßig nicht benötigte Images und Container aufräumen:
    docker system prune -a

Docker für die Entwicklung nutzen

Docker ermöglicht Entwicklern, komplette Entwicklungsumgebungen zu definieren, zu teilen und reproduzierbar zu starten. In Kombination mit Docker Compose lassen sich komplexe Anwendungen mit mehreren Containern orchestrieren.

Docker Compose Beispiel

Docker Compose definiert Multi-Container-Anwendungen in einer docker-compose.yml:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: mysql
    environment:
      MYSQL_ROOT_PASSWORD: pass
    volumes:
      - db_data:/var/lib/mysql

volumes:
db_data:

Anwendung starten:

docker-compose up -d

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles