Bei der Entwicklung von Anwendungen müssen oft komplexe Datenbanken, Programmiersprachen, Frameworks, Abhängigkeiten und vieles mehr verwaltet werden. Außerdem kann es zu Kompatibilitätsproblemen kommen, wenn du mit verschiedenen Betriebssystemen (OS) arbeitest. Jede dieser Variablen kann sich negativ auf deinen Arbeitsablauf auswirken.

Um diese Probleme zu lösen, kannst du Docker einsetzen. Mit diesem Tool kannst du Anwendungen in Container-Umgebungen erstellen und verwalten. Letztlich kann Docker viele komplizierte Konfigurationsaufgaben abnehmen und die Entwicklung einfacher und effizienter machen.

In diesem Beitrag beantworten wir die Frage „Was ist Docker?“ und erklären, wie es funktioniert. Dann zeigen wir dir einige der wichtigsten Anwendungsfälle und wie du als Anfängerin oder Anfänger loslegen kannst. Lass uns eintauchen!

Was ist Docker?

Was genau ist Docker? Es handelt sich um eine Open-Source-Plattform für die Entwicklung von Anwendungen in einer Sandbox. Die leichtgewichtigen, virtualisierten Umgebungen werden auch als Container bezeichnet:

Docker
Docker

Container gibt es zwar schon seit 1979, aber Docker hat sie leichter zugänglich gemacht. Mit Docker können Entwickler/innen ihre Anwendungen lokal oder auf einem Produktionsserver erstellen, testen und einsetzen.

Seit der Veröffentlichung von Docker 1.0 im Jahr 2014 hat es die Verwendung von Containern sowohl für einzelne Entwickler/innen als auch für Unternehmen standardisiert. Inzwischen gibt es über 13 Millionen Nutzer, darunter große Unternehmen wie Netflix, Target und Adobe:

Unternehmen nutzen Docker
Unternehmen nutzen Docker

Und die Verbreitung von Docker nimmt jedes Jahr zu. Laut Datadog haben fast 25 % der Unternehmen begonnen, Docker zur Überwachung ihrer Anwendungen einzusetzen. Seit 2015 ist dieser Anteil jedes Jahr um 3 bis 5 Prozentpunkte gestiegen:

An image showing the increasing use of Docker over the years
Steigende Nutzung von Docker in Unternehmen (Quelle: Datadog)

Wie wir sehen, hat sich Docker zu einer beliebten Plattform für die Entwicklung und den Einsatz von Anwendungen entwickelt. Um die Popularität von Docker zu verstehen, sollten wir uns ansehen, wie die Software funktioniert.

Docker vs. Virtuelle Maschinen

In Docker kannst du eine Anwendung in eine standardisierte Einheit verpacken, die für die Softwareentwicklung genutzt werden kann. Diese Einheit, auch Container genannt, enthält den Code und die Abhängigkeiten der Anwendung, so dass sie problemlos in jeder Computerumgebung ausgeführt werden kann.

Vor Docker haben Unternehmen oft virtuelle Maschinen (VMs) verwendet, um Anwendungen auszuführen. Diese können physische Computer emulieren und ermöglichen es Entwicklern, einen Server in mehrere Server zu verwandeln. Dieser Ansatz kann jedoch auch einige Nachteile haben.

Jede VM enthält eine vollständige Kopie des Betriebssystems und der Anwendung sowie die erforderlichen Binärdateien und Bibliotheken. Diese Dateien können mehrere Dutzend GB auf einem Computer einnehmen. Außerdem kann die Virtualisierung der Hardware für ein Gastbetriebssystem einen erheblichen Mehraufwand bedeuten.

Anstatt die Hardware zu virtualisieren, virtualisieren Container das Betriebssystem. In Docker sind Container Abstraktionen auf der Anwendungsebene, die sowohl Code als auch Abhängigkeiten enthalten können. Auf demselben Rechner können mehrere Container als isolierte Prozesse laufen:

Vergleich von Docker und virtuellen Maschinen
Vergleich von Docker und virtuellen Maschinen (Quelle: ResearchGate)

Daher benötigen Docker-Container in der Regel weniger Platz. Sie können auch mehr Anwendungen enthalten, ohne dass so viele VMs und Betriebssysteme benötigt werden.

Wie funktioniert Docker?

Stell dir vor, du willst eine Fracht von einem Ort zum anderen transportieren. Im modernen Zeitalter kannst du das ganz einfach mit Containern machen. Diese halten bestimmte Gegenstände in einer versiegelten Umgebung zusammen, sodass sie mit Schiffen, Zügen oder Flugzeugen transportiert werden können.

Docker funktioniert auf eine ganz ähnliche Weise. Vereinfacht gesagt, hat Docker die Methode zur Entwicklung und zum Einsatz von Software standardisiert.

Docker arbeitet mit Containern. Diese können wiederverwendbare Komponenten wie Python, Node, Abhängigkeiten und mehr enthalten. Dann kannst du die Container überall einsetzen, ohne dich um Kompatibilitätsprobleme kümmern zu müssen.

Docker kann anfangs sehr kompliziert sein, deshalb wollen wir uns die wichtigsten Komponenten dieser Software ansehen. Sobald du die wichtigsten Funktionen verstanden hast, kannst du die Entwicklung deiner Anwendungen optimieren!

Docker-Engine

Die Docker Engine ist die Client-Server-Technologie für die Erstellung und Containerisierung von Anwendungen in Docker. Im Wesentlichen unterstützt sie alle Aufgaben, die mit dem Betrieb deiner Container-basierten Anwendung verbunden sind:

Docker Engine Diagramm
Docker Engine Diagramm (Quelle: Docker)

Dies sind die Hauptkomponenten der Docker-Engine:

  • Docker Daemon: Verwaltet Docker-Images, Container, Netzwerke und Volumes. Er hört auch auf Docker-API-Anfragen und verarbeitet sie.
  • Docker Engine REST API: Eine von Docker entwickelte API, die mit dem Daemon interagiert.
  • Docker CLI: Die Befehlszeilenschnittstelle für die Kommunikation mit dem Docker-Daemon.

Mit der Docker Engine kannst du containerisierte Anwendungen auf jeder Infrastruktur ausführen. Dieser Aufbau trägt zur branchenführenden Container-Runtime von Docker bei.

Docker-Image

Ein Docker-Image ist ein ausführbares Softwarepaket, das den gesamten Quellcode, die Abhängigkeiten und die Werkzeuge enthält, die zum Ausführen einer Anwendung benötigt werden. Images sind schreibgeschützte Vorlagen, die Anweisungen für die Erstellung eines Containers enthalten.

Du kannst Docker-Images besser verstehen, wenn du sie als Blaupausen betrachtest. Sie enthalten Schnappschüsse davon, was ein Container enthalten wird, wenn er läuft.

In einem Image gibt es mehrere übereinanderliegende Schichten. Wenn du z.B. ein Webserver-Image erstellen willst, kannst du zunächst Ubuntu Linux einbinden. Als Nächstes kannst du Apache und PHP-Programmierung darüber legen.

Wenn du ein Docker-Image erstellst, ist es am besten, die variabelsten Schichten weiter oben im Stack zu platzieren. Wenn du dann eine Änderung vornehmen musst, brauchst du nicht das gesamte Image neu zu erstellen.

Docker Container

Wie wir bereits erwähnt haben, sind Container ein wichtiger Bestandteil von Docker. Einfach ausgedrückt ist ein Docker-Container ein isolierter Bereich, in dem eine Anwendung ausgeführt werden kann, ohne den Rest des Systems zu beeinträchtigen. Diese Softwareeinheit verpackt den gesamten Code und die Abhängigkeiten, so dass er leicht von einer Anwendung zur nächsten übertragen werden kann.

Hier sind einige Vorteile der Verwendung von Docker-Containern:

  • Standard: Obwohl es Container schon seit Jahrzehnten gibt, hat Docker den Industriestandard für ihre Verwendung geschaffen. Docker-Container sind unglaublich portabel und einfach zu benutzen.
  • Leichtgewichtig: Da Container den Kernel des Betriebssystems gemeinsam nutzen, brauchst du nicht für jede Anwendung ein anderes Betriebssystem. Dadurch kann deine Anwendung effizienter betrieben werden und die Kosten für Server und Lizenzen sinken.
  • Sicher: Im Gegensatz zu VMs isolieren Container Anwendungen, was sie sicherer macht. Mit Docker verfügen deine Container standardmäßig über Isolationsfunktionen.

Letztlich bieten Docker-Container mehr Vorteile als VMs. Obwohl sie Ressourcen auf ähnliche Weise isolieren und zuweisen, sind Container in der Regel portabler, effizienter und sicherer.

Docker Compose

Docker Compose ist ein Werkzeug, mit dem mehrere Container als ein einziger Dienst ausgeführt werden können. Wenn deine Anwendung sowohl NGINX als auch MySQL benötigt, kannst du mit Docker Compose eine Datei erstellen, die beide Container startet. So musst du nicht jeden Container einzeln starten.

Hier sind die drei grundlegenden Schritte bei der Verwendung von Docker Compose:

  1. Erstelle ein Dockerfile, um die Umgebung der Anwendung zu definieren, damit sie reproduziert werden kann.
  2. Definiere alle Dienste deiner Anwendung in einer Datei docker-compose.yml, damit sie in einer isolierten Umgebung ausgeführt werden können.
  3. Verwende den Befehl Docker Compose, um deine Anwendung zu starten und auszuführen.

Mit Docker Compose können mehrere Container isoliert voneinander laufen. Dennoch können sie bei Bedarf miteinander interagieren.

Compose kann dir zum Beispiel dabei helfen, die Service-Abhängigkeiten deiner Anwendung zu erstellen und zu konfigurieren, wie z. B. Datenbanken, Caches oder Webservice-APIs.

Dockerfile

Ein Dockerfile ist ein Textdokument, das Anweisungen zum Erstellen von Docker-Images enthält. Wenn du diese Datei liest, erstellt Docker automatisch neue Images.

Mit dem Befehl docker build wird ein Image aus einer Dockerdatei und einem Kontext erstellt. Dieser Kontext ist eine Reihe von Dateien, die in einem bestimmten Pfad oder unter einer bestimmten URL liegen.

Gib zunächst den folgenden Befehl ein:

docker build

Dadurch wird der gesamte Kontext an den Docker-Daemon gesendet. Um auf eine Dockerdatei in deinem Dateisystem zu verweisen, benutze diesen Befehl:

docker build -f /path/to/a/Dockerfile

Wenn der Build erfolgreich ist, kannst du ein Repository und ein Tag angeben, in dem du das neue Image speichern möchtest:

docker build -t shykes/myapp

Dann führt der Docker-Daemon eine Validierung der Dockerdatei durch. Wenn es ein Problem mit der Syntax gibt, meldet er einen Fehler.

Docker Desktop

Um Docker in deiner Mac-, Linux- oder Windows-Umgebung zu nutzen, kannst du Docker Desktop installieren. Er bietet eine einfache, leicht zu bedienende Oberfläche für die Verwaltung von Containern, Anwendungen und Images auf deinem persönlichen Computer:

Docker Desktop
Docker Desktop

Mit Docker Desktop musst du die Kommandozeile nicht mehr benutzen, um wichtige Aufgaben zu erledigen. Das kann den Entwicklungsworkflow beschleunigen:

Docker Desktop Dashboard
Docker Desktop Dashboard

Außerdem gibt es einen eingebauten Extensions Marketplace, der den Einstieg in die Nutzung von Entwickler-Tools von Drittanbietern erleichtert. Dazu gehört Software zum Debuggen, Testen und Sichern deiner Anwendungen:

Marktplatz für Docker Desktop-Erweiterungen
Docker Desktop Extensions Marketplace

Außerdem ist Docker Desktop für die private Nutzung und für kleine Unternehmen kostenlos. Bedenke jedoch, dass größere Unternehmen ein Abonnement ab 5 US-Dollar pro Monat erwerben müssen.

Docker Hub

Docker Hub ist eine Plattform, auf der du Container-Images finden und teilen kannst. Es ist das größte Repository für Container-Images weltweit, mit Ressourcen von Community-Entwicklern, Open-Source-Projekten und unabhängigen Softwareanbietern (ISV):

Docker Hub Images
Docker Hub Images

Hier sind einige Funktionen, die der Docker Hub bietet:

  • Repositories zum Verschieben und Abrufen von Container-Images
  • Erstelle Teams und Organisationen mit Zugriff auf private Repositories
  • Offizielle Docker-Images
  • Docker Verified Publisher-Images
  • Erstelle Container-Images von GitHub oder Bitbucket und schiebe sie zu Docker Hub
  • Aktionen mit Webhooks auslösen

Um Docker Hub nutzen zu können, musst du dein erstes Repository erstellen. Du musst es nur benennen und seine Sichtbarkeit festlegen:

Erstelle ein Docker Hub Repository
Ein Docker Hub Repository erstellen

Dann kannst du Docker Desktop herunterladen und anfangen, Container-Images aus Docker Hub zu ziehen und zu pushen. Du siehst diese Pushes unter dem neuesten Tag in deinem neuen Repository.

Wofür wird Docker verwendet?

Docker ist vor allem für DevOps und Entwickler gedacht. Mit diesem Tool können Entwickler Anwendungen als portable und leichtgewichtige Container erstellen, anpassen und bereitstellen. Dabei werden alle Abhängigkeiten in eine einzige Einheit gepackt, die auf praktisch jedem Betriebssystem ausgeführt werden kann.

Hier ist ein typischer Anwendungsfall für Docker:

  1. Entwickler schreiben ihren Code lokal und teilen ihn dann mit ihren Teams mithilfe von Docker-Containern.
  2. Sie pushen die Anwendung in eine Testumgebung, in der es einfach ist, automatisierte und manuelle Tests durchzuführen.
  3. Wenn Bugs gefunden werden, beheben die Entwickler sie in der Entwicklungsumgebung. Um die Änderungen zu testen, stellen sie sie in der Testumgebung erneut bereit.
  4. Nachdem die Entwickler den Fehler behoben haben, wird das aktualisierte Image in die Produktionsumgebung übertragen.

Mit diesem Arbeitsablauf kannst du neue Software testen, ohne eine manuelle Installation durchführen zu müssen. Zum Beispiel findest du es vielleicht schwierig und mühsam, einen MySQL-Server einzurichten. Stattdessen kannst du die Docker CLI verwenden, um diese Aufgabe mit nur einem Befehl auszuführen.

Da Docker über eine eigene CLI verfügt, können Anfänger damit den Umgang mit der Kommandozeile lernen. Nachdem du Docker in einer Linux-Umgebung eingerichtet hast, kannst du anfangen, Linux-Befehle zu verwenden. Dann kannst du Systemverwaltungsaufgaben schneller und effizienter durchführen.

Wenn du mit der Entwicklung lokaler, offline betriebener WordPress-Websites beginnen willst, kannst du Docker nutzen, um DevKinsta zu installieren. Unsere Entwicklungssuite ist Docker-basiert und ermöglicht es dir, Websites als einzelne Container zu erstellen und zu verwalten:

Ein Blick in DevKinsta's containerisierte WordPress-Seiten
DevKinsta’s containerisierte WordPress-Sites

Im Vergleich zu anderen lokalen Entwicklungstools verbraucht DevKinsta weniger Ressourcen und bietet gleichzeitig eine nahezu native Leistung. Mit einer DevKinsta-Website auf Docker-Basis kannst du WordPress schnell und sicher entwickeln. Außerdem erleichtert DevKinsta das Versenden von Test-E-Mails und die Durchführung anderer administrativer Aufgaben.

Vor- und Nachteile der Verwendung von Docker

Jetzt, wo du die Kernkomponenten von Docker kennst, wollen wir die wichtigsten Vor- und Nachteile diskutieren. Dann kannst du entscheiden, ob es für die Verwaltung deiner Softwareanwendungen nützlich ist.

Vorteile

Als Entwickler/in kann ein Teil deiner Arbeit mühsam und repetitiv werden, wenn du sie manuell ausführst. Mit Docker-Containern kannst du die Automatisierung dieser Aufgaben planen. Die Verwendung von Cron-Jobs kann deine Arbeitsbelastung erheblich reduzieren und deine Zeit optimieren.

Außerdem ist Docker sehr portabel. Es ermöglicht jedem Mitglied deines Entwicklungsteams, an den Anwendungen zu arbeiten, selbst auf unterschiedlichen Servern, Maschinen oder Betriebssystemen. Auf diese Weise lassen sich viele Probleme vermeiden, die durch Plattforminkompatibilitäten entstehen.

Im Vergleich zu VMs können Docker-Container mehr Platz sparen. Obwohl Docker und VMs ähnlich funktionieren, ist Docker viel schlanker.

Außerdem hat Docker eine starke Community. Wenn du an Veranstaltungen der Docker-Community teilnimmst, kannst du dich sowohl persönlich als auch online mit anderen Docker-Nutzern treffen und austauschen:

Die Homepage der Docker Community
Docker Community

Du kannst auch in den umfangreichen Community-Foren von Docker stöbern. Wenn du ein Anfänger bist, können dir diese Diskussionen helfen, Ratschläge für die Nutzung dieser Plattform zu erhalten.

Nachteile

Wie wir bereits erwähnt haben, kann Docker effizienter sein als VMs. Allerdings ist die Ausführung von Anwendungen auf einem physischen Server in der Regel deutlich schneller.

Docker kann auch mit einer steilen Lernkurve verbunden sein. Es ist nicht darauf ausgelegt, Anwendungen mit einer grafischen Benutzeroberfläche (GUI) auszuführen. Das bedeutet, dass du die Kommandozeile lernen musst, was für Anfänger/innen eine Herausforderung sein kann.

Und schließlich laufen Docker-Container auf dem Betriebssystem des Hosts. Wenn sich in diesen Containern bösartige Software versteckt, kann der Host-Rechner gefährdet werden.

Wie du mit Docker anfängst

Um mit Docker zu beginnen, musst du die Hauptwebsite besuchen. Lade dann die kompatible Version für dein Betriebssystem herunter.

Wenn du einen Mac-Computer hast, musst du die Docker-Version für einen Intel- oder Apple-Chip auswählen. Es gibt auch Optionen für Windows- und Linux-Nutzer.

Sobald du die heruntergeladene Datei geöffnet hast, wird Docker Desktop auf deinem Computer installiert. Als nächstes öffnest du den Docker Hub und erstellst ein neues Konto:

Ein Konto bei Docker erstellen
Ein Konto bei Docker erstellen

Jetzt kannst du Docker Desktop öffnen und dich anmelden. Öffne dann deine Kommandozeile oder dein Bash-Fenster und führe diesen Befehl aus:

docker run -d -p 80:80 docker/getting-started

Sobald du das getan hast, siehst du einen neuen Container in deinem Docker Desktop Dashboard. Sein Name wird nach dem Zufallsprinzip für dein Konto generiert:

Erstelle einen neuen Docker-Container
Neuer Docker-Container

Du wirst auch ein neues Docker-Image haben. Wenn du zur Registerkarte Images navigierst, siehst du, dass ein Docker/getting-started Image verwendet wird:

Neues Docker-Image
Neues Docker-Image

Jetzt hast du alles, was du brauchst, um mit der Verwaltung deiner lokalen Container zu beginnen!

Zusammenfassung

Wenn du mehrere Anwendungen verwalten musst, kann Docker ein effektives Werkzeug sein, um sie unabhängig voneinander zu organisieren. Da Docker mit Containern arbeitet, kannst du jede Anwendung ohne das Risiko von Konflikten mit Programmiersprachen, Bibliotheken oder Frameworks entwickeln.

Obwohl Docker oft effizienter ist als eine virtuelle Maschine (VM), kann die Arbeit auf einem physischen Server schneller sein. Da Docker außerdem auf einer Befehlszeilenschnittstelle basiert, ist es für absolute Anfänger/innen nicht unbedingt die beste Wahl.

Als WordPress-Entwickler/in wirst du wahrscheinlich schnell lokale Testumgebungen erstellen müssen. Mit DevKinsta kannst du Docker-basierte WordPress-Sites erstellen. Dann kannst du ohne Konflikte mit der Entwicklung von Themes und Plugins beginnen!