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