Almacenamiento
El almacenamiento de Docker abarca dos conceptos diferentes:
Persistencia de datos del contenedor (esta página): Cómo almacenar datos de aplicaciones fuera de los contenedores utilizando volúmenes, montajes de tipo bind y montajes tmpfs. Estos datos persisten independientemente del ciclo de vida del contenedor.
Backends de almacenamiento del demonio (almacén de imágenes de containerd y controladores de almacenamiento): Cómo almacena el demonio las capas de imagen y las capas de escritura del contenedor en el disco.
Esta página se centra en la persistencia de datos del contenedor. Para obtener información sobre cómo almacena Docker las imágenes y las capas de contenedor, consulta almacén de imágenes de containerd o Controladores de almacenamiento.
Conceptos básicos de la capa del contenedor
Por defecto, todos los archivos creados dentro de un contenedor se almacenan en una capa de contenedor de escritura que se sitúa por encima de las capas de imagen inmutables y de solo lectura.
Los datos escritos en la capa de escritura del contenedor no persisten cuando el contenedor se destruye. Esto significa que puede ser difícil extraer los datos del contenedor si otro proceso los necesita.
La capa de escritura es única para cada contenedor. No es sencillo extraer los datos de la capa de escritura al anfitrión o a otro contenedor.
Opciones de montaje de almacenamiento
Docker admite los siguientes tipos de montajes de almacenamiento para guardar datos fuera de la capa de escritura del contenedor:
Independientemente del tipo de montaje que elijas utilizar, los datos se ven iguales desde el interior del contenedor. Se exponen como un directorio o como un archivo individual en el sistema de archivos del contenedor.
Montajes de volumen
Los volúmenes son mecanismos de almacenamiento persistente gestionados por el demonio de Docker. Conservan los datos incluso después de que se eliminen los contenedores que los utilizan. Los datos del volumen se almacenan en el sistema de archivos del anfitrión, pero para interactuar con los datos del volumen, debes montar el volumen en un contenedor. Acceder o interactuar directamente con los datos del volumen es un comportamiento no admitido e indefinido, y puede provocar que el volumen o sus datos se rompan de formas inesperadas.
Los volúmenes son ideales para el procesamiento de datos críticos para el rendimiento y para necesidades de almacenamiento a largo plazo. Dado que la ubicación de almacenamiento se gestiona en el anfitrión del demonio, los volúmenes proporcionan el mismo rendimiento de archivos brutos que acceder directamente al sistema de archivos del anfitrión.
Montajes de tipo bind
Los montajes de tipo bind crean un enlace directo entre una ruta del sistema anfitrión y un contenedor, permitiendo el acceso a archivos o directorios almacenados en cualquier lugar del anfitrión. Dado que no están aislados por Docker, tanto los procesos que no son de Docker en el anfitrión como los procesos del contenedor pueden modificar los archivos montados simultáneamente.
Utiliza montajes de tipo bind cuando necesites poder acceder a los archivos tanto desde el contenedor como desde el anfitrión.
Montajes tmpfs
Un montaje tmpfs almacena archivos directamente en la memoria de la máquina anfitriona, garantizando que los datos no se escriban en el disco. Este almacenamiento es efímero: los datos se pierden cuando el contenedor se detiene o se reinicia, o cuando se reinicia el anfitrión. Los montajes tmpfs no persisten los datos ni en el anfitrión de Docker ni dentro del sistema de archivos del contenedor.
Estos montajes son adecuados para escenarios que requieren almacenamiento temporal en memoria, como el almacenamiento en caché de datos intermedios, la gestión de información confidencial como credenciales o la reducción de E/S de disco. Utiliza montajes tmpfs únicamente cuando los datos no necesiten persistir más allá de la sesión actual del contenedor.
Tuberías con nombre
Tuberías con nombre (named pipes) se pueden utilizar para la comunicación entre el anfitrión de Docker y un contenedor. Un caso de uso común es ejecutar una herramienta de terceros dentro de un contenedor y conectarse a la API de Docker Engine utilizando una tubería con nombre.
Siguientes pasos
Aprende más sobre la persistencia de datos del contenedor:
Aprende más sobre los backends de almacenamiento del demonio: