Está en la página 1de 7

La virtualización permitió que la infraestructura en la nube fuera posible.

Ahora los
desarrolladores podían contar con el hardware necesario para crear aplicaciones en
cuestión de minutos y no había que esperar meses como antes.
Si bien los entornos de infraestructura en la nube fueron un gran paso en la dirección
correcta, las máquinas virtuales tenían algunas deficiencias. Por ejemplo, las
máquinas virtuales tardan muchos minutos en iniciar, y a veces consumen muchos
recursos de hardware como memoria RAM y almacenamiento, lo que limita la
habilidad de usar completamente los recursos de hardware del servidor anfitrión.
En una conferencia de Python del año 2013, el ingeniero Solomon Hykes presentó
un nuevo enfoque para desplegar aplicaciones web en la nube que no requería el
uso de máquinas virtuales. Solomon demostró cómo los componentes de Linux se
pueden usar para crear unidades de software auto-contenidas. A esta unidad de
software se le llamó “Contenedor”
En lugar de aislar una aplicación en un servidor virtual, los contenedores se pueden
aislar a nivel proceso de sistema operativo del servidor anfitrión. El proceso que se
ejecuta en el contenedor se provee de un sistema de archivos y conectividad de red
para que pueda interactuar con otros procesos aislados, ya sea en el mismo servidor
anfitrión o en otros servidores conectados por red. Ya no se requiere de un hipervisor
para administrar el hardware virtual, lo que permite explotar los recursos de hardware
mucho mejor.
A esta tecnología para crear aplicaciones en Contenedores se le llamó Docker, y se
hizo disponible como un proyecto de código libre.
A diferencia de los Hipervisores, Docker provee de una capa de ejecución para los procesos
que contienen las aplicaciones, interactuando directamente sobre el sistema operativo del
servidor anfitrión. Docker no crea máquinas virtuales ni administra el sistema operativo
huésped, lo que permite usar menos recursos de hardware y ejecutar más aplicaciones dentro
de contenedores.
Un contenedor de Docker no define la cantidad de recursos de Hardware que va a usar
durante su ejecución. Sólo define los archivos, herramientas y configuración de red que
requiere para iniciar. Depende del entorno de Docker la cantidad de recursos que va asignar a
un contenedor específico. Esta característica es muy útil para el ciclo de desarrollo de
software. Los programadores pueden desarrollar las aplicaciones en computadoras
convencionales y distribuir el Contenedor de Docker a un entorno de producción, donde se
pueden iniciar múltiples procesos de Docker, o crear un único proceso usando grandes
cantidades de hardware.
Para los desarrolladores que estaban acostumbrados a crear aplicaciones basadas
en máquinas virtuales, la experiencia inicial usando Docker fue impactante. Instalar
una aplicación en una máquina virtual podía tomar muchos minutos mientras que
instalar una aplicación creada en un contenedor de Docker toma sólo algunos
segundos, esta mejora de desempeño se debe a que crear una instancia de Docker
es muy parecido a iniciar un proceso de Linux, a diferencia de iniciar todo un sistema
operativo virtual.

Los Contenedores ofrecen una ventaja adicional contra las máquinas virtuales:
Actualizar una aplicación en una máquina virtual implica volver a crear todo el
entorno virtual y crear un archivo a partir de la máquina virtual. Docker por otro lado
usa un sistema de archivos por capas: los cambios en la aplicación se representan
mediante un nuevo conjunto de capas y sólo se escriben en disco duro las capas que
cambiaron. De esta forma un Contenedor de Docker se puede duplicar e iniciar en
cuestión de segundos.

La popularidad de Docker creció exponencialmente. Poco después de su


lanzamiento múltiples empresas fabricantes de Software de virtualización y
proveedores de cómputo en la nube comenzaron a apoyar este proyecto, y una gran
cantidad de productores de software empresarial crearon Contenedores de Docker
preconfigurados y listos para integrarse con cualquier otra aplicación.
Las principales ventajas de Docker sobre una máquina virtual son:
• Los contenedores inician mucho más rápido que una máquina virtual. Ya que
iniciar un contenedor es equivalente a iniciar un proceso de Linux. Por otro lado,
iniciar una máquina virtual implica iniciar los componentes de hardware virtual, el
sistema operativo y todos los procesos que lo soportan.
• Crear una imagen de un contenedor es mucho más rápido que crear una imágen
de una máquina virtual. Debido al sistema de archivos por capas que usa Docker,
los cambios hechos a la aplicación se reflejan como una nueva capa en el
sistema, actualizando sólo las capas necesarias. Crear una imagen de una
máquina virtual requiere copiar todo el estado a múltiples archivos en disco duro,
lo que consume mucho tiempo y recursos.
• La imagen de un Contenedor son mucho más pequeñas que una imagen de una
máquina virtual. Por la misma característica descrita en el punto anterior, una
imagen de un contenedor típicamente consume megabytes, mientras que una
imagen de una máquina virtual consume varios gigabytes.
• Una imagen de Docker se construye una vez, y se ejecuta en cualquier lugar.
Docker permite a los programadores desarrollar las imágenes en sus
computadoras, probarlas e instalarlas en la nube con la tranquilidad que el código
que se está ejecutando es una copia exacta de la versión que tienen en sus
computadoras.
• Mejor aprovechamiento de los recursos. Ya que los Contenedores son mucho más
pequeños y se ejecutan como un proceso, consumen mucho menos recursos que
una máquina virtual, lo que permite ejecutar un número más grande de
contenedores que de máquinas virtuales en un servidor físico.
Docker permite diseñar aplicaciones de alta disponibilidad y tolerancia a fallos proponiendo
una arquitectura modular y basada en servicios.
Una aplicación moderna de alta demanda consta de múltiples servicios. Por ejemplo, una
tienda en línea consta de un servicio de autenticación, carrito de compras, catálogo de
productos.
Para cada servicio se usa sólo un contenedor
Docker crea Contenedores a partir de una imagen de Docker, los contenedores están
conectados entre sí a través de servicios de red. En un escenario de alta disponibilidad se
crean múltiples servidores que ejecutan los servicios requeridos por la aplicación.
Cada servidor puede ejecutar diferentes sistemas operativos o incluso existir en diferentes
proveedores de cómputo en la nube.
Pero ten cuidado. Si estás diseñando una nueva aplicación es fácil tentador usar
estas herramientas y desplegar la primera versión usando un esquema de alta
demanda como el anterior, lo que puede ser muy costoso y tardado de desarrollar.

Docker permite diseñar aplicaciones usando servicios modulares autocontenidos.


Usa estas características en el diseño de los servicios, lo que te va a permitir escalar
tu aplicación fácilmente en el futuro. Empieza con poco hardware y escala tu
aplicación conforme dicte la demanda.

También podría gustarte