Compartir comentarios
Las respuestas se generan en base a la documentación.

Seleccionar un controlador de almacenamiento

Idealmente, se escriben muy pocos datos en la capa de escritura de un contenedor y se utilizan volúmenes de Docker para escribir datos. Sin embargo, algunas cargas de trabajo requieren que puedas escribir en la capa de escritura del contenedor. Aquí es donde entran en juego los controladores de almacenamiento.

Note

Docker Engine 29.0 y versiones posteriores utilizan el almacén de imágenes de containerd de forma predeterminada para instalaciones nuevas. Si has actualizado desde una versión anterior, tu demonio continuará utilizando los controladores de almacenamiento clásicos descritos en esta página. Puedes migrar al almacén de imágenes de containerd siguiendo las instrucciones en la documentación del almacén de imágenes de containerd.

Docker admite varios controladores de almacenamiento mediante una arquitectura de plugins (pluggable architecture). El controlador de almacenamiento controla cómo se almacenan y gestionan las imágenes y los contenedores en tu host Docker. Después de leer la introducción a los controladores de almacenamiento, el siguiente paso es elegir el mejor controlador de almacenamiento para tus cargas de trabajo. Utiliza el controlador de almacenamiento con el mejor rendimiento general y estabilidad en los escenarios más habituales.

Note

Esta página analiza los controladores de almacenamiento para Docker Engine en Linux. Si estás ejecutando el demonio de Docker con Windows como sistema operativo host, el único controlador de almacenamiento compatible es windowsfilter. Para obtener más información, consulta windowsfilter.

Docker Engine proporciona los siguientes backends de almacenamiento en Linux:

BackendDescripción
containerd (snapshotters)El predeterminado para Docker Engine 29.0 y versiones posteriores. Utiliza snapshotters de containerd para el almacenamiento de imágenes. Admite imágenes multi-plataforma y atestaciones (attestations). Consulta almacén de imágenes de containerd para más detalles.
overlay2Controlador de almacenamiento clásico. El de mayor compatibilidad en todas las distribuciones de Linux actualmente admitidas y no requiere configuración adicional.
fuse-overlayfsPreferido únicamente para ejecutar Rootless Docker en hosts que no admiten overlay2 sin privilegios de root (rootless). Ya no es necesario desde el kernel de Linux 5.11, ya que overlay2 funciona en modo rootless. Consulta la documentación del modo rootless para más detalles.
btrfs y zfsPermiten opciones avanzadas, como la creación de snapshots, pero requieren más mantenimiento y configuración. Cada uno depende de que el sistema de archivos de respaldo esté configurado correctamente.
vfsDestinado a fines de prueba y para situaciones donde no se puede utilizar ningún sistema de archivos copy-on-write. El rendimiento es bajo y, por lo general, no se recomienda para su uso en producción.

Docker Engine tiene una lista prioritaria del controlador de almacenamiento a utilizar si no se configura ninguno explícitamente, asumiendo que el controlador cumple con los requisitos previos, y selecciona automáticamente uno compatible. Puedes ver el orden en el código fuente de Docker Engine 29.5.1.

Algunos controladores de almacenamiento requieren que utilices un formato específico para el sistema de archivos de respaldo. Si tienes requisitos externos para utilizar un sistema de archivos de respaldo específico, esto puede limitar tus opciones. Consulta Sistemas de archivos de respaldo compatibles.

Una vez que hayas reducido los controladores de almacenamiento entre los que puedes elegir, tu elección estará determinada por las características de tu carga de trabajo y el nivel de estabilidad que necesites. Consulta Otras consideraciones para ayudarte a tomar la decisión final.

Controladores de almacenamiento compatibles por distribución de Linux

Note

Modificar el controlador de almacenamiento editando el archivo de configuración del demonio no es compatible con Docker Desktop. Docker Desktop utiliza el almacén de imágenes de containerd de forma predeterminada (versión 4.34 y posteriores para instalaciones limpias). La siguiente tabla tampoco se aplica a Docker Engine en modo rootless. Para los controladores disponibles en el modo rootless, consulta la documentación del modo Rootless.

Esta sección se aplica únicamente a los controladores de almacenamiento clásicos. Si estás utilizando el almacén de imágenes de containerd (el predeterminado para Docker Engine 29.0+), consulta la documentación del almacén de imágenes de containerd en su lugar.

Es posible que tu sistema operativo y tu kernel no admitan todos los controladores de almacenamiento clásicos. Por ejemplo, btrfs solo es compatible si tu sistema utiliza btrfs como almacenamiento. En general, las siguientes configuraciones funcionan en versiones recientes de las distribuciones de Linux:

Distribución de LinuxControlador clásico predeterminadoControladores alternativos
Ubuntuoverlay2zfs, vfs
Debianoverlay2vfs
CentOSoverlay2zfs, vfs
Fedoraoverlay2zfs, vfs
SLES 15overlay2vfs
RHELoverlay2vfs

Para los sistemas que utilizan controladores de almacenamiento clásicos, overlay2 proporciona una amplia compatibilidad entre distribuciones de Linux. Utiliza volúmenes de Docker para cargas de trabajo con un uso intensivo de escritura en lugar de depender de la escritura de datos en la capa de escritura del contenedor.

El controlador de almacenamiento vfs no suele ser la mejor opción y está destinado principalmente a fines de depuración en situaciones en las que no se admite ningún otro controlador de almacenamiento. Antes de usar el controlador de almacenamiento vfs, asegúrate de leer sobre sus características y limitaciones de rendimiento y almacenamiento.

Se sabe que las recomendaciones de la tabla anterior funcionan para una gran cantidad de usuarios. Si utilizas una configuración recomendada y encuentras un problema reproducible, es muy probable que se solucione rápidamente. Si el controlador que deseas utilizar no se recomienda según esta tabla, puedes ejecutarlo bajo tu propio riesgo. Aún puedes y debes informar de cualquier problema con el que te encuentres. Sin embargo, dichos problemas tendrán una prioridad menor que los encontrados al utilizar una configuración recomendada.

Dependiendo de tu distribución de Linux, otros controladores de almacenamiento, como btrfs, pueden estar disponibles. Estos controladores de almacenamiento pueden tener ventajas para casos de uso específicos, pero pueden requerir configuración o mantenimiento adicionales, por lo que no se recomiendan para escenarios comunes. Consulta la documentación de esos controladores de almacenamiento para más detalles.

Sistemas de archivos de respaldo compatibles

En lo que respecta a Docker, el sistema de archivos de respaldo (backing filesystem) es el sistema de archivos donde se encuentra /var/lib/docker/. Algunos controladores de almacenamiento solo funcionan con sistemas de archivos de respaldo específicos.

Controlador de almacenamientoSistemas de archivos de respaldo compatibles
overlay2xfs con ftype=1, ext4, btrfs, (y más)
fuse-overlayfscualquier sistema de archivos
btrfsbtrfs
zfszfs
vfscualquier sistema de archivos
Note

La mayoría de los sistemas de archivos deberían funcionar si cuentan con las características necesarias. Consulta OverlayFS para obtener más información.

Otras consideraciones

Idoneidad para tu carga de trabajo

Entre otras cosas, cada controlador de almacenamiento tiene sus propias características de rendimiento que lo hacen más o menos adecuado para diferentes cargas de trabajo. Considera las siguientes generalizaciones:

  • overlay2 opera a nivel de archivo en lugar de a nivel de bloque. Esto utiliza la memoria de manera más eficiente, pero la capa de escritura del contenedor puede crecer bastante en cargas de trabajo con un uso intensivo de escritura.
  • Los controladores de almacenamiento a nivel de bloque como btrfs y zfs funcionan mejor para cargas de trabajo con uso intensivo de escritura (aunque no tanto como los volúmenes de Docker).
  • btrfs y zfs requieren mucha memoria.
  • zfs es una buena opción para cargas de trabajo de alta densidad como PaaS.

Más información sobre el rendimiento, la idoneidad y las buenas prácticas está disponible en la documentación de cada controlador de almacenamiento.

Sistemas de almacenamiento compartido y el controlador de almacenamiento

Si utilizas SAN, NAS, RAID de hardware u otros sistemas de almacenamiento compartido, dichos sistemas pueden proporcionar alta disponibilidad, mayor rendimiento, aprovisionamiento dinámico, deduplicación y compresión. En muchos casos, Docker puede funcionar sobre estos sistemas de almacenamiento, pero Docker no se integra estrechamente con ellos.

Cada controlador de almacenamiento de Docker se basa en un sistema de archivos de Linux o un administrador de volúmenes. Asegúrate de seguir las buenas prácticas existentes para operar tu controlador de almacenamiento (sistema de archivos o administrador de volúmenes) sobre tu sistema de almacenamiento compartido. Por ejemplo, si usas el controlador de almacenamiento ZFS sobre un sistema de almacenamiento compartido, asegúrate de seguir las buenas prácticas para operar sistemas de archivos ZFS sobre ese sistema de almacenamiento compartido específico.

Estabilidad

Para algunos usuarios, la estabilidad es más importante que el rendimiento. Aunque Docker considera que todos los controladores de almacenamiento aquí mencionados son estables, algunos son más recientes y aún se encuentran bajo desarrollo activo. En general, overlay2 proporciona la mayor estabilidad.

Probar con tus propias cargas de trabajo

Puedes probar el rendimiento de Docker al ejecutar tus propias cargas de trabajo en diferentes controladores de almacenamiento. Asegúrate de utilizar hardware y cargas de trabajo equivalentes para coincidir con las condiciones de producción, de modo que puedas ver qué controlador de almacenamiento ofrece el mejor rendimiento general.

Comprobar tu controlador de almacenamiento actual

La documentación detallada de cada controlador de almacenamiento de forma individual describe todos los pasos de configuración para utilizar un controlador determinado.

Para ver qué controlador de almacenamiento está utilizando Docker actualmente, utiliza docker info y busca la línea Storage Driver:

$ docker info

Containers: 0
Images: 0
Storage Driver: overlay2
 Backing Filesystem: xfs
<...>

Para cambiar el controlador de almacenamiento, consulta las instrucciones específicas para el nuevo controlador. Algunos controladores requieren configuración adicional, incluyendo la configuración de discos físicos o lógicos en el host Docker.

Important

Al cambiar el controlador de almacenamiento, las imágenes y contenedores existentes quedan inaccesibles. Esto se debe a que el nuevo controlador de almacenamiento no puede utilizar sus capas. Si reviertes los cambios, podrás volver a acceder a las imágenes y contenedores antiguos, pero las que hayas descargado o creado con el nuevo controlador quedarán inaccesibles.

Información relacionada