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