# Skopeo

## About this Install Guide

|                     |              |
|---------------------|--------------|
| **Reading time:**   | 10 min       |
| **Last updated:**   | 7 Aug 2026   |
| **Ecosystem dashboard:** | [View](https://developer.arm.com/ecosystem-dashboard/linux?package=Skopeo) |

This guide shows you how to install and use the tool with the most common configuration. For advanced options and complete reference information, see the official documentation. Some install guides also include optional next steps to help you explore related workflows or integrations.

Skopeo is a command-line utility that performs various operations on container images and image repositories. It does not require a daemon to be running on your computer.

This article explains how to install Skopeo for Ubuntu on Arm. Skopeo is available for Windows, macOS, and Linux and supports the Arm architecture. See [Installing Skopeo](https://github.com/containers/skopeo/blob/main/install.md) for further information about other operating systems and architectures.

## What should I consider before installing Skopeo on Arm?

Confirm you are using an Arm machine by running:

```
uname -m
```

The output should be:

```
__output__ aarch64
```

If you see a different result, you are not using an Arm computer running 64-bit Linux.

## How do I download and Install Skopeo for Ubuntu on Arm?

The easiest way to install Skopeo is to use the package manager:

```
sudo apt update
sudo apt install -y skopeo
```

Confirm the installation by checking the version:

```
skopeo --version
```

To see the help message use this command:

```
skopeo --help
```

The output that you will see should be:

```
__output__ Various operations with container images and container image registries
__output__ 
__output__ Usage:
__output__   skopeo [flags]
__output__   skopeo [command]
__output__ 
__output__ Available Commands:
__output__   copy                                          Copy an IMAGE-NAME from one location to another.
__output__   delete                                        Delete image IMAGE-NAME.
__output__   generate-sigstore-key                         Generate a sigstore public/private key pair.
__output__   help                                          Help about any command.
__output__   inspect                                       Inspect image IMAGE-NAME.
__output__   list-tags                                     List tags in the transport/repository specified by the SOURCE-IMAGE.
__output__   login                                         Log in to a container registry.
__output__   logout                                        Log out of a container registry.
__output__   manifest-digest                               Compute a manifest digest of a file.
__output__   standalone-sign                               Create a signature using local files.
__output__   standalone-verify                             Verify a signature using local files.
__output__   sync                                          Synchronize one or more images from one location to another.
__output__ 
__output__ Flags:
__output__       --command-timeout duration   Timeout for the command execution.
__output__       --debug                      Enable debug output.
__output__   -h, --help                       Help for skopeo.
__output__       --insecure-policy            Run the tool without any policy check.
__output__       --override-arch ARCH         Use ARCH instead of the architecture of the machine for choosing images.
__output__       --override-os OS             Use OS instead of the running OS for choosing images.
__output__       --override-variant VARIANT   Use VARIANT instead of the running architecture variant for choosing images.
__output__       --policy string              Path to a trust policy file.
__output__       --registries.d DIR           Use registry configuration files in DIR (for example, for container signature storage).
__output__       --tmpdir string              Directory used to store temporary files.
__output__   -v, --version                    Version for Skopeo.
__output__ 
__output__ Use "skopeo [command] --help" for more information about a command.
```

## How do I get started with Skopeo?

You can use the commands listed below to get you started with Skopeo.

### How can I check if a container image supports Arm?

To find out if an image is multi-architecture, including Arm, you can inspect the image’s manifest.

For example, to check if the dev container available for creating Arm Learning Paths supports the Arm architecture, run:

```
skopeo inspect --raw docker://docker.io/armswdev/learn-dev-container:latest | jq '.manifests[] | select(.platform.architecture == "arm64")'
```

The output is similar to:

```
__output__ {
__output__  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
__output__  "size": 1574,
__output__  "digest": "sha256:b7abfdc06d4cb06dfbb644f0d7c50202f99f83298da7903ea6463de23b55fb10",
__output__  "platform": {
__output__    "architecture": "arm64",
__output__    "os": "linux"
__output__  }
__output__}
```

If the command returns a result for an image, the image supports the `arm64` architecture.

### How can I check if a container image supports multiple architectures?

To find out if an image supports both `arm64` and `amd64` architectures, you can inspect the image’s manifest for both architectures.

For example, to check if the same dev container supports both architectures run:

```
skopeo inspect --raw docker://docker.io/armswdev/learn-dev-container:latest | jq '.manifests[] | select(.platform.architecture == "arm64" or .platform.architecture == "amd64")'
```

The output confirms that both `arm64` and `amd64` are supported architectures as shown below:

```
__output__ {
__output__  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
__output__  "size": 1574,
__output__  "digest": "sha256:15fe2dc0925c6e5da27048edcd034660f51216ad700cb7cf12cb7779c16e9bce",
__output__  "platform": {
__output__    "architecture": "amd64",
__output__    "os": "linux"
__output__  }
__output__}
__output__ {
__output__  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
__output__  "size": 1574,
__output__  "digest": "sha256:b7abfdc06d4cb06dfbb644f0d7c50202f99f83298da7903ea6463de23b55fb10",
__output__  "platform": {
__output__    "architecture": "arm64",
__output__    "os": "linux"
__output__  }
__output__}
```

## What are some other uses for Skopeo?

Copy an image from a registry to a local directory. This command is similar to `docker pull` and copies the image from the remote registry to your local directory.

```
skopeo copy docker://docker.io/armswdev/uname:latest dir:./uname
```

The output is:

```
__output__ Getting image source signatures
__output__ Copying blob cd741b12a7ea done   |
__output__ Copying config d11135df72 done   |
__output__ Writing manifest to image destination
```

Inspect an image in a remote registry:

```
skopeo inspect docker://docker.io/armswdev/uname:latest
```

The output is:

```
__output__ {
__output__    "Name": "docker.io/armswdev/uname",
__output__    "Digest": "sha256:4f1fe1e1e1ad179bb2cec6b3c8b458d6ead02bd7459798a357791353b867462d",
__output__    "RepoTags": [
__output__        "latest"
__output__    ],
__output__    "Created": "2023-03-08T04:32:41.063980445Z",
__output__    "DockerVersion": "",
__output__    "Labels": {
__output__        "org.opencontainers.image.ref.name": "ubuntu",
__output__        "org.opencontainers.image.version": "22.04"
__output__    },
__output__    "Architecture": "arm64",
__output__    "Os": "linux",
__output__    "Layers": [
__output__        "sha256:cd741b12a7eaa64357041c2d3f4590c898313a7f8f65cd1577594e6ee03a8c38"
__output__    ],
__output__    "LayersData": [
__output__        {
__output__            "MIMEType": "application/vnd.oci.image.layer.v1.tar+gzip",
__output__            "Digest": "sha256:cd741b12a7eaa64357041c2d3f4590c898313a7f8f65cd1577594e6ee03a8c38",
__output__            "Size": 27347481,
__output__            "Annotations": null
__output__        }
__output__    ],
__output__    "Env": [
__output__        "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
__output__    ]
__output__}
```

List tags in a remote registry for the Ubuntu image with many tags:

```
skopeo list-tags docker://docker.io/library/ubuntu
```

The partial output is:

```
__output__ {
__output__    "Repository": "docker.io/library/ubuntu",
__output__    "Tags": [
__output__        "10.04",
__output__        "12.04",
__output__        "12.04.5",
__output__        "12.10",
__output__        "13.04",
__output__        "13.10",
__output__        "14.04",
__output__        "14.04.1",
__output__        "14.04.2",
__output__        "14.04.3",
__output__        "14.04.4",
__output__        "14.04.5",
__output__        "14.10",
__output__        "15.04",
__output__        "15.10",
__output__        "16.04",
__output__        "16.10",
__output__        "17.04",
__output__        "17.10",
__output__        "18.04",
__output__        "18.10",
__output__        "19.04",
__output__        "19.10",
__output__        "20.04",
__output__        "20.10",
__output__        "21.04",
__output__        "21.10",
__output__        "22.04",
__output__        "22.10",
__output__        "23.04",
__output__        "23.10",
__output__        "24.04",
__output__        "24.10",
__output__        "25.04",
__output__        < many more tag with Ubuntu release names omitted>
__output__    ]
__output__}
```

You are ready to use Skopeo for your projects.
