Pregunta guía
¿Cómo proporcionar un entorno de ejecución aislado, consistente y potable para una aplicación?
Sistema Operativo
Hipervisor
App
HW
SO
App
App
App
HW
SO
App
App
App
HW
SO
App
App
App
HW
SO
App
App
Entornos aislados de ejecución para aplicaciones, construidos sobre mecanismos nativos del sistema operativo.
Comparten kernel del sistema anfitrión.
Permiten ejecutar una aplicación de forma consistente en distintos entornos.
Sistema Operativo
Sistema Operativo
App
Sistema Operativo
App
App
App
App
Sistema Operativo
App
App
App
App
App
App
App
App
Sistema Operativo
App
App
App
App
App
App
App
App
App
App
Sistema Operativo
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
Sistema Operativo
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
IP
Sistema Operativo
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
IP
IP
IP
IP
Sistema Operativo
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
IP
IP
IP
IP
Sistema Operativo
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
IP
IP
IP
IP
Sistema Operativo
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
App
IP
IP
IP
IP
a
b
c
d
Contenedor = proceso + aislamiento + limites
echo $$ ps ef ps -o pid,ppid,cmd ls /proc
Mecanismo del kernel de Linux que aísla la vista que un proceso tiene del sistema.
Webasignatura tarea: Namespace
El arbol de procesos visible.
El proceso sigue siendo un proceso normal de Linux, pero ya no ve el mismo conjunto de procesos que ve el host.
El hostname visible para el proceso.
Cambiar el nombre que ve el proceso no significa crear otra maquina virtual.
El mapa de sistemas de archivos montados.
Un proceso puede tener otra vista del filesystem sin salir del mismo kernel.
Namespaces cambian el contexto visible del proceso.
Mecanismo del kernel de Linux que controla y limita los recursos que un proceso puede usar.
Webasignatura tarea: CGroups
Los cgroups no cambian la vista del proceso.
Los cgroups cambian:
namespaces responden: que ve el procesocgroups responden: que puede usar el procesoVer y usar no son la misma cosa.
Estructura de archivos que el proceso ve como su propio entorno de ejecución
El proceso puede arrancar viendo otra raiz de archivos.
Otra raiz de archivos no significa otra maquina virtual.
Significa otra vista del sistema de archivos.
Ayuda a construir el filesystem del contenedor con capas.
El contenedor puede parecer tener su propio filesystem, aunque ese filesystem se construya a partir de capas.
Docker populariza la idea.
base: la raíz original, read-onlycambios: donde se guardan las modificacionestrabajo: directorio interno que necesita overlayfscontenedor: la vista final que el proceso “cree” que es su filesystemmkdir -p demo-overlay/{base,cambios,trabajo,contenedor}
tar -xzf alpine-minirootfs-*.tar.gz -C demo-overlay/base
mount -t overlay overlay \
-o lowerdir=demo-overlay/base,upperdir=demo-overlay/cambios,workdir=demo-overlay/trabajo \
demo-overlay/contenedorls demo-overlay/base ls demo-overlay/contenedor cat demo-overlay/contenedor/etc/os-release echo "Materia: Sistemas Operativos" > demo-overlay/contenedor/root/prueba.txt echo "Modificado en clase" >> demo-overlay/contenedor/etc/motd find demo-overlay/cambios | head -20 cat demo-overlay/cambios/etc/motd cat demo-overlay/base/etc/motd
Entorno de red aislado que el proceso ve como propio dentro del sistema
Webasignatura tarea: Red
Pero solo en red.
una maquina virtual completa
interfaces virtuales, namespaces de red y enlaces virtuales
El proceso puede ver:
Cada namespace de red tiene su propia vista de la red.
Un par veth funciona como un cable virtual con dos extremos.
Switch virtual del kernel que conecta interfaces de red virtuales.
Linux puede construir una red interna para contenedores sin crear otra maquina.
Un proceso dentro de un namespace puede enviar paquetes:
Proceso aislado y controlado por mecanismos nativos de Linux.
Linux: reorganiza lo que el proceso ve y lo que puede usar.
Docker no inventa el contenedor: lo construye y lo administra sobre Linux.
Herramienta que crea, empaqueta y ejecuta contenedores usando esos mecanismos del sistema operativo.