OCI

OCI (Open Container Initiative) — стандарты контейнеров. Родился в 2015 после Docker vs rkt войн — Docker пожертвовал спеки. Теперь все runtime и image (Docker, Podman, containerd, K8s) совместимы через OCI.

Три спецификации

OCI Image Manifest

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.oci.image.manifest.v1+json",
  "config": {
    "mediaType": "application/vnd.oci.image.config.v1+json",
    "digest": "sha256:...", "size": 1234
  },
  "layers": [
    {"mediaType":"application/vnd.oci.image.layer.v1.tar+gzip",
     "digest":"sha256:...", "size":5000000}
  ]
}

Runtime Bundle

bundle/
├── config.json          # OCI runtime-spec
└── rootfs/              # распакованный образ

Registry API

GET  /v2/                             # ping
GET  /v2/library/alpine/manifests/3.19
GET  /v2/library/alpine/blobs/sha256:...
POST /v2/library/alpine/blobs/uploads/

Один API — работают все: Docker Hub, ghcr.io, quay.io, ECR, GAR, Harbor.

Multi-arch (index)

{"manifests":[
  {"digest":"...","platform":{"os":"linux","architecture":"amd64"}},
  {"digest":"...","platform":{"os":"linux","architecture":"arm64"}}
]}

OCI artifacts

Registry — не только образы. Helm chart, WASM-модули, SBOM, cosign signatures. Всё OCI blobs с другим mediaType.

Runtime-имплементации

См. также

← на главную