Información general sobre el almacenamiento de contenedores

En este tema se ofrece información general sobre las diferentes formas en que los contenedores usan el almacenamiento en Windows. Los contenedores se comportan de manera diferente que las máquinas virtuales en relación con el almacenamiento. Por naturaleza, los contenedores se crean para evitar que una aplicación que se ejecuta en ellos escriba el estado en todo el sistema de archivos del host. De forma predeterminada, los contenedores usan un espacio "temporal", pero Windows también proporciona un medio para conservar el almacenamiento.

Espacio de desecho

Los contenedores de Windows usan un almacenamiento efímero de forma predeterminada. Todas las E/S de contenedor tienen lugar en un "espacio de desecho", y cada contenedor obtiene su propio desecho. La creación de archivos y las escrituras de archivos se capturan en el espacio de desecho y no escapan al host. Cuando se detiene 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 en capas

Como se describe en la información general sobre los contenedores, las imágenes de contenedor son un paquete de archivos expresado como una serie de capas. El almacenamiento en capas son todos los archivos que están integrados en el contenedor. Cada vez que docker pull, docker run dicho contenedor: son iguales.

Dónde se almacenan las capas y cómo cambiarlo

En una instalación predeterminada, las capas se almacenan en C:\ProgramData\docker y se distribuyen en los directorios "image" y "windowsfilter". Puedes cambiar la ubicación donde se almacenan las capas con la configuración docker-root, tal y como se indica en la documentación de Docker Engine en Windows.

Nota

NTFS solo es compatible con el almacenamiento en capas. No se admiten ReFS y volúmenes compartidos de clúster (CSV).

No debes modificar los archivos de los directorios de capa: se administran cuidadosamente con comandos tales como:

Operaciones compatibles en el almacenamiento en capas

Ejecutar contenedores puede usar la mayoría de las operaciones de NTFS a excepción de las transacciones. Esto incluye la configuración de ACL y todas las ACL se comprueban dentro del contenedor. Si quieres ejecutar procesos como varios usuarios dentro de un contenedor, puedes crear usuarios en tu Dockerfile con RUN net user /create ..., establece las ACL de archivos y luego configura procesos para ejecutar con dicho usuario con la Directiva de USUARIO de Dockerfile.

Almacenamiento persistente

Los contenedores de Windows admiten mecanismos para proporcionar almacenamiento persistente a través de enlace de montajes y volúmenes. Para obtener más información, consulta Almacenamiento persistente en contenedores.

Límites de almacenamiento

Un patrón común para las aplicaciones Windows es consultar la cantidad de espacio de disco libre antes de instalar o crear nuevos archivos o como un desencadenador para limpiar los archivos temporales. Con el objetivo de maximizar la compatibilidad de aplicaciones, la unidad C: de un contenedor de Windows representa un tamaño de espacio libre virtual de 20 GB.

Algunos usuarios pueden querer invalidar este valor predeterminado y configurar el espacio libre en un valor menor o mayor. Esto puede hacerse a través de la opción "size" dentro de la configuración "storage-opt".

Ejemplo

Línea de comandos: docker run --storage-opt "size=50GB" mcr.microsoft.com/windows/servercore:ltsc2019 cmd

O bien, puedes cambiar el archivo de configuración de Docker directamente:

"storage-opts": [
    "size=50GB"
  ]

Sugerencia

Este método funciona también para la compilación de Docker. Consulta el documento configurar docker para obtener más información sobre cómo modificar el archivo de configuración docker.