# docker manifest

**Descripción:** Gestiona manifiestos e índices de manifiestos de imágenes Docker

**Uso:** `docker manifest COMMAND`





> [!NOTE]

> **Experimental**
>
> Este comando es experimental. Las funciones experimentales están destinadas a pruebas y comentarios, ya que su funcionalidad o diseño pueden cambiar entre versiones sin previo aviso o eliminarse por completo en una versión futura.
> 




## Descripción

El comando `docker manifest` por sí solo no realiza ninguna acción. Para operar
en un manifiesto o lista de manifiestos, se debe usar uno de los subcomandos.

Un manifiesto individual contiene información sobre una imagen, como sus capas, tamaño y
digest. El comando `docker manifest` también te proporciona información adicional,
como el sistema operativo (OS) y la arquitectura para la cual se construyó una imagen.

Una lista de manifiestos es una lista de capas de imágenes que se crea especificando uno o
más (idealmente más de uno) nombres de imágenes. Luego se puede usar de la misma manera que
un nombre de imagen en los comandos `docker pull` y `docker run`, por ejemplo.

Idealmente, una lista de manifiestos se crea a partir de imágenes que son idénticas en función para
diferentes combinaciones de sistema operativo/arquitectura (os/arch). Por esta razón, las listas de
manifiestos se conocen a menudo como "imágenes multiarquitectura". Sin embargo, un usuario podría
crear una lista de manifiestos que apunte a dos imágenes: una para Windows en AMD64 y otra para
Darwin en AMD64.

### manifest inspect

```console
$ docker manifest inspect --help

Usage:  docker manifest inspect [OPTIONS] [MANIFEST_LIST] MANIFEST

Display an image manifest, or manifest list

Options:
      --help       Print usage
      --insecure   Allow communication with an insecure registry
  -v, --verbose    Output additional info including layers and platform
```

### manifest create

```console
Usage:  docker manifest create MANIFEST_LIST MANIFEST [MANIFEST...]

Create a local manifest list for annotating and pushing to a registry

Options:
  -a, --amend      Amend an existing manifest list
      --insecure   Allow communication with an insecure registry
      --help       Print usage
```

### manifest annotate

```console
Usage:  docker manifest annotate [OPTIONS] MANIFEST_LIST MANIFEST

Add additional information to a local image manifest

Options:
      --arch string               Set architecture
      --help                      Print usage
      --os string                 Set operating system
      --os-version string         Set operating system version
      --os-features stringSlice   Set operating system feature
      --variant string            Set architecture variant

```

### manifest push

```console
Usage:  docker manifest push [OPTIONS] MANIFEST_LIST

Push a manifest list to a repository

Options:
      --help       Print usage
      --insecure   Allow push to an insecure registry
  -p, --purge      Remove the local manifest list after push
```

### Trabajar con registros inseguros

El comando manifest interactúa únicamente con un registro. Debido a esto,
no tiene forma de consultar al motor para obtener la lista de registros inseguros permitidos.
Para permitir que la CLI interactúe con un registro inseguro, algunos comandos de `docker manifest`
tienen una opción `--insecure`. Para cada transacción, como un `create`,
que consulte a un registro, se debe especificar la opción `--insecure`. Esta opción
le indica a la CLI que esta llamada al registro puede ignorar los problemas de seguridad, como certificados
faltantes o autofirmados. De manera similar, en un `manifest push` a un registro inseguro,
se debe especificar la opción `--insecure`. Si no se usa con un registro inseguro, el comando
manifest no logra encontrar un registro que cumpla con los requisitos por defecto.




## Ejemplos


### Inspeccionar el objeto manifiesto de una imagen

```console
$ docker manifest inspect hello-world
{
        "schemaVersion": 2,
        "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
        "config": {
                "mediaType": "application/vnd.docker.container.image.v1+json",
                "size": 1520,
                "digest": "sha256:1815c82652c03bfd8644afda26fb184f2ed891d921b20a0703b46768f9755c57"
        },
        "layers": [
                {
                        "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                        "size": 972,
                        "digest": "sha256:b04784fba78d739b526e27edc02a5a8cd07b1052e9283f5fc155828f4b614c28"
                }
        ]
}
```

### Inspeccionar el manifiesto de una imagen y obtener información de os/arch

El comando `docker manifest inspect` toma una opción opcional `--verbose` que
te proporciona el nombre de la imagen (Ref), así como la arquitectura y el sistema operativo (Platform).

Al igual que con otros comandos de Docker que toman nombres de imágenes, puedes referirte a una imagen con o
sin etiqueta, o por digest (p. ej., `hello-world@sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f`).

Aquí hay un ejemplo de cómo inspeccionar el manifiesto de una imagen con la opción `--verbose`:

```console
$ docker manifest inspect --verbose hello-world
{
        "Ref": "docker.io/library/hello-world:latest",
        "Digest": "sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f",
        "SchemaV2Manifest": {
                "schemaVersion": 2,
                "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
                "config": {
                        "mediaType": "application/vnd.docker.container.image.v1+json",
                        "size": 1520,
                        "digest": "sha256:1815c82652c03bfd8644afda26fb184f2ed891d921b20a0703b46768f9755c57"
                },
                "layers": [
                        {
                                "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
                                "size": 972,
                                "digest": "sha256:b04784fba78d739b526e27edc02a5a8cd07b1052e9283f5fc155828f4b614c28"
                        }
                ]
        },
        "Platform": {
                "architecture": "amd64",
                "os": "linux"
        }
}
```

### Crear y subir una lista de manifiestos

Para crear una lista de manifiestos, primero ejecutas `create` para crear la lista de manifiestos
localmente especificando las imágenes constituyentes que deseas incluir en ella. Ten en cuenta
que esto se sube (push) a un registro, por lo que si deseas subir a un registro que no sea el registro
de Docker, debes crear tu lista de manifiestos con el nombre del registro o IP y puerto.
Esto es similar a etiquetar una imagen y subirla a un registro externo.

Después de haber creado tu copia local de la lista de manifiestos, puedes opcionalmente
anotarla (`annotate`). Las anotaciones permitidas son la arquitectura y el sistema operativo
(que anulan los valores actuales de la imagen), las características del sistema operativo y una variante de arquitectura.

Finalmente, debes subir (`push`) tu lista de manifiestos al registro deseado. A continuación se presentan
las descripciones de estos tres comandos y un ejemplo que los agrupa a todos.

```console
$ docker manifest create 45.55.81.106:5000/coolapp:v1 \
    45.55.81.106:5000/coolapp-ppc64le-linux:v1 \
    45.55.81.106:5000/coolapp-arm-linux:v1 \
    45.55.81.106:5000/coolapp-amd64-linux:v1 \
    45.55.81.106:5000/coolapp-amd64-windows:v1

Created manifest list 45.55.81.106:5000/coolapp:v1
```

```console
$ docker manifest annotate 45.55.81.106:5000/coolapp:v1 45.55.81.106:5000/coolapp-arm-linux --arch arm
```

```console
$ docker manifest push 45.55.81.106:5000/coolapp:v1
Pushed manifest 45.55.81.106:5000/coolapp@sha256:9701edc932223a66e49dd6c894a11db8c2cf4eccd1414f1ec105a623bf16b426 with digest: sha256:f67dcc5fc786f04f0743abfe0ee5dae9bd8caf8efa6c8144f7f2a43889dc513b
Pushed manifest 45.55.81.106:5000/coolapp@sha256:f3b3b28a45160805bb16542c9531888519430e9e6d6ffc09d72261b0d26ff74f with digest: sha256:b64ca0b60356a30971f098c92200b1271257f100a55b351e6bbe985638352f3a
Pushed manifest 45.55.81.106:5000/coolapp@sha256:39dc41c658cf25f33681a41310372f02728925a54aac3598310bfb1770615fc9 with digest: sha256:df436846483aff62bad830b730a0d3b77731bcf98ba5e470a8bbb8e9e346e4e8
Pushed manifest 45.55.81.106:5000/coolapp@sha256:f91b1145cd4ac800b28122313ae9e88ac340bb3f1e3a4cd3e59a3648650f3275 with digest: sha256:5bb8e50aa2edd408bdf3ddf61efb7338ff34a07b762992c9432f1c02fc0e5e62
sha256:050b213d49d7673ba35014f21454c573dcbec75254a08f4a7c34f66a47c06aba
```

### Inspeccionar una lista de manifiestos

```console
$ docker manifest inspect coolapp:v1
{
   "schemaVersion": 2,
   "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
   "manifests": [
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 424,
         "digest": "sha256:f67dcc5fc786f04f0743abfe0ee5dae9bd8caf8efa6c8144f7f2a43889dc513b",
         "platform": {
            "architecture": "arm",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 424,
         "digest": "sha256:b64ca0b60356a30971f098c92200b1271257f100a55b351e6bbe985638352f3a",
         "platform": {
            "architecture": "amd64",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 425,
         "digest": "sha256:df436846483aff62bad830b730a0d3b77731bcf98ba5e470a8bbb8e9e346e4e8",
         "platform": {
            "architecture": "ppc64le",
            "os": "linux"
         }
      },
      {
         "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
         "size": 425,
         "digest": "sha256:5bb8e50aa2edd408bdf3ddf61efb7338ff34a07b762992c9432f1c02fc0e5e62",
         "platform": {
            "architecture": "s390x",
            "os": "linux"
         }
      }
   ]
}
```

### Subir (push) a un registro inseguro

Aquí hay un ejemplo de cómo crear y subir una lista de manifiestos usando un registro
inseguro conocido.

```console
$ docker manifest create --insecure myprivateregistry.mycompany.com/repo/image:1.0 \
    myprivateregistry.mycompany.com/repo/image-linux-ppc64le:1.0 \
    myprivateregistry.mycompany.com/repo/image-linux-s390x:1.0 \
    myprivateregistry.mycompany.com/repo/image-linux-arm:1.0 \
    myprivateregistry.mycompany.com/repo/image-linux-armhf:1.0 \
    myprivateregistry.mycompany.com/repo/image-windows-amd64:1.0 \
    myprivateregistry.mycompany.com/repo/image-linux-amd64:1.0

$ docker manifest push --insecure myprivateregistry.mycompany.com/repo/image:tag
```

> [!NOTE]
> La opción `--insecure` no es necesaria para anotar una lista de manifiestos,
> dado que las anotaciones se aplican a una copia almacenada localmente de una lista de manifiestos. También
> puedes omitir la opción `--insecure` si estás ejecutando un `docker manifest inspect`
> en una lista de manifiestos almacenada localmente. Ten en cuenta que las listas de manifiestos
> almacenadas localmente nunca son utilizadas por el motor en un `docker pull`.


## Subcomandos

| Comando                                                                                                                                     | Descripción                        |
| ------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------- | -------------------- |
|  | [`docker manifest annotate`](https://docs-docker.esdocu.com/reference/cli/docker/manifest/annotate/) | Añade información adicional a un manifiesto de imagen local |

 | [`docker manifest create`](https://docs-docker.esdocu.com/reference/cli/docker/manifest/create/) | Crea una lista de manifiestos local para anotar y subir (push) a un registro |

 | [`docker manifest inspect`](https://docs-docker.esdocu.com/reference/cli/docker/manifest/inspect/) | Muestra un manifiesto de imagen o una lista de manifiestos |

 | [`docker manifest push`](https://docs-docker.esdocu.com/reference/cli/docker/manifest/push/) | Sube (push) una lista de manifiestos a un repositorio |

 | [`docker manifest rm`](https://docs-docker.esdocu.com/reference/cli/docker/manifest/rm/) | Elimina una o más listas de manifiestos del almacenamiento local |



