Project: Distribution (Provisioning / Container Registry)
File: _index.md

description: Explains how to use storage drivers keywords: registry, on-prem, images, tags, repository, distribution, storage drivers, advanced title: Registry storage driver This document describes the registry storage driver model, implementation, and explains how to contribute new storage drivers. This storage driver package comes bundled with several drivers: : A temporary storage driver using a local inmemory map. This exists solely for reference and testing. : A local storage driver configured to use a directory tree in the local filesystem. : A driver storing objects in an Amazon Simple Storage Service (S3) bucket. : A driver storing objects in . : A driver storing objects in a bucket. oss: NO LONGER SUPPORTED swift: NO LONGER SUPPORTED The storage driver API is designed to model a filesystem-like key/value storage in a manner abstract enough to support a range of drivers from the local filesystem to Amazon S3 or other distributed object storage systems. Storage drivers are required to implement the `storagedriver.StorageDriver` interface provided in `storagedriver.go`, which includes methods for reading, writing, and deleting content, as well as listing child objects of a specified prefix key. Storage drivers are intended to be written in Go, providing compile-time validation of the `storagedriver.StorageDriver` interface. The preferred method of selecting a storage driver is using the `StorageDriverFactory` interface in the `storagedriver/factory` package. These factories provide a common interface for constructing storage drivers with a parameters map. The factory model is based on the and methods in the builtin package. Storage driver factories may be registered by name using the `factory.Register` method, and then later invoked by calling `factory.Create` with a driver name and parameters map. If no such storage driver can be found, `factory.Create` returns an `InvalidStorageDriverError`. New storage drivers are not currently being accepted. See <https://github.com/distribution/distribution/issues/3988> for discussion. There are forks of this repo that implement custom storage drivers. These are not supported by the OCI distribution project. The known forks are: Storj DCS: <https://github.com/storj/docker-registry> HuaweiCloud OBS: <https://github.com/setoru/distribution/tree/obs> us3: <https://github.com/lambertxiao/distribution/tree/main> Baidu BOS: <https://github.com/dolfly/distribution/tree/bos> HDFS: <https://github.com/haosdent/distribution/tree/master> To create a valid storage driver, one must implement the `storagedriver.StorageDriver` interface and make sure to expose this driver via the factory system. Storage drivers should call `factory.Register` with their driver name in an `init` method, allowing callers of `factory.New` to construct instances of this driver without requiring modification of imports throughout the codebase. Storage driver test suites are provided in `storagedriver/testsuites/testsuites.go` and may be used for any storage driver written in Go. Tests can be registered using the `RegisterSuite` function, which run the same set of tests for any registered drivers.