Modos de aislamientoIsolation Modes

Los contenedores de Windows ofrecen dos modos distintos de aislamiento en tiempo de ejecución: aislamiento process y Hyper-V.Windows containers offer two distinct modes of runtime isolation: process and Hyper-V isolation. Los contenedores que se ejecutan en ambos modos de aislamiento se crean, administran y funcionan de forma idéntica.Containers running under both isolation modes are created, managed, and function identically. También generan y usan las mismas imágenes del contenedor.They also produce and consume the same container images. La diferencia entre los modos de aislamiento radica en el grado de aislamiento que se crea entre el contenedor, el sistema operativo host y todos los demás contenedores que se ejecutan en ese host.The difference between the isolation modes is to what degree of isolation is created between the container, the host operating system, and all of the other containers running on that host.

Aislamiento de procesosProcess Isolation

Este es el modo de aislamiento "tradicional" para los contenedores y es lo que se describe en la información general sobre los contenedores de Windows.This is the "traditional" isolation mode for containers and is what is described in the Windows containers overview. Con el aislamiento de procesos, varias instancias de contenedor pueden ejecutarse simultáneamente en un host dado con aislamiento proporcionado a través de tecnologías de aislamiento de procesos, espacios de nombres y control de recursos.With process isolation, multiple container instances run concurrently on a given host with isolation provided through namespace, resource control, and process isolation technologies. Al ejecutarse en este modo, los contenedores comparten el mismo kernel con el host y también entre sí.When running in this mode, containers share the same kernel with the host as well as each other. Esto equivale aproximadamente al modo en que se ejecutan los contenedores de Linux.This is approximately the same as how Linux containers run.

Aislamiento de Hyper-VHyper-V isolation

Este modo de aislamiento ofrece seguridad mejorada y mayor compatibilidad entre las versiones del host y del contenedor.This isolation mode offers enhanced security and broader compatibility between host and container versions. Con el aislamiento de Hyper-V, varias instancias de contenedor se ejecutan simultáneamente en un host; sin embargo, cada contenedor se ejecuta dentro de una máquina virtual altamente optimizada y, de hecho, obtiene su propio kernel.With Hyper-V isolation, multiple container instances run concurrently on a host; However, each container runs inside of a highly optimized virtual machine and effectively gets its own kernel. La presencia de la máquina virtual proporciona aislamiento de nivel de hardware entre cada contenedor y el host de contenedor.The presence of the virtual machine provides hardware-level isolation between each container as well as the container host.

Ejemplos de aislamientoIsolation examples

Crear contenedorCreate container

La administración de contenedores con aislamiento de Hyper-V mediante Docker es casi idéntica a la administración de contenedores con aislamiento de procesos.Managing Hyper-V-isolated containers with Docker is nearly identical to managing process-isolated containers. Para crear un contenedor con el aislamiento de Hyper-V mediante Docker, usa el parámetro --isolation para establecer --isolation=hyperv.To create a container with Hyper-V isolation thorough Docker, use the --isolation parameter to set --isolation=hyperv.

docker run -it --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 cmd

Para crear un contenedor con aislamiento de procesos a través de Docker, usa el parámetro --isolation para establecer --isolation=process.To create a container with process isolation through Docker, use the --isolation parameter to set --isolation=process.

docker run -it --isolation=process mcr.microsoft.com/windows/servercore:ltsc2019 cmd

Los contenedores de Windows que se ejecutan en Windows Server se ejecutan de forma predeterminada con aislamiento de procesos.Windows containers running on Windows Server default to running with process isolation. Los contenedores de Windows que se ejecutan en Windows 10 Pro y Enterprise se ejecutan de forma predeterminada con aislamiento de Hyper-V.Windows containers running on Windows 10 Pro and Enterprise default to running with Hyper-V isolation. A partir de la actualización de octubre de 2018 de Windows 10, los usuarios que ejecutan un host con Windows 10 Pro o Enterprise pueden ejecutar un contenedor de Windows con aislamiento de procesos.Starting with the Windows 10 October 2018 update, users running a Windows 10 Pro or Enterprise host can run a Windows container with process isolation. Los usuarios deben solicitar directamente el aislamiento de procesos mediante la marca --isolation=process.Users must must directly request process isolation by using the --isolation=process flag.

Advertencia

La ejecución con el aislamiento de procesos en Windows 10 Pro y Enterprise está pensada para desarrollo y pruebas.Running with process isolation on Windows 10 Pro and Enterprise is meant for development/testing. El host debe ejecutar Windows 10, compilación 17763 o superior, y debe tener una versión de Docker con el motor 18.09 o posterior.Your host must be running Windows 10 build 17763+ and you must have a Docker version with Engine 18.09 or newer.

Debes seguir usando Windows Server como host para las implementaciones de producción.You should continue to use Windows Server as the host for production deployments. Con esta característica en Windows 10 Pro y Enterprise, también debes asegurarte de que las etiquetas de la versión del contenedor y del host coinciden; de lo contrario, el contenedor puede no iniciarse o mostrar un comportamiento indefinido.By using this feature on Windows 10 Pro and Enterprise, you must also ensure that your host and container version tags match, otherwise the container may fail to start or exhibit undefined behavior.

Explicación del aislamientoIsolation explanation

En este ejemplo se muestran las diferencias en las funcionalidades de aislamiento entre el aislamiento de procesos y de Hyper-V.This example demonstrates the differences in isolation capabilities between process and Hyper-V isolation.

En este caso, se implementa un contenedor con aislamiento de procesos que hospedará un proceso de ping de ejecución prolongada.Here, a process-isolated container is being deployed and will be hosting a long-running ping process.

docker run -d mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t

Mediante el comando docker top, el proceso de ping se devuelve tal como se muestra dentro del contenedor.Using the docker top command, the ping process is returned as seen inside the container. El proceso de este ejemplo tiene el identificador 3964.The process in this example has an ID of 3964.

docker top 1f8bf89026c8f66921a55e773bac1c60174bb6bab52ef427c6c8dbc8698f9d7a

3964 ping

En el host de contenedor, puede usarse el comando get-process para devolver los procesos de ping que se están ejecutando en el host.On the container host, the get-process command can be used to return any running ping processes from the host. En este ejemplo hay uno, y el identificador del proceso coincide con el del contenedor.In this example there is one, and the process id matches that from the container. Se trata del mismo proceso visible en el contenedor y en el host.It is the same process visible from both container and host.

get-process -Name ping

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName
-------  ------    -----      ----- -----   ------     --  -- -----------
     67       5      820       3836 ...71     0.03   3964   3 PING

Por otro lado, en este ejemplo se inicia un contenedor con aislamiento de Hyper-V que también tiene un proceso de ping.To contrast, this example starts a Hyper-V -solated container with a ping process as well.

docker run -d --isolation=hyperv mcr.microsoft.com/windows/servercore:ltsc2019 ping localhost -t

Del mismo modo, puede usarse docker top para devolver los procesos que se están ejecutando en el contenedor.Likewise, docker top can be used to return the running processes from the container.

docker top 5d5611e38b31a41879d37a94468a1e11dc1086dcd009e2640d36023aa1663e62

1732 ping

Pero cuando se busca el proceso de host de contenedor, no se encuentra ningún proceso de ping y se produce un error.However, when searching for the process on the container host, a ping process is not found and an error is thrown.

get-process -Name ping

get-process : Cannot find a process with the name "ping". Verify the process name and call the cmdlet again.
At line:1 char:1
+ get-process -Name ping
+ ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (ping:String) [Get-Process], ProcessCommandException
    + FullyQualifiedErrorId : NoProcessFoundForGivenName,Microsoft.PowerShell.Commands.GetProcessCommand

Por último, en el host, puede verse el proceso vmwp, que es la máquina virtual que encapsula el contenedor en ejecución y que protege los procesos en ejecución del sistema operativo host.Finally, on the host, the vmwp process is visible, which is the running virtual machine that is encapsulating the running container and protecting the running processes from the host operating system.

get-process -Name vmwp

Handles  NPM(K)    PM(K)      WS(K) VM(M)   CPU(s)     Id  SI ProcessName
-------  ------    -----      ----- -----   ------     --  -- -----------
   1737      15    39452      19620 ...61     5.55   2376   0 vmwp