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