Introducción
Windows Server 2016 incluye el rol Containers, que permite crear y administrar Windows Containers y Hyper-V Containers.
La creación y administración de ambos tipos de containers es muy similar. En esta nota daremos algunas pautas para ayudar a elegir el modelo más conveniente.
Diferencias en el licenciamiento
Los Hyper-V Containers adhieren al mismo modelo de licenciamiento de las máquinas virtuales.
En un Host Datacenter Edition se pueden crear ilimitados Hyper-V Containers
En un Host Standard Edition se pueden crear hasta dos Hyper-V Containers por cada paquete de licencias.
En cambio, los Windows Containers son ilimitados para ambas ediciones de Windows Server 2016.
Diferencias de aislamiento de procesos
En las máquinas virtuales, el sistema operativo se ejecuta en User mode y Kernel mode (hay un kernel mode
para cada guest).
Los
Windows Server Containers solamente utilizan user mode, permitiendo a los
procesos de Windows y procesos de aplicaciones ejecutarse en el container,
aislado del user mode de otros containers.
Por este motivo, los Windows Containers no consiguen un completo aislamiento, ya que trabajan con un
único Kernel mode en común.
Los
Hyper-V Containers en forma similar a las máquinas virtuales son child partitions, el sistema operativo guest del Hyper-V container no es el sistema operativo Windows normal, sino una versión
reducida (que tampoco es la versión Nano).
El
nivel de aislamiento que provee el Hyper-V container para cada child partition es
entre el Hyper-V container con otros Hyper-V containers en el host, el
hipervisor y la parent partition del host.
La siguiente figura muestra la diferencia entre ambos tipos de containers.
Ejemplo 1: Hyper-V Container
A continuación se crea un Hyper-V Container llamado TestIISH y se ejecuta dentro del container Notepad.exe
Para crear el container se ejecutó el siguiente comando:
docker run -d --name TestIISH --isolation=hyperv microsoft/iis -p 80:80
Ejecutamos un CMD dentro del container y luego Notepad.exe:
docker exec -i TestIISH cmd
C:\Windows\System32>notepad.exe
PS C:\Windows\System32> get-process -name n*
Vemos el proceso Notepad con ID 2668 dentro del Container
Handles NPM(K) PM(K) WS(K) CPU(s) Id SI ProcessName
----------- ------- ----- ------ ---- ----- --- -------------
128 9 1984 7632 0.08 2668 1 notepad
Se ejecuta el comando Get-Process en el host y se verifica que no está el proceso del notepad pero si aparecen procesos llamados vmwp (virtual machine work process)
PS C:\Users\Administrator> get-process n* (no hay resultados)
PS C:\Users\Administrator> get-process v*
Handles
NPM(K) PM(K) WS(K) CPU(s)
Id SI ProcessName
------- ------ ----- ----- ------ -- -- -----------------
294
31 4928
13264 0.14 2996 0 vmcompute
0
2770 1072600
616020 0.00 1280 0 vmmem
0
2717 1050640 346972 0.00 3184 0 vmmem
0
2724
1050640 16
0.00 3852 0 vmmem
617
22 10288 23936 0.27 2312 0 vmms
4488
18 40688 21756 10.05 1872 0 vmwp
238
5 35640 16392 1.41 3844 0 vmwp
130
9 1588 7716
0.02 1192 0 VSSVC
Ejemplo 2: Windows Container
Se crea un Windows Container llamdo TestIISW se ejecuta Notepad y se ve el proceso dentro del container con ID 3768
docker run -d --name IISTestW -p 80:80 microsoft/iis
docker exec -i IISTestW cmd
C:\Windows\System32>notepad.exe
PS C:\Windows\System32> get-process -name n*
Handles
NPM(K) PM(K) WS(K)
CPU(s) Id SI
ProcessName
------- ------
----- ----- ------ -- -- -----------
128
9 1684 7600 0.02
3768 3 notepad
A continuación Se ejecuta Get-Process en el host
PS
C:\Users\Administrator> get-process -name n*
Handles
NPM(K) PM(K) WS(K)
CPU(s) Id SI
ProcessName
------- ------ ----- ----- ------ -- --
-----------
128 9 1684 7600 0.02 3768 3 notepad
El proceso Notepad con ID 3768 también está presente en el host. Se nota la diferencia de aislamiento respecto del Hyper-V Container.
No hay comentarios:
Publicar un comentario