Conceptos de almacenamiento para contenedores

Completado

Los contenedores de Windows usan almacenamiento efímero (espacio temporal) de forma predeterminada para todas las entradas y salidas. Cada contenedor tiene su propio espacio temporal, en el que se capturan todas las escrituras de archivo y la creación de archivos, de modo que no se pierdan del host. Cuando se elimina una instancia de contenedor, se descartan todos los cambios que se produjeron en el espacio de desecho. Cuando se inicia una nueva instancia de contenedor, se proporciona un nuevo espacio de desecho para la instancia.

Almacenamiento de capas

Todos los contenedores se crean a partir de imágenes de contenedor. Una imagen de contenedor es un conjunto de archivos organizados en una pila de capas (denominada almacenamiento de capas), que reside en el equipo local o en un registro de contenedor remoto. La imagen de contenedor consta de los archivos del sistema operativo en modo de usuario necesarios para:

  • La compatibilidad con la aplicación
  • Cualquier runtime de la aplicación
  • Las dependencias de la aplicación
  • Cualquier otro archivo de configuración que la aplicación necesite para ejecutarse correctamente

En un entorno de Windows, las capas se almacenan mediante CimFS y se admiten en NTFS (New Technology File System), ReFS o RefDisks para el almacenamiento de capas. Puede cambiar dónde se almacenan los archivos mediante la configuración docker-root (o equivalente para el contenedor), pero no debe modificar ningún archivo en los directorios de capa. Se administran cuidadosamente mediante Docker (o comandos equivalentes).

Almacenamiento persistente

Es posible que tenga casos en los que la aplicación necesite datos persistentes en un contenedor. O bien, puede que desee almacenar archivos en un contenedor, que no se incluyeron durante el tiempo de compilación del contenedor. Puede proporcionar almacenamiento persistente a los contenedores de Windows de dos maneras:

  • Enlazar montajes
  • Volúmenes con nombre

Enlazar montajes

Los montajes de enlace permiten que un contenedor comparta un directorio con el host mediante la asignación de un directorio en el host a un directorio dentro del contenedor. Los montajes de enlace son útiles si desea que una ubicación almacene archivos en el equipo local, que estén disponibles si reinicia un contenedor y pierde el espacio temporal. O bien, si quiere compartir un archivo con varios contenedores.

Si quiere que un contenedor se ejecute en varias máquinas con acceso a los mismos archivos, en su lugar, se debe usar un volumen con nombre o montaje de SMB (Server Message Block). Es importante que no enlace directorios confidenciales con montaje, como C:\ en un contenedor que no es de confianza. Este enlace le permitiría cambiar archivos en el host al que normalmente no tendría acceso y que podría crear una infracción de seguridad.

En el ejemplo siguiente, se muestra el comando de Docker para crear un montaje de enlace en la carpeta C:\ContainerData en el host, para C:\data dentro del contenedor, con acceso de lectura y escritura predeterminado:

docker run -v c:\ContainerData:c:\data

Volúmenes con nombre

Los volúmenes con nombre te permiten crear un volumen según el nombre, asignarle a un contenedor y reutilizarlo más adelante con el mismo nombre. Los volúmenes proporcionan una manera de crear y administrar una ubicación especial en el host dedicado al almacenamiento de datos del contenedor. No tienes que realizar un seguimiento de la ruta de acceso real de dónde se creó, solo el nombre.

Docker Engine en Windows tiene un complemento de volumen con nombre integrado que puede crear volúmenes en la máquina local. Si desea usar volúmenes con nombre en varias máquinas, se requiere otro complemento.

En el ejemplo siguiente se muestran los comandos de Docker para crear e iniciar un contenedor denominado mycontainer que se asigna al volumen c:datalocal:

docker volume create myvolume docker run -v myvolume:c:\data microsoft/windowsservercore

Aunque los montajes de enlace dependen de la estructura de directorios y del sistema operativo (SO) de la máquina host, Docker administra completamente los volúmenes. Los volúmenes tienen varias ventajas sobre los montajes de enlace:

  • Es más fácil de realizar copias de seguridad de los volúmenes, o migrarlos, que hacerlo con los montajes de enlace.
  • Puede administrar volúmenes mediante comandos de la CLI de Docker o la API de Docker.
  • Los volúmenes funcionan en contenedores de Linux y Windows.
  • Los volúmenes se pueden compartir entre varios contenedores de forma más segura.
  • Los controladores de volúmenes permiten almacenar volúmenes en hosts remotos o proveedores de nube, cifrar su contenido o agregar otras funcionalidades.
  • Un contenedor puede rellenar previamente el contenido de los nuevos volúmenes.

Además, los volúmenes suelen ser una mejor opción que conservar los datos en la capa grabable de un contenedor (espacio temporal). Un volumen no aumenta el tamaño de los contenedores que lo usan (al igual que el montaje de enlace) y el contenido del volumen existe fuera del ciclo de vida de un contenedor determinado.