Docker-Logo-2013

Docker – Einführung in die Welt der Container

Von am 22.09.2023

Die Welt der Softwareentwicklung und IT-Infrastruktur hat sich in den letzten Jahren rasant weiterentwickelt. Eine der spannendsten Technologien, die diese Veränderung vor allem im Bereich Development Operations (Dev-Ops) vorangetrieben hat, ist Docker. Dabei handelt es sich um eine Plattform, die die Art und Weise, wie wir Anwendungen entwickeln, bereitstellen und betreiben, grundlegend verändert hat. In diesem Artikel gibts es einen kurzen Einblick in Docker und der Zugrunde liegenden Containervirtualisierung.

Historie – Software Entwicklungs Prozess

Was ist Docker?

Docker ist eine Containervirtualisierungsplattform, die es Entwicklern ermöglicht, Anwendungen und deren Abhängigkeiten in sogenannten Containern zu verpacken. Ein Container ist ein modularer Technologie Stack, der alles enthält, was eine Anwendung benötigt, um ordnungsgemäß zu funktionieren. Neben der eigentlichen Linux-Laufzeitumgebung, enthält er u.a. sämtliche Bibliotheken und der nötigen Konfiguration für die individuelle Anwendung. Docker-Container sind plattformunabhängig und können auf jedem System ausgeführt werden, das Docker unterstützt, unabhängig von der zugrunde liegenden Infrastruktur.

Container Architektur

Warum Docker?

Docker bietet eine Reihe von Vorteilen, die die Softwareentwicklung und Bereitstellung erheblich erleichtern:

  1. Portabilität: Docker-Container sind konsistent und überall ausführbar, sei es auf der lokalen Entwicklungsumgebung, Testumgebungen oder in der Cloud.
  2. Isolation: Jeder Container ist isoliert, was bedeutet, dass Anwendungen und deren Abhängigkeiten in einer geschützten Umgebung ausgeführt werden.
  3. Skalierbarkeit: Docker erleichtert das Skalieren von Anwendungen, indem neue Container schnell erstellt und gestartet werden können, um den steigenden Anforderungen gerecht zu werden.
  4. Effizienz: Container sind ressourceneffizient und starten in Sekundenschnelle, was die Entwicklungs- und Bereitstellungsprozesse beschleunigt.
  5. DevOps-Integration: Docker passt gut zu DevOps-Praktiken und ermöglicht die Automatisierung von Tests, Integration und Bereitstellung (Continuous Integration und Delivery)

„A container is an abstraction at the application layer that packages code and dependencies together. Instead of virtualizing the entire physical machine, containers virtualize the host operating system only.“

Docker Inc.

Wie funktioniert Docker?

Docker basiert auf der sogenannten Docker-Engine, um Container zu erstellen, zu verwalten und auszuführen. Die Docker-Engine umfasst den Docker-Daemon, der auf dem Host-System läuft, sowie die Docker-CLI, mit der Entwickler und Administratoren mit den Containern interagieren können.

Ein Docker-Image basiert auf einem Linux-Image und ist die Grundlage für die Erstellung von Containern. Ein Image ist eine schreibgeschützte Vorlage, die alle Anwendungsdateien und -abhängigkeiten enthält. Container werden aus diesen Images erstellt und können gestartet, gestoppt, verschoben und gelöscht werden.

Vor- und Nachteile

Docker und virtuelle Maschinen (VMs) sind zwei unterschiedliche Ansätze zur Bereitstellung von Anwendungen und Ressourcenisolierung in einer virtualisierten Umgebung. Jede Technologie hat ihre eigenen Vor- und Nachteile, die je nach den spezifischen Anforderungen und Zielen einer Anwendung oder eines Projekts variieren können. Hier sind einige der wichtigsten Vor- und Nachteile von Docker im Vergleich zu VMs:

Die Containervirtualisierung bietet folgende Vorteile:

  • Effizienz & Ressourcen: Docker-Container teilen sich den Kernel des Host-Betriebssystems und sind daher in der Regel ressourcenschonender als VMs. Sie starten schneller und verbrauchen weniger Speicherplatz.
  • Schnellere Bereitstellung: Docker-Container können in Sekunden gestartet werden, während VMs in der Regel mehr Zeit benötigen, um gestartet zu werden.
  • Portabilität: Docker-Container sind in der Regel sehr fexibel und modular und können leicht zwischen verschiedenen Umgebungen verschoben werden, solange diese Docker-Engine unterstützen. Dies vereinfacht die Entwicklung und Bereitstellung von Anwendungen.
  • Isolation: Docker bietet eine gewisse Isolation zwischen Containern, was dazu beiträgt, Konflikte zwischen Anwendungen zu vermeiden. Allerdings ist die Isolation nicht so stark wie bei VMs.
  • Ökosystem & Community: Docker hat ein reichhaltiges Ökosystem von vorgefertigten Images und Tools, die die Entwicklung und Bereitstellung von Anwendungen beschleunigen. Zudem ist die Community mittlerweile sehr groß und unterstützt gerne.

Jedoch hat Docker auch folgende Nachteile gegenüber VM’s

  • Sicherheit: Docker-Container teilen sich den Kernel des Host-Betriebssystems, was bedeutet, dass sie nicht so stark isoliert sind wie VMs. Dies kann zu Sicherheitsproblemen führen, wenn Container unsicher konfiguriert sind.
  • Variation von Betriebssystemen: Docker ist in der Regel auf Anwendungen beschränkt, die das gleiche Betriebssystem (Linux) verwenden. VMs können verschiedene Betriebssysteme innerhalb desselben Hosts ausführen.
  • Komplexere Anpassung: Das Anpassen von Docker-Containern kann komplexer sein als das Anpassen von VMs, insbesondere wenn spezielle Kernel-Module oder Hardware-Zugriff erforderlich sind.

Anwendungsfälle für Docker

Docker findet in einer Vielzahl von Anwendungsfällen Verwendung:

  1. Microservices-Architekturen: Docker erleichtert die Implementierung von Microservices, indem jede Komponente in einem eigenen Container isoliert wird.
  2. Continuous Integration/Continuous Deployment (CI/CD): Docker ermöglicht die Erstellung von CI/CD-Pipelines, um Anwendungen effizienter und zuverlässiger bereitzustellen.
  3. Testumgebungen: Entwickler können problemlos unterschiedliche Testumgebungen erstellen und replizieren.
  4. Skalierbare Webanwendungen: Docker ermöglicht das einfache Hinzufügen oder Entfernen von Anwendungskomponenten je nach Bedarf.

Ökosystem

Docker besitzt mittlerweile ein ausgiebiges Ökosystem welches hier im Groben beschrieben wird:

  • Docker Desktop (one-click installer)
    • Docker Engine: Benutzerschnittstelle (Client-Server Anwendung & CLI)
    • Docker Compose (für muli-container Applikationen als YAML file)
    • Docker Buildx (Images erstellen)
  • Docker Hub: Bibliothek und Verzeichnisvon Images
  • Docker Swarm, Kubernetes:multiple Host support

Fazit

Docker hat die Art und Weise, wie wir Software entwickeln und bereitstellen, grundlegend verändert. Die Fähigkeit, Anwendungen in Containern zu verpacken, bietet Portabilität, Skalierbarkeit und Isolation, die in der heutigen schnelllebigen Welt der Softwareentwicklung von entscheidender Bedeutung sind.

Quellen

The comments are closed.