Cómo funcionan las capas de una imagen Docker

como-funcionan-las-capas-de-una-imagen-docker
como-funcionan-las-capas-de-una-imagen-docker

Las capas explican cómo Docker construye una imagen por etapas, reutiliza partes entre builds y conserva los cambios del sistema de archivos. Entenderlas ayuda a diagnosticar por qué una imagen ocupa espacio y por qué borrar un archivo después no siempre reduce su tamaño.

Una imagen combina configuración y una secuencia ordenada de capas de solo lectura. Cada capa registra diferencias respecto a la anterior: archivos añadidos, modificados o eliminados. Las capas son inmutables; una nueva construcción añade cambios encima en lugar de editar las capas ya existentes.

👉 Y recuerda, si quieres aprender más de Linux, visita curso de Linux gratis.

🐳 Si quieres aprender más de Docker, visita curso de Docker gratis.

Qué es una capa de imagen Docker

La instrucción FROM establece la imagen base. Durante la construcción, instrucciones como RUN, COPY y ADD que cambian el sistema de archivos producen capas con esos cambios. Otras, como ENV, CMD, ENTRYPOINT y LABEL, modifican la configuración o el historial de la imagen sin añadir archivos a su sistema de archivos.

La reutilización reduce descargas y almacenamiento local: distintas imágenes pueden referirse a las mismas capas base sin guardar copias idénticas. Durante una nueva construcción, Docker también puede reutilizar resultados de caché cuando coinciden la instrucción y sus entradas. Si cambia una instrucción o un archivo usado por COPY o ADD, se vuelve a construir esa capa y las posteriores.

Instrucción o elementoEfectoEjemplo
FROMSelecciona una imagen base y parte de sus capas existentes.FROM alpine:3.20
RUNGuarda los cambios del sistema de archivos que produce el comando.RUN apk add –no-cache curl
COPY y ADDAñaden archivos al sistema de archivos de la imagen; ADD también admite algunas fuentes y extracciones adicionales.COPY app/ /app/
ENV, CMD, ENTRYPOINT y LABELActualizan configuración o metadatos; no añaden archivos al sistema de archivos.CMD [«sh»]

Qué relación tienen las capas con el Dockerfile

El Dockerfile describe esos pasos en orden. Cada capa de archivos depende de las anteriores, por eso conviene saber qué instrucciones guardan cambios y cuáles solo definen cómo se ejecutará el contenedor.

FROM alpine:3.20
RUN apk add --no-cache curl
COPY app/ /app/
CMD ["sh"]

En este ejemplo, FROM selecciona Alpine, RUN instala curl y COPY incorpora la carpeta de la aplicación. Para que COPY funcione, app/ debe estar dentro del contexto de construcción y no quedar excluida por .dockerignore. CMD define el comando predeterminado del contenedor, pero no añade archivos. Si cambia un archivo de app/, Docker invalida la caché desde COPY y vuelve a evaluar los pasos posteriores; las capas anteriores que sigan coincidiendo se pueden reutilizar.

Por qué las capas afectan al tamaño

Una capa nueva puede marcar como eliminados archivos de capas anteriores, pero no modifica esas capas inmutables. Por eso, instalar archivos temporales en una instrucción y borrarlos en otra posterior puede dejar ambos cambios dentro de la imagen y conservar parte del tamaño.

RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*

El ejemplo instala curl y elimina los índices descargados en la misma instrucción RUN. Así esos archivos temporales no quedan guardados en la capa final. Separar la limpieza en otro RUN añade otra capa: la marca de borrado no recupera el espacio ocupado en la capa anterior.

Cómo ver capas de una imagen

El comando docker history muestra el historial asociado a la imagen, las instrucciones de construcción y el tamaño atribuido a cada entrada. Algunas entradas pueden mostrar 0B porque registran configuración; además, las imágenes pueden compartir capas, así que la suma del historial no equivale necesariamente al espacio único ocupado en el disco.

docker history nginx:alpine

Usa este resultado como punto de partida: compara las instrucciones que introdujeron cambios grandes y revisa si incorporan dependencias, artefactos o archivos temporales innecesarios. El historial no es una auditoría de seguridad ni muestra por sí solo todas las capas almacenadas o compartidas.

Errores comunes con las capas

Copiar todo el proyecto antes de instalar dependencias puede invalidar la caché de instalación cada vez que cambia un archivo de la aplicación. Separar archivos de dependencias y código suele conservar más capas reutilizables; el orden exacto depende del lenguaje y del gestor de paquetes.

Otro error es copiar credenciales a la imagen y borrarlas después: el archivo puede permanecer en una capa anterior, aunque ya no aparezca en el sistema de archivos final. No incluyas secretos en capas; utiliza mecanismos de secretos de build o inyecta las credenciales al ejecutar el contenedor.

La capa escribible de un contenedor

La imagen conserva sus capas de solo lectura. Al iniciar un contenedor, Docker añade encima una capa escribible propia para los archivos que crea o modifica durante la ejecución. Esa capa pertenece al contenedor, no cambia la imagen original y desaparece al eliminar el contenedor.

Para datos que deban conservarse al reemplazar un contenedor, utiliza un volumen o un bind mount. Así los datos quedan fuera de la capa efímera del contenedor y pueden compartirse o gestionarse por separado.

Lecciones relacionadas del curso Docker

Documentación oficial y recursos

Comentarios

No hay comentarios aún. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *