docker manifest
| Descripción | Gestiona manifiestos e índices de manifiestos de imágenes Docker |
|---|---|
| Uso | docker 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
NoteLa opción
--insecureno 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--insecuresi estás ejecutando undocker manifest inspecten una lista de manifiestos almacenada localmente. Ten en cuenta que las listas de manifiestos almacenadas localmente nunca son utilizadas por el motor en undocker pull.
Subcomandos
| Comando | Descripción |
|---|---|
docker manifest annotate | Añade información adicional a un manifiesto de imagen local |
docker manifest create | Crea una lista de manifiestos local para anotar y subir (push) a un registro |
docker manifest inspect | Muestra un manifiesto de imagen o una lista de manifiestos |
docker manifest push | Sube (push) una lista de manifiestos a un repositorio |
docker manifest rm | Elimina una o más listas de manifiestos del almacenamiento local |