# Open Container Initiative Image Format Specification This specification defines an OCI Image, consisting of a [manifest](manifest.md), a set of [filesystem layers](layer.md), and a [configuration](config.md). The goal of this specification is to enable the creation of interoperable tools for building, transporting, and preparing a container image to run. ## Table of Contents - [Introduction](spec.md) - [Notational Conventions](#notational-conventions) - [Overview](#overview) - [Understanding the Specification](#understanding-the-specification) - [Media Types](media-types.md) - [Content Descriptors](descriptor.md) - [Image Layout](image-layout.md) - [Image Manifest](manifest.md) - [Image Manifest List](manifest-list.md) - [Filesystem Layers](layer.md) - [Image Configuration](config.md) - [Canonicalization](canonicalization.md) # Notational Conventions The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" are to be interpreted as described in [RFC 2119](http://tools.ietf.org/html/rfc2119) (Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997). The key words "unspecified", "undefined", and "implementation-defined" are to be interpreted as described in the [rationale for the C99 standard][c99-unspecified]. # Overview At a high level the image manifest contains metadata about the contents and dependencies of the image including the content-addressable identity of one or more [filesystem layer changeset](layer.md) archives that will be unpacked to make up the final runnable filesystem. The image configuration includes information such as application arguments, environments, etc. ![](img/build-diagram.png) Once built the OCI Image can then be discovered by name, downloaded, verified by hash, trusted through a signature, and unpacked into an [OCI Runtime Bundle](https://github.com/opencontainers/runtime-spec/blob/master/bundle.md). ![](img/run-diagram.png) ## Understanding the Specification The [OCI Image Media Types](media-types.md) document is a starting point to understanding the overall structure of the specification. The high-level components of the spec include: * An archival format for container images, consisting of an [image manifest](manifest.md), an [image layout](image-layout.md), a set of [filesystem layers](layer.md), and [image configuration](config.md) (base OCI layer) * A [process of referencing container images by a cryptographic hash of their content](descriptor.md) (base OCI layer) * A format for [storing CAS blobs and references to them](image-layout.md) (optional OCI layer) * Signatures that are based on signing image content address (optional OCI layer) * Naming that is federated based on DNS and can be delegated (optional OCI layer) [c99-unspecified]: http://www.open-std.org/jtc1/sc22/wg14/www/C99RationaleV5.10.pdf#page=18