Ein OCI-Standard ist eine Spezifikation der Open Container Initiative, einer 2015 gegründeten Organisation unter dem Dach der Linux Foundation. Ihr Zweck ist, Container-Technologie herstellerneutral zu definieren, damit Images und Laufzeitumgebungen austauschbar werden.
Drei Spezifikationen
- Image-Spezifikation: legt fest, wie ein Image aufgebaut ist – Dateisystem-Schichten, Konfiguration und Manifest, dazu die Index-Datei für Multi-Arch-Images. Ein Image, das dieser Spezifikation folgt, lässt sich von jeder konformen Laufzeitumgebung starten.
- Runtime-Spezifikation: beschreibt, wie ein Container ausgeführt wird – welche Namespaces, Cgroups, Mounts und Umgebung gesetzt werden, und welche Lebenszyklus-Hooks es gibt. Sie ist die Schnittstelle zwischen Container-Manager und Low-Level-Laufzeit (etwa runc oder crun).
- Distribution-Spezifikation: definiert die HTTP-API von Registries, also wie Images über das Netz verteilt, geprüft und authentifiziert werden.
Warum der Standard praktisch wichtig ist
Vorher gab es ein Nebeneinander inkompatibler Formate. Heute gilt:
- Ein Image, das mit Docker gebaut wurde, läuft ohne Anpassung unter Podman, in Kubernetes oder auf einer anderen konformen Laufzeitumgebung.
- Werkzeuge lassen sich mischen: Buildah baut, Skopeo transportiert, containerd führt aus.
- Registries sind austauschbar, weil alle dieselbe API sprechen.
Ein wiederkehrendes Missverständnis betrifft den Umfang: OCI regelt nicht, wie Container orchestriert werden. Skalierung, Netzwerkregeln, Ausrollstrategien und Speicherverwaltung sind Sache der Plattform – Kubernetes definiert sie über CRDs und Controller, nicht über die OCI-Spezifikation. Ebenso sagt OCI nichts über Sicherheitsrichtlinien; dafür gibt es ergänzende Standards wie Seccomp-Profile, AppArmor und Linux-Capabilities.
Image-Index und Plattformen
Multi-Arch-Images sind über einen Image Index gelöst: Ein Manifest verweist auf je ein Plattformmanifest für linux/amd64, linux/arm64 und so weiter. Eine Registry liefert dann beim Ziehen automatisch die passende Variante – deshalb funktioniert docker pull nginx auf x86-Servern und auf ARM-Systemen wie dem Raspberry Pi gleichermaßen, ohne Plattformangabe.
Verwandte Grundlagen: Container, Docker-Image, Registry, Kubernetes.