Principales características

Con el eslogan ”Build, Ship and Run Any App, Anywhere” la plataforma de contenedores de código abierto Docker define su función principal: desarrollar, enviar y ejecutar cualquier aplicación en cualquier sistema, constituyéndose así como una alternativa flexible y capaz de ahorrar recursos frente a la emulación de componentes de hardware basada en máquinas virtuales (VM)

Las diferencias entre ambas técnicas de virtualización se degranarán en esta clase de Docker.

Virtualización y Containers

Mientras que la virtualización tradicional de hardware se basa en iniciar diferentes sistemas invitados en un mismo sistema anfitrión (host), con Docker las aplicaciones se ejecutan como procesos aislados dentro de un mismo sistema gracias a los denominados contenedores. Se habla entonces de una virtualización basada en contenedores y, por consiguiente, también de una virtualización a nivel de sistema operativo.

En el gráfico a continuación se puede ver las diferencias principales en la arquitectura de ambas técnicas de cirtualización:

Contenedores vs. Virtualización

Una de las principales dudas es en qué se diferencia entonces un contenedor software y una máquina virtual. De hecho, este concepto es mucho más anterior que el de los propios contenedores.

Gracias a la virtualización somo capaces, usando un mismo ordenado, de tener distintas máquinas virtuales con su propio sistema operativo invitado, Linux o Windows. Todo ello ejecutándose en un sistema operativo anfitrión y con acceso virtualizado al hardware.

La virtualización es una práctica habitual en servidores para alojar diferentes aplicaciones o en nuestro propio entorno de trabajo para ejecutar distintos sistemas operativos, por ejemplo.

Muchos alojamientos de hosting tradicionales se han basado en crear máquinas virtuales limitadas sobre el mismo servidor para alojar nuestros servidores web de forma aislada, siendo compartido por una decena de clientes.

Explicación

  • Mientras cada máquina virtual inicia su sistema operativo propio, los contenedores Docker comparten el núcleo (kernel) del sistema anfitrión.
  • Aunque ambas tecnologías permiten a los administradores de sistemas y desarrolladores instalar diferentes aplicaciones con distintos requisitos en paralelo en un mismo sistema físico, sus diferencias más notables se basan en el empleo de los recursos y la portabilidad.
  • Contenedores: virtualización con un overhead mínimo

El espacio en memoria para el usuario y para el núcleo

Por regla general, los sistemas operativos actuales dividen las memorias virtuales e dos campos separados para proteger al sistema operativo de aplicaciones dañinas o con fallos. Por un lado, presentan el espacio de memoria del kernel, reservado para el funcionamiento del kernel y otros componentes base del sistema operativo y, por el otro, el espacio de memoria del usuario, disponible para las aplicaciones.

Esta estricta separación entre el espacio del núcleo y del usuario tiene como objetivo primordial proteger el sistema de aplicaciones dañinas o defectuosas.