Skopeo

Skopeo for remote image inspection, cross-registry copying, and repository synchronization.

Inspect Remote Images

Inspect without pulling
skopeo inspect docker://docker.io/library/nginx:1.25-alpine
skopeo inspect docker://docker.io/library/nginx:1.25-alpine | jq '.Digest'
skopeo inspect --raw docker://docker.io/library/nginx:latest | jq   # manifest
Skopeo inspects registries directly without downloading the full image. Useful for checking tags, digests, and architecture support before pulling.
List available tags
skopeo list-tags docker://docker.io/library/nginx
skopeo list-tags docker://docker.io/library/nginx | jq '.Tags[]' | sort -V | tail -20

Copy Images Between Registries

Mirror an image across registries
skopeo copy docker://docker.io/library/nginx:1.25-alpine \
  docker://registry.example.com/nginx:1.25-alpine
Copy to local OCI directory or archive
skopeo copy docker://docker.io/library/nginx:1.25-alpine oci:nginx-local:latest
skopeo copy docker://docker.io/library/nginx:1.25-alpine docker-archive:nginx.tar
Copy from archive to registry
skopeo copy docker-archive:nginx.tar docker://registry.example.com/nginx:latest

Authentication

Login to a registry
skopeo login registry.example.com
skopeo login --username user --password-stdin registry.example.com < /dev/stdin
skopeo logout registry.example.com

Delete Remote Images

Remove image from registry
skopeo delete docker://registry.example.com/myapp:old-tag
Not all registries support deletion via the API. Docker Hub, for example, requires using the web UI or Hub API.

Sync

Sync an entire repository
skopeo sync --src docker --dest dir docker.io/library/nginx /tmp/nginx-mirror/
skopeo sync --src dir --dest docker /tmp/nginx-mirror/ registry.example.com/