Aprender Docker, un enfoque práctico. José Juan Sánchez Hernández

Чтение книги онлайн.

Читать онлайн книгу Aprender Docker, un enfoque práctico - José Juan Sánchez Hernández страница 6

Aprender Docker, un enfoque práctico - José Juan  Sánchez Hernández

Скачать книгу

(2000), Solaris Zones (2004), cgroups (2006) o Linux Containers (LXC), en el año 2008.

      En primer lugar, apareció la llamada del sistema chroot, que fue desarrollada para la versión 7 de UNIX (1979) y, posteriormente, se incorporó a la versión 4 de BSD (1980). Esta operación permite cambiar el directorio raíz del sistema de archivos de un proceso y de sus procesos hijos aislando, de esta manera, su ejecución e impidiendo que puedan acceder a los archivos que están por encima del nuevo directorio raíz.

      Años más tarde, FreeBSD se basó en la idea de chroot para desarrollar FreeBSD jail (2000), una implementación que permitía dividir un sistema en varios subsistemas llamados «jaulas» o jails. Todas las jaulas comparten el mismo kernel del sistema operativo anfitrión. Cada jaula puede tener un directorio raíz aislado del resto de sistema de archivos, su propio grupo de usuarios, su propio nombre de host y su propia dirección IP.

      En 2004, se liberó el proyecto Solaris Zones, que permitía aislar la ejecución de los procesos del resto del sistema metiéndolos en zonas o sandboxes. Cada zona se comporta como un servidor virtual completamente aislado.

      En 2006, los ingenieros de Google empezaron a trabajar en lo que más tarde se llamaría cgroups o «grupos de control». Los grupos de control son un mecanismo que permiten controlar la asignación de recursos a los procesos. Permiten definir jerarquías en las que se agrupan los procesos y establecer cuáles serán los límites de uso de los recursos del sistema (CPU, memoria, red, etc.). Esta funcionalidad se integró en el kernel de Linux en la versión 2.6.24 aunque, años más tarde, fue rediseñada y la versión que se encuentra actualmente en el kernel es conocida como cgroup v2.

      Linux Containers, o LXC (2008), es un método de virtualización a nivel de sistema operativo que permite ejecutar aplicaciones en entornos aislados que comparten el kernel de Linux del sistema operativo anfitrión. Utiliza las características del kernel de cgroups para controlar la asignación de recursos a los procesos y namespaces para supervisar a qué recursos pueden acceder los procesos.

      Las primeras versiones de Docker utilizaban LXC para ejecutar contenedores, pero fue reemplazado por una herramienta interna a la que llamaron libcontainer. Actualmente, libcontainer forma parte de runc, un runtime de contenedores que cumple con las especificaciones OCI (Open Container Initiative) del que hablaremos más adelante.

      Una «máquina virtual» o virtual machine (VM) es un entorno que emula la misma funcionalidad de una máquina física. Una máquina virtual hace uso de los recursos que se le hayan asignado; cuenta con su propia CPU, memoria, interfaz de red, almacenamiento y su propio sistema operativo.

      Las máquinas virtuales se crean y ejecutan sobre un software llamado «hipervisor» o virtual machine monitor (VMM). El hipervisor se ejecuta sobre una máquina física y actúa como una capa intermedia entre el hardware de la máquina anfitriona o host y la máquina virtual. El hipervisor se encarga de gestionar y distribuir los recursos de la máquina física (CPU, memoria, almacenamiento, etc.) entre las máquinas virtuales.

      Es posible crear varias máquinas virtuales sobre una misma máquina física. Cada una de las máquinas virtuales estará aislada del resto, tendrá sus propios recursos y contará con su propio sistema operativo, que no tiene por qué ser el mismo que el de la máquina anfitriona.

      Un «contenedor» se puede definir como una unidad estándar de software que permite empaquetar el código fuente de una aplicación y todas sus dependencias, para que se pueda distribuir y ejecutar de forma rápida y fiable en diferentes entornos.

      También se puede definir como un proceso que ha sido aislado de todos los demás procesos de la máquina anfitriona donde se está ejecutando. Aunque es posible tener más de un proceso en un contenedor, las buenas prácticas nos recomiendan ejecutar solo un proceso por contenedor.

      El término docker, en inglés, significa «estibador», que es la persona encargada de realizar la carga y descarga de un buque u otros medios de transporte. Para entender mejor qué es un «contenedor», podemos establecer una analogía entre los contenedores que se utilizan en el transporte marítimo y los contenedores software.

      Los contenedores de transporte marítimo:

      Illustration Cumplen una normativa ISO (International Organization for Standardization), donde se establecen las medidas, tamaño y forma de los contenedores.

      Illustration Se rigen por un estándar para distribuir mercancías.

      Illustration Pueden ser transportados en cualquier embarcación que cumpla el estándar ISO.

      Los contenedores software:

      Illustration Cumplen con los estándares abiertos de la industria de los contenedores software desarrollados por la OCI (Open Container Initiative).

      Illustration Se rigen por un estándar para distribuir software.

      Illustration Pueden ser ejecutados en cualquier runtime que cumpla el estándar OCI.

      A continuación, se enumeran las principales diferencias que existen entre contenedores y máquinas virtuales:

      Illustration Una máquina virtual necesita un sistema operativo completo para poder funcionar, mientras que un contenedor no, ya que comparte el kernel del sistema operativo de la máquina donde se está ejecutando.

      Illustration Los contenedores necesitan menos recursos que las máquinas virtuales. Con el mismo hardware, es posible tener un mayor número de contenedores que de máquinas virtuales.

      Illustration El tiempo necesario para iniciar un contenedor es mucho menor que el de una máquina virtual. Un contenedor se puede iniciar en cuestión de milisegundos, mientras que una máquina virtual puede llegar a necesitar algunos minutos.

      Illustration Por lo general, los contenedores son más ligeros que las máquinas virtuales. El tamaño de los contenedores se suele medir en megabytes, mientras que el de las máquinas virtuales se suele medir en gigabytes.

      

Скачать книгу