The Open Container Initiative (OCI) is a Linux Foundation project founded in June 2015 by Docker, CoreOS, and others to prevent the container ecosystem from fragmenting around proprietary formats. It maintains three interlocking specifications that together describe the complete lifecycle of a container: how an image is structured, how it is transported, and how it is run. Any tool that conforms to these specs — builder, registry, runtime — is interoperable with any other conformant tool, which is why an image built by buildah can be pushed to a registry running Harbor, pulled by containerd, and executed by a runtime written in Rust.
The Image Specification defines the on-disk and on-wire format of a container image. An image is a Merkle DAG of content-addressed blobs: a manifest (a JSON document listing the image’s layers and config by their SHA-256 digests), a config blob (containing runtime defaults like entrypoint, environment variables, and architecture), and one or more layer blobs (filesystem changesets stored as tarballs, optionally compressed with gzip or zstd). Every component is addressed by its digest, so the manifest’s own digest serves as an immutable, content-addressable identifier for the entire image — the same digest always refers to exactly the same content, everywhere. Image v1.1 (2024) extended the format with artifacts: arbitrary blobs — SBOMs, signatures, attestations, Helm charts — can be stored in the same registry using the same manifest structure, with a subject field pointing at the image they annotate, and a referrers API in the distribution spec for querying them.
The Runtime Specification defines what happens when an OCI image is unpacked into a filesystem bundle and handed to a runtime. It specifies the config.json format that describes the container’s root filesystem, namespaces, cgroups, capabilities, mounts, and seccomp/apparmor profiles. runc is the OCI reference runtime implementation, donated by Docker at OCI’s founding, and remains the low-level execution engine underneath containerd and CRI-O on most Kubernetes nodes. The Distribution Specification standardises the HTTP API that registries expose for pushing and pulling content — the v2 registry API originally developed by Docker — ensuring that any OCI-conformant client can speak to any OCI-conformant registry. Together the three specs form the substrate on which the entire cloud-native container ecosystem — Kubernetes, CoCo, composefs image layer deduplication, and image-based Linux delivery via bootc — is built.
