bb3e91
% CONTAINERS-TRANSPORTS 5 Containers Transports Man Page
bb3e91
% Valentin Rothberg
bb3e91
% April 2019
bb3e91
bb3e91
## NAME
bb3e91
bb3e91
containers-transports - description of supported transports for copying and storing container images
bb3e91
bb3e91
## DESCRIPTION
bb3e91
bb3e91
Tools which use the containers/image library, including skopeo(1), buildah(1), podman(1), all share a common syntax for referring to container images in various locations.
bb3e91
The general form of the syntax is _transport:details_, where details are dependent on the specified transport, which are documented below.
bb3e91
bb3e91
### **containers-storage**:[**[**storage-specifier**]**]{image-id|docker-reference[@image-id]}
bb3e91
bb3e91
An image located in a local containers storage.
bb3e91
The format of _docker-reference_ is described in detail in the **docker** transport.
bb3e91
bb3e91
The _storage-specifier_ allows for referencing storage locations on the file system and has the format `[[driver@]root[+run-root][:options]]` where the optional `driver` refers to the storage driver (e.g., overlay or btrfs) and where `root` is an absolute path to the storage's root directory.
bb3e91
The optional `run-root` can be used to specify the run directory of the storage where all temporary writable content is stored.
bb3e91
The optional `options` are a comma-separated list of driver-specific options.
bb3e91
Please refer to containers-storage.conf(5) for further information on the drivers and supported options.
bb3e91
bb3e91
### **dir:**_path_
bb3e91
bb3e91
An existing local directory _path_ storing the manifest, layer tarballs and signatures as individual files.
bb3e91
This is a non-standardized format, primarily useful for debugging or noninvasive container inspection.
bb3e91
bb3e91
### **docker://**_docker-reference_
bb3e91
bb3e91
An image in a registry implementing the "Docker Registry HTTP API V2".
bb3e91
By default, uses the authorization state in `$XDG_RUNTIME_DIR/containers/auth.json`, which is set using podman-login(1).
bb3e91
If the authorization state is not found there, `$HOME/.docker/config.json` is checked, which is set using docker-login(1).
bb3e91
The containers-registries.conf(5) further allows for configuring various settings of a registry.
bb3e91
bb3e91
Note that a _docker-reference_ has the following format: `name[:tag|@digest]`.
bb3e91
While the docker transport does not support both a tag and a digest at the same time some formats like containers-storage do.
bb3e91
Digests can also be used in an image destination as long as the manifest matches the provided digest.
bb3e91
The digest of images can be explored with skopeo-inspect(1).
bb3e91
If `name` does not contain a slash, it is treated as `docker.io/library/name`.
bb3e91
Otherwise, the component before the first slash is checked if it is recognized as a `hostname[:port]` (i.e., it contains either a . or a :, or the component is exactly localhost).
bb3e91
If the first component of name is not recognized as a `hostname[:port]`, `name` is treated as `docker.io/name`.
bb3e91
bb3e91
### **docker-archive:**_path[:{docker-reference|@source-index}]_
bb3e91
bb3e91
An image is stored in the docker-save(1) formatted file.
bb3e91
_docker-reference_ must not contain a digest.
bb3e91
Alternatively, for reading archives, @_source-index_ is a zero-based index in archive manifest
bb3e91
(to access untagged images).
bb3e91
If neither _docker-reference_ nor @_source_index is specified when reading an archive, the archive must contain exactly one image.
bb3e91
bb3e91
It is further possible to copy data to stdin by specifying `docker-archive:/dev/stdin` but note that the used file must be seekable.
bb3e91
bb3e91
### **docker-daemon:**_docker-reference|algo:digest_
bb3e91
bb3e91
An image stored in the docker daemon's internal storage.
bb3e91
The image must be specified as a _docker-reference_ or in an alternative _algo:digest_ format when being used as an image source.
bb3e91
The _algo:digest_ refers to the image ID reported by docker-inspect(1).
bb3e91
bb3e91
### **oci:**_path[:reference]_
bb3e91
bb3e91
An image compliant with the "Open Container Image Layout Specification" at _path_.
bb3e91
Using a _reference_ is optional and allows for storing multiple images at the same _path_.
bb3e91
bb3e91
### **oci-archive:**_path[:reference]_
bb3e91
bb3e91
An image compliant with the "Open Container Image Layout Specification" stored as a tar(1) archive at _path_.
bb3e91
bb3e91
### **ostree:**_docker-reference[@/absolute/repo/path]_
bb3e91
bb3e91
An image in the local ostree(1) repository.
bb3e91
_/absolute/repo/path_ defaults to _/ostree/repo_.
bb3e91
bb3e91
## Examples
bb3e91
bb3e91
The following examples demonstrate how some of the containers transports can be used.
bb3e91
The examples use skopeo-copy(1) for copying container images.
bb3e91
bb3e91
**Copying an image from one registry to another**:
bb3e91
```
bb3e91
$ skopeo copy docker://docker.io/library/alpine:latest docker://localhost:5000/alpine:latest
bb3e91
```
bb3e91
bb3e91
**Copying an image from a running Docker daemon to a directory in the OCI layout**:
bb3e91
```
bb3e91
$ mkdir alpine-oci
bb3e91
$ skopeo copy docker-daemon:alpine:latest oci:alpine-oci
bb3e91
$ tree alpine-oci
bb3e91
test-oci/
bb3e91
├── blobs
bb3e91
│   └── sha256
bb3e91
│       ├── 83ef92b73cf4595aa7fe214ec6747228283d585f373d8f6bc08d66bebab531b7
bb3e91
│       ├── 9a6259e911dcd0a53535a25a9760ad8f2eded3528e0ad5604c4488624795cecc
bb3e91
│       └── ff8df268d29ccbe81cdf0a173076dcfbbea4bb2b6df1dd26766a73cb7b4ae6f7
bb3e91
├── index.json
bb3e91
└── oci-layout
bb3e91
bb3e91
2 directories, 5 files
bb3e91
```
bb3e91
bb3e91
**Copying an image from a registry to the local storage**:
bb3e91
```
bb3e91
$ skopeo copy docker://docker.io/library/alpine:latest containers-storage:alpine:latest
bb3e91
```
bb3e91
bb3e91
## SEE ALSO
bb3e91
bb3e91
docker-login(1), docker-save(1), ostree(1), podman-login(1), skopeo-copy(1), skopeo-inspect(1), tar(1), container-registries.conf(5), containers-storage.conf(5)
bb3e91
bb3e91
## AUTHORS
bb3e91
bb3e91
Miloslav Trmač <mitr@redhat.com>
bb3e91
Valentin Rothberg <rothberg@redhat.com>