Text size
Auf meinem Radar6 Min. Lesezeit

Docker, Podman, Container: Was ist der Unterschied?

Was tatsächlich Ihre Container und die Docker Desktop Alternativen läuft.

Docker, Podman, containerd: what's the difference?
KI-generierte Illustration

Wenn man "Container" sagt, meint man oft "Docker". Aber Docker ist nur ein Werkzeug in einem Stapel von Schichten, und an vielen Orten, Kubernetes eingeschlossen, ist Docker überhaupt nicht mehr beteiligt.

Zu verstehen, was Ihre Container tatsächlich ausführt, hilft beim Debuggen, bei der Auswahl von Tools und beim Sinnvermitteln von Schlagzeilen wie "Kubernetes entfernt Docker-Unterstützung" (was 2020 beängstigend klang und sich als meist harmlos erwies).

Der Behälterstapel

Von unten nach oben:

1. Die Der Linux-Kernel. Container sind keine Kernelfunktion, die "Container" genannt wird. Sie sind eine Kombination von Namenräume (die Isolierung dessen, was ein Prozess sehen kann: Prozesse, Netzwerk, Dateien, Benutzer) und cGruppen (Beschränkung der Nutzung: CPU, Speicher, E/A). Jeder Container-Runtime verwendet diese.

2. Die Laufzeit auf niedrigem Niveau (OCI-Laufzeit). Ein kleines Programm, das den Container-Prozess mit den richtigen Namespaces und cgroups erstellt. Die Standard-Funktion ist Schleunige- Ich weiß . Alternativen sind Schrumpf (schneller, in C geschrieben), gVisor (zusätzliche Isolierung mit einem User-Space-Kernel) und Kata-Gehäuse (jeder Behälter in einer leichten VM).

3. Die Hochrangige Laufzeit. Verwaltet Bilder, Speicherung, Netzwerk und den Lebenszyklus von Containern und ruft die Low-Level-Runtime an. Die wichtigsten sind Behälter (ein CNCF-Projekt) und CRI-O (speziell für Kubernetes erstellt).

4. Die Werkzeuge und Schnittstellen. Mit welchen Menschen und Plattformen sprechen: Docker CLI und Motor, - Ich bin nicht ..., Nerdctl, und Kubernetes" Schnüffeln (durch die Schnittstelle für die Ausführung von Containern, CRI).

Das alles wird durch OCI-Standards (Open Container Initiative): ein Standardbildformat und eine Standardlaufzeit-Spezifikation. Deshalb läuft ein Bild, das mit Docker erstellt wurde, mit Podman, containerd oder CRI-O.

Ein Container ist nur ein Linux-Prozess mit Blinkern und einem Budget. Alles andere dreht sich um diese Idee.

Was Kubernetes tatsächlich verwendet

Kubernetes spricht mit Laufzeiten über den CRI. Die Docker Engine implementierte CRI nie direkt, also benutzte Kubernetes einen Adapter namens Schleim- Ich weiß . In Kubernetes 1.24 (2022) wurde dockershim entfernt.

Was das in der Praxis bedeutete:

  • Cluster verwenden jetzt Behälter oder CRI-O - Ich bin direkt hier. Die meisten verwalteten Kubernetes-Dienste (EKS, AKS, GKE) verwenden Container.
  • Bilder, die mit Docker erstellt wurden, funktionieren immer noch überall, weil es sich um Standard-OCI-Bilder handelt.
  • Was nicht mehr funktionierte: Dinge, die auf die Docker-Socket auf Knoten angewiesen waren, wie einige alte Überwachungstools oder "Docker-in-Docker" in CI.

Auf einem Knoten verwenden Krise die Behälter statt docker ps:

crictl ps
crictl logs <container-id>
crictl images

Docker

Docker Container wurden populär und bleiben das am häufigsten verwendete Entwickler-Tool für Container: Bilder erstellen, Container lokal ausführen, Docker Compose für Multi-Container-Setups. Die Docker Engine selbst verwendet Container darunter.

Docker-Desktop ist die verpackte App für macOS und Windows, die eine Linux-VM im Hintergrund ausführt. Seit 2021 erfordert sie eine Bezahlte Abonnement für größere Unternehmen (mehr als 250 Mitarbeiter oder mehr als 10 Millionen US-Dollar Jahresumsatz). Das hat viele Organisationen dazu veranlasst, sich mit Alternativen auseinanderzusetzen.

Wurzellos mit Podman

- Ich bin nicht ..., von Red Hat, ist eine Docker-kompatible Alternative mit einigen wichtigen Unterschieden:

  • Daemonlos: kein langfristiger Hintergrunddienst mit Root-Rechten. Jeder Container ist ein Kind-Prozess des Befehls, der ihn gestartet hat.
  • Rootlos standardmäßig: Container laufen wie normaler Benutzer, was das Risiko verringert, wenn ein Container kompromittiert wird.
  • CLI mit Docker-Kompatibilität: alias docker=podman Funktioniert für die meisten Befehle.
  • Pflanzen: kann Container wie Kubernetes-Pods gruppieren und Kubernetes YAML aus laufenden Containern erzeugen (podman kube generate).
  • Quadlet: Container als Systemd-Dienste ausführen, gut mit Linux-Servern integriert.
  • Podman Desktop: eine kostenlose grafische Benutzeroberfläche für macOS, Windows und Linux.
podman run --rm -p 8080:80 docker.io/library/nginx:1.27

Alternativen zu Docker Desktop auf dem Mac

Wenn Sie Container auf macOS ohne Docker Desktop benötigen:

  • OrbStack: schnell, leicht, sehr beliebt bei Mac-Entwicklern. Kommerziell für geschäftliche Zwecke, aber oft günstiger als Docker Desktop.
  • Schnupfen: Open Source, Befehlszeile, basiert auf Lima. Funktioniert mit der Docker CLI oder containerd/nerdctl.
  • - Das ist ein Schritt weiter .: Open Source (SUSE), enthält ein lokales Kubernetes (k3s) und ermöglicht die Auswahl zwischen Containerd oder Docker Engine.
  • Podman Desktop: Open Source, mit Podman darunter.
  • Apple hat auch seine eigene Open-Source- Behälter Werkzeug zum Ausführen von Linux-Containern auf Apple Silicon Macs.

Alle betreiben eine kleine Linux-VM, weil Container einen Linux-Kernel benötigen.

Welche sollten Sie verwenden?

  • Entwickler-Laptop: Docker Desktop, wenn die Lizenzierung für Sie in Ordnung ist; ansonsten OrbStack, Colima, Rancher Desktop oder Podman Desktop.
  • Linux-Server, die Container direkt ausführenPodman mit Quadlet ist sehr nett, besonders für rootlose Setups. Die Docker Engine funktioniert auch gut.
  • Kubernetes-Knoten: Behälter (oder CRI-O). Das wählen Sie bei Managed Services normalerweise nicht.
  • CI-Bild baut sich auf: BuildKit (über Docker oder standalone), Buildah oder Kaniko-Stil-Tools für das Erstellen ohne privilegierten Daemon.

Was ist die Lektion?

"Docker" ist eine Marke, ein Werkzeug und ein Unternehmen. Container sind eine Linux-Funktion plus offene Standards. Sobald Sie die Schichten sehen, werden die Entscheidungen einfacher: Verwenden Sie das Werkzeug, das Sie mögen, um OCI-Bilder zu erstellen, und wissen Sie, dass Kubernetes sie mit Containerd oder CRI-O ausführen wird, egal.

Meine Meinung: Lernen Sie einmal die Schichten, und Sie werden nie wieder von einer "Docker ist tot"-Schlagzeile verwirrt.

Desly