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
oname: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 etiquetalatest
, 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 usarname:tag
, tenga en cuenta que las etiquetas se pueden reutilizar. Evite usar la etiquetalatest
, ya que dificulta las reversiones.
- Si la imagen fue creada por su equipo (o empresa), está bien usar
Resumen rápido
- Una imagen acoplable generalmente tiene 3 partes: nombre, etiqueta y resumen.
- Las imágenes se pueden extraer usando
name
oname:tag
oname@sha256:digest
. - Algunas imágenes son imágenes de múltiples arquitecturas. Extraer una imagen de varias arquitecturas usando
name
oname: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.