paint-brush
Imágenes de Docker: nombre vs. Etiqueta vs. Digerirpor@vijaysavanth
45,636 lecturas
45,636 lecturas

Imágenes de Docker: nombre vs. Etiqueta vs. Digerir

por Vijay Savanth2021/09/26
Read on Terminal Reader
Read this story w/o Javascript

Demasiado Largo; Para Leer

Una imagen acoplable generalmente tiene 3 partes: nombre, etiqueta y resumen. Las imágenes se pueden extraer usando nombre, o nombre:etiqueta o nombre@sha256:resumen. Algunas imágenes son imágenes de múltiples arquitecturas. 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 la ventana acoplable manifest inspect --verbose <name:tag> para ver los sistemas operativos/arquitecturas de una imagen y obtener el resumen. Evite usar la etiqueta más reciente en un entorno de producto, ya que dificulta las reversiones.

Company Mentioned

Mention Thumbnail
featured image - Imágenes de Docker: nombre vs. Etiqueta vs. Digerir
Vijay Savanth HackerNoon profile picture

Los basicos

Una imagen docker ejemplar tiene las siguientes 3 partes:


  • Nombre (obligatorio, especificado por el usuario en el momento de la compilación)
  • Etiqueta (opcional, especificada por el usuario en el momento de la compilación)
  • Resumen (generado automáticamente en el momento de la compilación)

Extrae una imagen usando el nombre

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.

Tire de una imagen usando nombre: etiqueta

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.


Tirando de una imagen usando name@sha256:digest

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.

Entonces, ¿qué debes usar?

Bueno, eso depende de su caso de uso. Una pauta general que utilizo para mis flujos de trabajo es:


  • ¿Experimentando en su máquina local? Está bien extraer usando name o name:tag .
  • ¿Construyendo una imagen para la producción? Use name@sha256:digest para extraer su(s) imagen(es) base(s). Esto asegura que se construya la misma imagen final en cualquier máquina.
  • ¿Implementar una imagen en un entorno de producción?
    • Si la imagen fue creada por su equipo (o empresa), está bien usar 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.
    • Si la imagen no fue creada por su equipo (o empresa), use 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.

Resumen rápido

  • Una imagen acoplable generalmente tiene 3 partes: nombre, etiqueta y resumen.
  • Las imágenes se pueden extraer usando name o name:tag o name@sha256:digest .
  • Algunas imágenes son imágenes de múltiples arquitecturas. Extraer una imagen de varias arquitecturas usando 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.
  • Use la docker manifest inspect --verbose <name:tag> para ver los sistemas operativos/arquitecturas de una imagen y obtener el resumen.
  • Extraiga una imagen usando name@sha256:digest para descargar la misma imagen en cualquier sistema operativo/arquitectura.
  • Evite usar la etiqueta 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.