01506b
% CONTAINERS-REGISTRIES.D(5) Registries.d Man Page
01506b
% Miloslav Trmač
01506b
% August 2016
01506b
01506b
# NAME
01506b
containers-registries.d - Directory for various registries configurations
01506b
01506b
# DESCRIPTION
01506b
01506b
The registries configuration directory contains configuration for various registries
01506b
(servers storing remote container images), and for content stored in them,
01506b
so that the configuration does not have to be provided in command-line options over and over for every command,
01506b
and so that it can be shared by all users of containers/image.
01506b
01506b
By default (unless overridden at compile-time), the registries configuration directory is `/etc/containers/registries.d`;
01506b
applications may allow using a different directory instead.
01506b
01506b
## Directory Structure
01506b
01506b
The directory may contain any number of files with the extension `.yaml`,
01506b
each using the YAML format.  Other than the mandatory extension, names of the files
01506b
don’t matter.
01506b
01506b
The contents of these files are merged together; to have a well-defined and easy to understand
01506b
behavior, there can be only one configuration section describing a single namespace within a registry
01506b
(in particular there can be at most one one `default-docker` section across all files,
01506b
and there can be at most one instance of any key under the the `docker` section;
01506b
these sections are documented later).
01506b
01506b
Thus, it is forbidden to have two conflicting configurations for a single registry or scope,
01506b
and it is also forbidden to split a configuration for a single registry or scope across
01506b
more than one file (even if they are not semantically in conflict).
01506b
01506b
## Registries, Scopes and Search Order
01506b
01506b
Each YAML file must contain a “YAML mapping” (key-value pairs).  Two top-level keys are defined:
01506b
01506b
- `default-docker` is the _configuration section_ (as documented below)
01506b
   for registries implementing "Docker Registry HTTP API V2".
01506b
01506b
   This key is optional.
01506b
01506b
- `docker` is a mapping, using individual registries implementing "Docker Registry HTTP API V2",
01506b
   or namespaces and individual images within these registries, as keys;
01506b
   the value assigned to any such key is a _configuration section_.
01506b
01506b
   This key is optional.
01506b
01506b
   Scopes matching individual images are named Docker references *in the fully expanded form*, either
01506b
   using a tag or digest. For example, `docker.io/library/busybox:latest` (*not* `busybox:latest`).
01506b
01506b
   More general scopes are prefixes of individual-image scopes, and specify a repository (by omitting the tag or digest),
01506b
   a repository namespace, or a registry host (and a port if it differs from the default).
01506b
01506b
   Note that if a registry is accessed using a hostname+port configuration, the port-less hostname
01506b
   is _not_ used as parent scope.
01506b
01506b
When searching for a configuration to apply for an individual container image, only
01506b
the configuration for the most-precisely matching scope is used; configuration using
01506b
more general scopes is ignored.  For example, if _any_ configuration exists for
01506b
`docker.io/library/busybox`, the configuration for `docker.io` is ignored
01506b
(even if some element of the configuration is defined for `docker.io` and not for `docker.io/library/busybox`).
01506b
01506b
## Individual Configuration Sections
01506b
01506b
A single configuration section is selected for a container image using the process
01506b
described above.  The configuration section is a YAML mapping, with the following keys:
01506b
01506b
- `sigstore-staging` defines an URL of of the signature storage, used for editing it (adding or deleting signatures).
01506b
01506b
   This key is optional; if it is missing, `sigstore` below is used.
01506b
01506b
- `sigstore` defines an URL of the signature storage.
01506b
   This URL is used for reading existing signatures,
01506b
   and if `sigstore-staging` does not exist, also for adding or removing them.
01506b
01506b
   This key is optional; if it is missing, no signature storage is defined (no signatures
01506b
   are download along with images, adding new signatures is possible only if `sigstore-staging` is defined).
01506b
01506b
## Examples
01506b
01506b
### Using Containers from Various Origins
01506b
01506b
The following demonstrates how to to consume and run images from various registries and namespaces:
01506b
01506b
```yaml
01506b
docker:
01506b
    registry.database-supplier.com:
01506b
        sigstore: https://sigstore.database-supplier.com
01506b
    distribution.great-middleware.org:
01506b
        sigstore: https://security-team.great-middleware.org/sigstore
01506b
    docker.io/web-framework:
01506b
        sigstore: https://sigstore.web-framework.io:8080
01506b
```
01506b
01506b
### Developing and Signing Containers, Staging Signatures
01506b
01506b
For developers in `example.com`:
01506b
01506b
- Consume most container images using the public servers also used by clients.
01506b
- Use a separate sigure storage for an container images in a namespace corresponding to the developers' department, with a staging storage used before publishing signatures.
01506b
- Craft an individual exception for a single branch a specific developer is working on locally.
01506b
01506b
```yaml
01506b
docker:
01506b
    registry.example.com:
01506b
        sigstore: https://registry-sigstore.example.com
01506b
    registry.example.com/mydepartment:
01506b
        sigstore: https://sigstore.mydepartment.example.com
01506b
        sigstore-staging: file:///mnt/mydepartment/sigstore-staging
01506b
    registry.example.com/mydepartment/myproject:mybranch:
01506b
        sigstore: http://localhost:4242/sigstore
01506b
        sigstore-staging: file:///home/useraccount/webroot/sigstore
01506b
```
01506b
01506b
### A Global Default
01506b
01506b
If a company publishes its products using a different domain, and different registry hostname for each of them, it is still possible to use a single signature storage server
01506b
without listing each domain individually. This is expected to rarely happen, usually only for staging new signatures.
01506b
01506b
```yaml
01506b
default-docker:
01506b
    sigstore-staging: file:///mnt/company/common-sigstore-staging
01506b
```
01506b
01506b
# AUTHORS
01506b
01506b
Miloslav Trmač <mitr@redhat.com>