Compartir comentarios
Las respuestas se generan en base a la documentación.

docker manifest

DescripciónGestiona manifiestos e índices de manifiestos de imágenes Docker
Usodocker manifest COMMAND

</span>
<strong>Experimental</strong>

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

$ 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

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

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

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

$ 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:

$ 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.

$ 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
$ docker manifest annotate 45.55.81.106:5000/coolapp:v1 45.55.81.106:5000/coolapp-arm-linux --arch arm
$ 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

$ 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.

$ 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

ComandoDescripción
docker manifest annotateAñade información adicional a un manifiesto de imagen local
docker manifest createCrea una lista de manifiestos local para anotar y subir (push) a un registro
docker manifest inspectMuestra un manifiesto de imagen o una lista de manifiestos
docker manifest pushSube (push) una lista de manifiestos a un repositorio
docker manifest rmElimina una o más listas de manifiestos del almacenamiento local