docker-tags-alpine-latest

Qué son las Tags en Docker

  • 5 min

Un tag de Docker es una etiqueta que identifica una variante de una imagen dentro de un mismo repositorio.

Cuando visitas Docker Hub para buscar algo en teoría sencillo como Node.js o Python, no encuentras un único botón de descarga.

En su lugar, te topas con un listado enorme de opciones (node:latest, node:20, node:20-alpine, node:20-bookworm-slim…). ¿Cuál elijo? ¿Qué diferencia hay? ¿Es mejor la que pesa menos?

En este artículo vamos a aprender a navegar por el “Supermercado de Docker” y a entender el etiquetado para elegir siempre la mejor opción para tu proyecto.

¿Qué es un Tag?

Un Tag es simplemente una cadena de texto que identifica una versión específica de una imagen. Se coloca después de los dos puntos :.

nombre_imagen:tag
Copied!

Si no pones nada, Docker asume implícitamente :latest.

Los “Sabores” de las imágenes: Full, Slim y Alpine

Aparte del número de versión (18, 20), solemos ver sufijos que indican el sistema operativo base que lleva la imagen por debajo.

Vamos a compararlas usando Python como ejemplo.

La versión estándar (ej: python:3.10)

Si eliges la etiqueta que solo tiene el número de versión, normalmente estás bajando una imagen basada en Debian “completo”.

  • Ventajas: Tiene de todo. Librerías comunes, herramientas de sistema, compiladores… Es la más compatible. Casi cualquier cosa que instales funcionará.
  • Desventajas: Es pesada. Puede ocupar 800MB - 1GB fácilmente. Además, al tener tantas cosas, tiene más superficie de ataque (vulnerabilidades de seguridad).

La versión slim (ej: python:3.10-slim)

Sigue estando basada en Debian, pero le han quitado todo lo “superfluo” (páginas de manual, herramientas de documentación, compiladores no esenciales).

  • Ventajas: Mucho más ligera (unos 150MB - 200MB). Mantiene buena compatibilidad porque sigue siendo Debian.
  • Desventajas: Si necesitas compilar alguna librería nativa compleja, puede que te falte alguna herramienta y tengas que instalarla manualmente.

La versión alpine (ej: python:3.10-alpine)

Con alpine entramos en terreno más delicado. Alpine Linux es una distribución minimalista pensada para ser muy pequeña.

  • Ventajas: Es ridículamente pequeña (¡50MB!). Es muy segura y rápida de transferir por la red.
  • Desventajas: NO usa la librería estándar de C (glibc) que usan Ubuntu o Debian, sino una alternativa llamada musl.
  • Esto significa que si tu aplicación usa librerías compiladas en C (común en Python o Node), pueden fallar o tendrás que recompilarlas desde cero, lo que hace que el proceso de build sea lentísimo.

Para que veas la diferencia real, mira lo que ocupan estas imágenes de Node.js (datos aproximados):

TagBase OSTamañoRecomendación
node:20Debian (Full)~1 GBDesarrollo / Primeras pruebas
node:20-slimDebian (Recortado)~200 MBProducción (Equilibrado)
node:20-alpineAlpine Linux~50 MBUsuarios avanzados / Microservicios

Entendiendo los nombres raros (Bullseye, Bookworm…)

A veces verás cosas como node:20-bullseye o node:20-bookworm. Estos nombres se refieren a la versión específica de Debian que hay debajo.

  • buster = Debian 10
  • bullseye = Debian 11
  • bookworm = Debian 12

¿Por qué es útil esto? Si quieres asegurar la máxima estabilidad, te interesa fijar no solo la versión de Node, sino también la del sistema operativo. Usando node:20-bullseye te aseguras de que el SO base no cambie de golpe.

¿Cuál debo elegir?

  1. Para empezar y aprender: Usa la versión estándar (python:3.10 o node:20). No te compliques la vida optimizando megas ahora. Quieres que funcione.
  2. Para Producción (General): Usa las versiones -slim. Son el equilibrio perfecto entre tamaño y compatibilidad. Es raro que te den problemas.
  3. Para Expertos / Go / Rust: Si usas lenguajes que compilan a binario estático (como Go) o controlas mucho las dependencias, usa Alpine. Esos 100MB de ahorro se notan si tienes 50 microservicios.
  4. Para Python/Data Science: ¡Cuidado con Alpine! Muchas librerías de ciencia de datos (Pandas, Numpy) sufren en Alpine. Aquí mejor slim.

El comando docker tag

El comando docker tag se utiliza para asignar una nueva etiqueta a una imagen existente. No crea una nueva imagen, sino que simplemente asocia una nueva etiqueta a la misma imagen subyacente.

La sintaxis del comando docker tag es la siguiente:

docker tag IMAGEN_ORIGEN NUEVA_ETIQUETA
Copied!

Donde:

  • IMAGEN_ORIGEN: Es la imagen existente que deseas etiquetar. Puede ser el ID de la imagen o su nombre y etiqueta actual.
  • NUEVA_ETIQUETA: Es el nuevo nombre y etiqueta que deseas asignar.