Im Laufe der Jahre sind viele Blogbeiträge und YouTube-Videos über Docker erschienen. Ich erinnere mich, dass ich vor etwa 7 bis 8 Jahren auf einer Konferenz eine Demo sah, die Docker als neue Technologie vorstellte. Sie beschrieben, wie einfach es damit sei, komplexe Systeme zu erstellen, und ich dachte nur: „Wie? Werden wir von nun an Strukturen wie Lego bauen können?“ Die Idee, dass man Umgebungen und Anwendungen wie Bausteine zusammensetzen könnte, hat mich fasziniert. Heute, als Technikerin mit Projekten in unterschiedlichsten Bereichen, ist Docker für mich tatsächlich unverzichtbar geworden.
Ein kleiner Gedanke: Braucht man Docker heute noch?
Natürlich! Docker ist wie ein zuverlässiger Freund, auf den ich mich in jeder Projektphase verlassen kann. Ob ich eine neue Datenbank testen, eine Suchmaschine ausprobieren oder schnell ein Service-Backend hochziehen will – Docker hilft mir, ohne viel Aufwand einfach loszulegen. Viele Technik-Anfänger fragen, ob Docker 2024 immer noch relevant ist. Aus meiner Sicht: Absolut.
Es spart mir Zeit und bietet mir die Flexibilität, die ich brauche, ohne meinen Rechner vollzumüllen. Aber warum sollte Docker auch für dich spannend sein? Lass uns gemeinsam Schritt für Schritt einsteigen und dabei herausfinden.
Was ist Docker eigentlich?
Docker ist eine Softwarelösung, um Anwendungen in einem simulierten Betriebssystemumfeld auszuführen. Das bedeutet, dass nicht nur die Software, sondern das gesamte Betriebssystem und alle Abhängigkeiten simuliert werden. Statt nur die richtige Softwareversion zu installieren, kannst du mit Docker eine komplette für die Software perfekt passende Betriebssystemumgebung erstellen, die unabhängig und isoliert von deinem eigentlichen Betriebssystem läuft.
Damit kann für z.B. während einer Entwicklung einer Webseite ein Webserver in einer virtualisierten Linux/Ubuntu-Umgebung auf einem Windows-Computer gestartet werden. Die Software und das Betriebssystem laufen dabei in einem sogenannten Container und es können beliebig viele Container erstellt und nur bei Bedarf gestartet werden.
Das klingt jetzt alles sehr trocken - am besten versteht man es, wenn man beginnt Docker zu verwenden und die Magie direkt zu erleben.
Schritt 1: Docker installieren – Ganz einfach, wirklich!
Windows-Installation
Der erste Schritt ist die Installation.
Für Windows-User bedeutet das, Docker inklusive Docker Desktop von der offiziellen Webseite herunterzuladen und zu installieren. Die Installation geht zügig – ein paar Klicks und du bist startklar.
Linux-Installation
Für Linux-User ist es noch einfacher. Sie können Docker mit ein paar Befehlen im Terminal installieren:
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker # Damit Docker beim Start des Computers automatisch startet
Die grafische Oberfläche Docker Desktop zur Verwaltung von Docker kann optional auch für Linux installiert werden. Die Anleitung dazu findest du hier.
Verifikation der Installation
Nach der Installation solltest du einmal docker —version in der Eingabeaufforderung oder PowerShell eingeben, um sicherzustellen, dass alles funktioniert. Falls das klappt, können wir loslegen!
docker --version
# Beispiel-Output: Docker version 20.10.14, build a224086
Docker Desktop für einfaches Management
Wenn du Docker Desktop installiert hast (bei Windows automtisch inkludiert) steht dir eine grafische Oberfläche zur Steuerung von Docker zur Verfügung. Das macht es noch einfacher, Container zu erstellen und zu verwalten.
Ich war sehr aufgeregt, als ich Docker zum ersten Mal installierte. Früher habe ich Stunden damit verbracht Server aufzusetzen und Software zu installieren. Heute sind es dank Docker plötzlich nur mehr ein paar Zeilen Code.
Wie verwendet man Docker-Images?
Das wichtigste Konzept bei der Arbeit mit Docker sind Docker-Images. Ein Docker-Image ist wie ein Rezept für ein Gericht. Es beschreibt Schritt für Schritt, welche Zutaten (oder Software-Abhängigkeiten) du brauchst und wie du sie kombinierst. Wenn du einmal ein Rezept hast, kannst du immer wieder dieselben Gerichte „kochen“ – oder in unserem Fall Container erstellen. Docker-Images ermöglichen es dir, genau das zu tun.
Ein einfaches Beispiel: Mit dem „Rezept“ für einen Webserver kannst du in wenigen Sekunden einen funktionierenden Server aufsetzen, ohne tief in die Details der Installation einsteigen zu müssen.
# Das offizielle Rezept (Image) für den NGINX-Webserver herunterladen
docker pull nginx
# Den Webserver starten
docker run -p 8080:80 nginx
# Der Server läuft jetzt auf deinem Computer und ist unter http://localhost:8080 erreichbar
Nun kannst du localhost:8080 in deinem Browser aufrufen, und voilà, da ist dein Webserver! Früher hätte ich dafür Stunden gebraucht, aber dank Docker geht es heute blitzschnell.
Eine unglaubliche Anzahl an Images ist auf Docker Hub verfügbar. Hier findest du alles, von Datenbanken über Webserver bis hin zu Machine-Learning-Frameworks. Es ist wie ein riesiger Supermarkt, in dem du alles findest, was du brauchst. Du möchtest ein neues Framework ausprobieren? Kein Problem, einfach das passende Image herunterladen und loslegen.
Container: Eine Tupperdose für deine Anwendung
Während das Image wie das Rezept ist, ist der Container das fertige Gericht in deiner Tupperdose – bereit zum Mitnehmen und Verzehr. Der Container ist die lebende Instanz, die aus dem Image erstellt wurde. Das Beste daran? Du kannst einen Container stoppen, löschen und jederzeit neu erstellen, und er wird immer genau so aussehen, wie du es im Rezept definiert wurde.
Ein alltägliches Beispiel: Datenbanken. Wenn ich schnell eine MySQL-Datenbank brauche, kann ich sie einfach im Docker-Container laufen lassen, ohne mühsame Installationen.
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=<PASSWORD> --name test-database mysql
Die Datenbank läuft jetzt unter localhost:3306. Früher hätte ich Stunden damit verbracht, Installationen und Konfigurationen vorzunehmen – heute geht es in wenigen Minuten.
Der Container kann genauso einfach wieder beendet werden. Da wir dem Container mit —name einen Namen gegeben haben, können wir einfach diesen Namen referenzieren.
docker stop test-database
Das besondere ist nun, dass du einen separaten Container je Projekt oder Kunden erstellen kannst. Je nachdem an welchem Projekt du arbeitest, startest du nur den passenden z.B. Datenbank-Container und beendest ihn wenn du fertig bist. Es läuft damit nur das, was du aktuell wirklich brauchst.
Argumente und Portweiterleitung – Anpassung leicht gemacht
Das definierte Rezept des Containers kann mit Argumenten weiter angepasst und auf deine Bedürfnisse konfiguiert werden. Das kann entweder durch Argumente wie “-p 3306:3306” für Portweiterleitung oder durch Umgebungsvariablen für Konfigurationen geschehen. Je nach Image gibt es unterschiedliche Argumente, die du verwenden kannst.
Folgend einige wichtige Argumente, die du kennen solltest:
Argument | Erklärung |
---|---|
-d | Der Container wird “detached” also im Hintergrund gestartet. Du kannst das Terminal schließen und er läuft weiter |
-p | Definiere Portweiterleitungen von deinem Laptop zu Ports im Container. -p 8080:80 leitet zum Beispiel deinen Port 8080 auf den Webserver-Port 80 im Container um |
—name | Gibt dem Container einen Namen. Wenn kein Name angegeben wird, erfindet Docker einen zufälligen Namen. |
-v | Bindet Verzeichnisse von deinem Laptop in den Container ein. So kannst du zum Beispiel Konfigurations-Dateien in den Container kopieren. Das jeweilige Image, dass du verwendest gibt hierzu meistens gute Beispiele. |
Viele Images können auch mit Umgebungsvariablen konfiguriert werden. Das ist besonders nützlich, wenn du z.B. eine Datenbank startest und das Passwort oder den Benutzernamen konfigurieren möchtest. Welche Variablen du setzen kannst, findest du in der Dokumentation des jeweiligen Images. Im Command oben zur Erstellung der MySQL-Datenbank haben wir z.B. das Passwort über die Umgebungsvariable MYSQL_ROOT_PASSWORD gesetzt.
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=<PASSWORD> --name test-database mysql
Das Image für Wordpress verlangt z.B. über die Variablen WORDPRESS_DB_USER, WORDPRESS_DB_PASSWORD usw. die Verbindung zur Datenbank beim Start automatisch aufzusetzen. Damit kannst du mit einem einzigen Befehl eine komplette Wordpress-Installation aufsetzen und mit einer bestehenden Datenbank verbinden.
Port Forwarding – So kannst du „hineinschauen“
Port Forwarding bzw. eine Portweiterleitung ist für viele am Anfang kompliziert. Es ist wie eine Tür, die du von deinem Host-Computer zu deinem Container öffnest. Es macht deinen Container für Anwendungen auf deinem Rechner zugänglich.
Angenommen, ich möchte eine Test-Datenbank erstellen:
docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=<PASSWORD> --name test-database mysql
Mit diesem Befehl kann ich über localhost:3307 die Datenbank aufrufen und nutzen. Der Port 3307 auf meinem Rechner wird auf den Port 3306 im Container weitergeleitet. So kann ich die Datenbank einfach über meinen Browser oder eine Anwendung erreichen.
Sich mit einem Container verbinden – Der direkte Weg hinein
Manchmal will ich „ins Herz des Containers schauen“ und direkt mit ihm interagieren, zum Beispiel, um Logs zu prüfen oder Konfigurationen zu ändern. Docker erlaubt es dir, direkt auf den Container zuzugreifen:
docker exec -it <container-id> /bin/bash
Jetzt befindest du dich im Inneren des Containers und kannst direkt arbeiten, als wärst du auf einem Remote-Server. Diese Funktion hat mir schon unzählige Male den Tag gerettet, wenn ich schnell nach einem Fehler suchen musste.
Folgend eine Erklärung der Argumente:
Argument | Erklärung |
---|---|
exec | Führe einen Befehl im Container aus. In diesem Fall wollen wir /bin/bash im Container ausführen, um uns verbinden zu können. |
-it | Startet den Container im interaktiven Modus. Das bedeutet, dass er /bin/bash nicht nur einmal ausführt und beendet, sondern du direkt mit dem Container über /bin/bash interagieren kannst. |
<container-id> | Die ID des Containers, mit dem du interagieren möchtest. |
/bin/bash | Das Programm das im Container gestartet werden soll. In diesem Fall eine klassische Bash-Shell. |
Wie findest du die Container-ID? Führe im Terminal “docker ps” aus, um alle aktiven Container zu sehen. Mit “docker ps -a” siehst du auch alle gestoppten Container.
> docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9778f606e398 mysql "docker-entrypoint.s…" 6 minutes ago Up 4 seconds 33060/tcp, 0.0.0.0:3307->3306/tcp test-database
58014af4d7d1 nginx "/docker-entrypoint.…" 9 minutes ago Up 3 minutes 0.0.0.0:8080->80/tcp nginx-test
Geheimtipp: Container miteinander verknüpfen
Hier ist ein weniger bekanntes, aber mächtiges Feature: die Verknüpfung von Containern. Nehmen wir an, du hast eine Anwendung, die mit einer Datenbank kommunizieren muss. Docker-Netzwerke machen das einfach möglich.
- Erstelle ein Netzwerk:
docker network create mein-netzwerk
- Starte beide Container innerhalb dieses Netzwerks:
docker run -d --network=mein-netzwerk --name db mysql
docker run -d --network=mein-netzwerk --name app myapp
Durch die Angabe von —network kann dein app-Container nun auf die Datenbank zugreifen, indem er einfach db als Hostnamen verwendet – einfacher geht’s nicht!
Docker-Compose - Lego für Techniker
Container mit einem Befehl erstellen ist schon eine große Erleichterung. Mehrere Container miteinander zu verbinden und alle Befehle und Umgebungsvariablen zu merken, kann aber schnell unübersichtlich werden.
Hierfür hat Docker eine großartige Lösung. Mit Docker-Compose kann ein Rezept für mehrere Container erstellt werden. Es wird quasi ein Rezept für die Nutzung von Rezepten erstellt.
Dieses Rezept wird in einer YAML-Datei definiert und enthält alle Container und Einstellungen die benötigt werden. Man kann damit relativ einfach ein komplettes System mit Web-Server, Backend-Software und Datenbank-Server auf einmal erstellen und mit einem Befehl laufen lassen.
Wordpress benötigt zum Beispiel einen Webserver und MySQL als Datenbank - also zwei Container. Mit folgendem vereinfachten YAML File kann Docker-Compose beide Container starten, Konfigurieren und miteinander verbinden:
version: '2'
services:
wordpress:
depends_on:
- db
image: wordpress
environment:
WORDPRESS_DB_HOST: db:3306 # Der Name des Datenbank-Containers ist der Host
WORDPRESS_DB_USER: <USER>
WORDPRESS_DB_PASSWORD: <PASSWORD>
WORDPRESS_DB_NAME: wordpress
ports:
- 8082:80 # Portumleitung von localhost:8082 auf den Webserver-Port 80 im Container
networks:
- wpNetwork # Verbindung zum selben Netzwerk wie die Datenbank
db:
image: mysql
environment:
MYSQL_ROOT_PASSWORD: <ROOT-PASSWORD>
MYSQL_DATABASE: wordpress
MYSQL_USER: <USER>
MYSQL_PASSWORD: <PASSWORD>
networks:
- wpNetwork # Verbindung zum selben Netzwerk wie Wordpress
networks:
wpNetwork:
Dieses YAML-File ist sehr einfach gehalten aber es gibt noch mehr Optionen, um Wordpress zu konfigurieren. Hier findest du ein ausführliches Beispiel
Wenn man sich im Terminal nun im selben Ordner, wie das YAML-File befindet, kann man das System mit einem Befehl starten:
docker-compose up
Nun sollte Wordpress unter localhost:8082 erreichbar und mit der Datenbank verbunden sein. Wenn du localhost:8082 im Browser öffnest, sollte die Wordpress-Installation starten.
Das ganze System kann auch genauso einfach wieder gestoppt werden:
docker-compose down
Fazit: Docker – mehr als nur ein Tool
Heute ist Docker für mich wie der zuverlässige Werkzeugkasten, den ich bei jedem Projekt dabei habe. Die Leichtigkeit, mit der ich neue Umgebungen aufsetzen und experimentieren kann, macht Docker unverzichtbar. Diese Erfahrung wünsche ich jedem – ob Entwickler, Data Scientist oder jedem, der technisch interessiert ist.
Genau darum habe ich diesen Artikel geschrieben: Docker wirkt am Anfang einschüchternd aber sobald man einmal die ersten Schritte gemacht hat, ist es wie Magie.
Möchten Sie Docker in Ihrem Unternehmen einsetzen oder haben Sie Fragen zur Integration in Ihre bestehende Infrastruktur? Wir helfen Ihnen gerne weiter. Kontaktieren Sie uns für ein unverbindliches Gespräch .