Una imagen docker ejemplar tiene las siguientes 3 partes:
Ejemplos:
docker pull golang docker pull yugabytedb/yugabyte docker pull quay.io/keycloak/keycloak-x
Cuando se extrae una imagen usando solo el nombre, se extrae la imagen etiquetada como latest
. Si no hay ninguna imagen con la etiqueta latest
, no se extraerá ninguna imagen.
Ejemplos:
docker pull golang:latest docker pull golang:1.17.1 docker pull yugabytedb/yugabyte:latest docker pull yugabytedb/yugabyte:2.9.0.0-b4 docker pull quay.io/keycloak/keycloak-x:latest docker pull quay.io/keycloak/keycloak-x:15.0.2
Una imagen como golang
está disponible para varios sistemas operativos/arquitectura, por ejemplo: windows/amd64
, linux/amd64
, etc. En tales casos, la ventana acoplable extrae automáticamente la imagen adecuada para el sistema operativo/arquitectura en el que se ejecuta el comando de extracción.
Use este comando para ver os/arch de una imagen:
docker manifest inspect --verbose golang:1.17.1 # sample output [ { "Ref": "docker.io/library/golang:1.17.1@sha256:232a180dbcbcfa7250917507f3827d88a9ae89bb1cdd8fe3ac4db7b764ebb25a", "Descriptor": { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:232a180dbcbcfa7250917507f3827d88a9ae89bb1cdd8fe3ac4db7b764ebb25a", "size": 1796, "platform": { "architecture": "amd64", "os": "linux" } }, . . .
Una cosa común que sucede con una etiqueta es que podría reutilizarse. Por ejemplo, una imagen extraída con golang:latest
hoy puede ser completamente diferente de una imagen extraída dentro de 6 meses.
Las etiquetas que parecen números de versión pueden tener el mismo comportamiento. No hay garantía de que una imagen extraída con golang:1.17.1
hoy (por ejemplo, en linux/amd64
) sea la misma cuando se extraiga 6 meses después (nuevamente en linux/amd64
).
Se debe tener precaución en entornos de producción al extraer una imagen con la etiqueta latest
, ya que dificulta las reversiones.
Un resumen es una identificación que se crea automáticamente durante el tiempo de compilación y no se puede cambiar (inmutable). Cuando se extrae una imagen mediante un resumen, una docker pull
descargará la misma imagen cada vez en cualquier sistema operativo/arquitectura. Esto se llama fijación de imágenes.
Primero, determine el name:tag
que desea usar. Luego obtenga el resumen de la siguiente manera:
docker manifest inspect --verbose golang:1.17.1 # sample output [ { "Ref": "docker.io/library/golang:1.17.1@sha256:232a180dbcbcfa7250917507f3827d88a9ae89bb1cdd8fe3ac4db7b764ebb25a", "Descriptor": { "mediaType": "application/vnd.docker.distribution.manifest.v2+json", "digest": "sha256:232a180dbcbcfa7250917507f3827d88a9ae89bb1cdd8fe3ac4db7b764ebb25a", "size": 1796, "platform": { "architecture": "amd64", "os": "linux" } }, . . . docker manifest inspect --verbose yugabytedb/yugabyte:2.9.0.0-b4 docker manifest inspect --verbose quay.io/keycloak/keycloak-x:15.0.2
El comando anterior devuelve una respuesta JSON. Busque el digest
en el Descriptor
.
Ejemplos:
# golang 1.17.1 for linux/amd64 docker pull golang@sha256:232a180dbcbcfa7250917507f3827d88a9ae89bb1cdd8fe3ac4db7b764ebb25a # yugabyte 2.9.0.0-b4 for linux/amd64 docker pull yugabytedb/yugabyte@sha256:974219f34a18afde9517b27f3b81403c3a08f6908cbf8d7b717097b93b11583d # keycloak-x 15.0.2 for linux/amd64 docker pull quay.io/keycloak/keycloak-x@sha256:a6b7be1808b8443dde696c5f108be1cb6e7641d6b281ef7598df012c1d6871f8
Nota: Los comentarios agregados arriba solo para mejorar la legibilidad.
Bueno, eso depende de su caso de uso. Una pauta general que utilizo para mis flujos de trabajo es:
name
o name:tag
.name@sha256:digest
para extraer su(s) imagen(es) base(s). Esto asegura que se construya la misma imagen final en cualquier máquina.name:tag
donde una etiqueta representa un número de versión, por ejemplo, v21.10.1
. Evite usar la etiqueta latest
, ya que dificulta las reversiones.name@sha256:digest
si es posible. Si elige usar name:tag
, tenga en cuenta que las etiquetas se pueden reutilizar. Evite usar la etiqueta latest
, ya que dificulta las reversiones.name
o name:tag
o name@sha256:digest
.name
o name:tag
descargará automáticamente la imagen adecuada para el sistema operativo/arquitectura en el que se ejecuta el comando de extracción.docker manifest inspect --verbose <name:tag>
para ver los sistemas operativos/arquitecturas de una imagen y obtener el resumen.name@sha256:digest
para descargar la misma imagen en cualquier sistema operativo/arquitectura.latest
en un entorno de producto, ya que dificulta las reversiones.
Gracias por tomarse el tiempo para leer este artículo. Espero que la información aquí lo ayude con la extracción de imágenes para sus casos de uso y flujos de trabajo.