===== Docker =====
==== Kurzfassung ====
* Docker ist eine Plattform zur Containerisierung von Anwendungen.
* Container bündeln Code, Laufzeitumgebung und Abhängigkeiten in portable Images.
* Der Docker-Daemon verwaltet Container-Lebenszyklen und Ressourcen auf dem Host.
{{ :bilder:docker.jpg?600 | }}
Quelle: https://www.opc-router.de/was-ist-docker/
==== Schlüsselmerkmale ====
* Isolation durch Kernel-Namespaces und Cgroups.
* Wiederholbare Builds via Dockerfile.
* Image-Verteilung über private oder öffentliche Registries.
* Schnelles Provisioning dank leichtgewichtiger Container statt VMs.
==== Architektur ====
* **Docker Engine** – Daemon (dockerd) + REST API + CLI.
* **Images** – Schichtenbasiert (Layer), unveränderlich, versionierbar.
* **Container** – Laufende Instanz eines Images mit writable Layer.
* **Registry** – Speicherort für Images (Docker Hub, Harbor, ECR).
==== Anwendungsfälle ====
* Lokale Entwicklung mit identischen Umgebungen wie in Produktion.
* Microservices-Bereitstellung und skalierbare CI/CD-Pipelines.
* Tests isolierter Komponenten mit reproduzierbaren Ständen.
* Legacy-Anwendungen kapseln, um Migrationen zu erleichtern.
==== Vorteile & Grenzen ====
* **Vorteile** – Portabilität, schnelle Bereitstellung, geringerer Ressourcenverbrauch.
* **Grenzen** – Gemeinsamer Kernel, daher geringere Isolation als VMs; erfordert Sicherheits-Hardening.
* **Best Practices** – Least-Privilege, signierte Images, regelmäßige Scans.
==== cgroup Grundlagen für Docker ====
* Control Groups (cgroups) isolieren und limitieren Ressourcen wie CPU, RAM oder I/O für Container.
* Moderne Distributionen nutzen meist cgroup v2; Docker kann beide Versionen verwenden, bevorzugt jedoch einheitliche v2-Hierarchien.
* Systemd-basierte Hosts mounten cgroups unter /sys/fs/cgroup; dort legt Docker pro Container eigene Unterbäume an.
**Prüfen, welche Version aktiv ist:**
stat -fc %T /sys/fs/cgroup
Ausgabe cgroup2fs=v2, ansonsten Mischbetrieb oder v1.
**Docker-Info zeigt den aktiven Modus:**
docker info --format '{{.CgroupDriver}} / {{.CgroupVersion}}'
**Für ressourcengesteuerte Container Limits setzen, z. B.:
docker run --memory=512m --cpuset-cpus=0-1 nginx
==== Siehe auch ====
* [[docker:docker_installation|Docker Installation]]
* [[docker:deployment_pipelines|Deployment Pipelines]]
* [[docker:kubernetes_einstieg|Kubernetes Einstieg]]
{{tag>docker container einführung}}