projectatomic/skopeo

Name: skopeo

Owner: Project Atomic

Description: Work with remote images registries - retrieving information, images, signing content

Created: 2016-03-07 20:23:29.0

Updated: 2018-01-18 03:00:30.0

Pushed: 2018-01-18 18:13:07.0

Homepage:

Size: 5230

Language: Go

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

skopeo Build Status


skopeo is a command line utility that performs various operations on container images and image repositories.

skopeo can work with OCI images as well as the original Docker v2 images.

Skopeo works with API V2 registries such as Docker registries, the Atomic registry, private registries, local directories and local OCI-layout directories. Skopeo does not require a daemon to be running to perform these operations which consist of:

Inspecting a repository

skopeo is able to inspect a repository on a Docker registry and fetch images layers. The inspect command fetches the repository's manifest and it is able to show you a docker inspect-like json output about a whole repository or a tag. This tool, in contrast to docker inspect, helps you gather useful information about a repository or a tag before pulling it (using disk space). The inspect command can show you which tags are available for the given repository, the labels the image has, the creation date and operating system of the image and more.

Examples:

ow properties of fedora:latest
opeo inspect docker://docker.io/fedora

"Name": "docker.io/library/fedora",
"Tag": "latest",
"Digest": "sha256:cfd8f071bf8da7a466748f522406f7ae5908d002af1b1a1c0dcf893e183e5b32",
"RepoTags": [
    "20",
    "21",
    "22",
    "23",
    "heisenbug",
    "latest",
    "rawhide"
],
"Created": "2016-03-04T18:40:02.92155334Z",
"DockerVersion": "1.9.1",
"Labels": {},
"Architecture": "amd64",
"Os": "linux",
"Layers": [
    "sha256:236608c7b546e2f4e7223526c74fc71470ba06d46ec82aeb402e704bfdee02a2",
    "sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
]


ow unverifed image's digest
opeo inspect docker://docker.io/fedora:rawhide | jq '.Digest'
256:905b4846938c8aef94f52f3e41a11398ae5b40f5855fb0e40ed9c157e721d7f8"
Copying images

skopeo can copy container images between various storage mechanisms, including:

opeo copy docker://busybox:1-glibc atomic:myns/unsigned:streaming
opeo copy docker://busybox:latest dir:existingemptydirectory
opeo copy docker://busybox:latest oci:busybox_ocilayout:latest
Deleting images

For example,

opeo delete docker://localhost:5000/imagename:latest
Private registries with authentication

When interacting with private registries, skopeo first looks for --creds (for skopeo inspect|delete) or --src-creds|--dest-creds (for skopeo copy) flags. If those aren't provided, it looks for the Docker's cli config file (usually located at $HOME/.docker/config.json) to get the credentials needed to authenticate. The ultimate fallback, as Docker does, is to provide an empty authentication when interacting with those registries.

Examples:

t /home/runcom/.docker/config.json

"auths": {
    "myregistrydomain.com:5000": {
        "auth": "dGVzdHVzZXI6dGVzdHBhc3N3b3Jk",
        "email": "stuf@ex.cm"
    }
}


 can see I'm already authenticated via docker login so everything will be fine
opeo inspect docker://myregistrydomain.com:5000/busybox
g":"latest","Digest":"sha256:473bb2189d7b913ed7187a33d11e743fdc2f88931122a44d91a301b64419f092","RepoTags":["latest"],"Comment":"","Created":"2016-01-15T18:06:41.282540103Z","ContainerConfig":{"Hostname":"aded96b43f48","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["/bin/sh","-c","#(nop) CMD [\"sh\"]"],"Image":"9e77fef7a1c9f989988c06620dabc4020c607885b959a2cbd7c2283c91da3e33","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"DockerVersion":"1.8.3","Author":"","Config":{"Hostname":"aded96b43f48","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["sh"],"Image":"9e77fef7a1c9f989988c06620dabc4020c607885b959a2cbd7c2283c91da3e33","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"Architecture":"amd64","Os":"linux"}

t's try now to fake a non existent Docker's config file
t /home/runcom/.docker/config.json


opeo inspect docker://myregistrydomain.com:5000/busybox
[0000] unauthorized: authentication required

ssing --creds - we can see that everything goes fine
opeo inspect --creds=testuser:testpassword docker://myregistrydomain.com:5000/busybox
g":"latest","Digest":"sha256:473bb2189d7b913ed7187a33d11e743fdc2f88931122a44d91a301b64419f092","RepoTags":["latest"],"Comment":"","Created":"2016-01-15T18:06:41.282540103Z","ContainerConfig":{"Hostname":"aded96b43f48","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["/bin/sh","-c","#(nop) CMD [\"sh\"]"],"Image":"9e77fef7a1c9f989988c06620dabc4020c607885b959a2cbd7c2283c91da3e33","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"DockerVersion":"1.8.3","Author":"","Config":{"Hostname":"aded96b43f48","Domainname":"","User":"","AttachStdin":false,"AttachStdout":false,"AttachStderr":false,"Tty":false,"OpenStdin":false,"StdinOnce":false,"Env":null,"Cmd":["sh"],"Image":"9e77fef7a1c9f989988c06620dabc4020c607885b959a2cbd7c2283c91da3e33","Volumes":null,"WorkingDir":"","Entrypoint":null,"OnBuild":null,"Labels":null},"Architecture":"amd64","Os":"linux"}

opeo copy example:
opeo copy --src-creds=testuser:testpassword docker://myregistrydomain.com:5000/private oci:local_oci_image

If your cli config is found but it doesn't contain the necessary credentials for the queried registry you'll get an error. You can fix this by either logging in (via docker login) or providing --creds or --src-creds|--dest-creds.

Building

To build the skopeo binary you need at least Go 1.5 because it uses the latest GO15VENDOREXPERIMENT flag.

There are two ways to build skopeo: in a container, or locally without a container. Choose the one which better matches your needs and environment.

Building without a container

Building without a container requires a bit more manual work and setup in your environment, but it is more flexible:

Install the necessary dependencies:

ra$ sudo dnf install gpgme-devel libassuan-devel btrfs-progs-devel device-mapper-devel ostree-devel
S$ brew install gpgme

Make sure to clone this repository in your GOPATH - otherwise compilation fails.

t clone https://github.com/projectatomic/skopeo $GOPATH/src/github.com/projectatomic/skopeo
 $GOPATH/src/github.com/projectatomic/skopeo && make binary-local
Building in a container

Building in a container is simpler, but more restrictive:

ke binary # Or (make all) to also build documentation, see below.
Building documentation

To build the manual you will need go-md2man.

an$ sudo apt-get install go-md2man
ra$ sudo dnf install go-md2man

Then

ke docs
Installing

If you built from source:

do make install

skopeo is also available from Fedora 23 (and later):

do dnf install skopeo
TODO
NOT TODO
CONTRIBUTING
Dependencies management

skopeo uses vndr for dependencies management.

In order to add a new dependency to this project:

In order to update an existing dependency:

When new PRs for containers/image break skopeo (i.e. containers/image tests fail in make test-skopeo):

License

skopeo is licensed under the Apache License, Version 2.0. See LICENSE for the full license text.


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.