Los contenedores Docker en los últimos años han logrado una expansión muy grande, debido a las grandes ventajas que acarrea su utilización.
Hoy veremos como la virtualización basada en contenedores ha simplificado y mejorado la eficiencia de los recursos en el ambiente del desarrollo de software.
Esto será una introducción a una serie sobre Docker que iré publicando más adelante, así que manos a la obra…
Si en el pasado has jugado un poco con las virtual machine, la arquitectura de Docker no será difícil de comprender.
Pero para entender mejor todo este tema de los contenedores Docker, vamos a ponernos en un contexto histórico.
PREHISTORIA: Servidores físicos
Antes la administración de la infraestructura tecnológica (servidores, routers, switches, etc.) de una empresa era un trabajo duro, y no lo digo por la dureza de los fierros, sino al hecho de tener que cumplir con diferentes métricas como, alta disponibilidad, tolerancia a fallos, etc.
Cuando ya se tenía el servidor físico, se le instalaba un sistema operativo, las librerías necesarias para la aplicación y al final la aplicación.
Pero ahí nos encontramos con varios problemas, como el uso de los recursos, puesto que estos servidores solo ejecutaban una aplicación, no se llegaba a usar todos los recursos disponibles y por ende se causaba desperdicio de recursos.
En otros casos, la migración entre servidores de diferentes proveedores también representaba un problema, dado que las configuraciones eran diferentes, eso hacía difícil y lento el despliegue de las aplicaciones.
Otro de los problemas era la adquisición, por lo general en las empresas sucede que si solicitas un recurso hoy, no te lo entregan sino hasta el otro mes (estoy siendo un poco duro), a menos que trabajes en una empresa con un tipo de organización que no sea tan burocrática.
Virtualización con Hypervisor
Entonces, todo este proceso se vuelve lento y engorroso, y el ambiente de competitividad en que se vive en el mundo de la tecnología hizo necesaria el desarrollo de la virtualización.
Con esto se logró crear servidores virtuales aislados, que manejan sus propios recursos gracias a un Hypervisor que se encarga de la administración de las máquinas virtuales.
Por lo tanto, lo que tenemos es, un servidor físico, sobre este, un sistema operativo. En el sistema operativo se instala un Hypervisor que va a administrar las máquinas virtuales, y dentro de las máquinas virtuales, otra vez un sistema operativo, las bibliotecas y librerías, y finalmente la aplicación.
Para hacer esto posible tenemos herramientas como: VMWare, Hyper-v Manager de microsoft, Virtual box (software libre), etc.
Esto solucionó muchos problemas, puesto que ahora podemos tener muchas máquinas virtuales con diferentes sistemas operativos en un mismo servidor físico y desplegar diversas aplicaciones de forma aislada.
De lo que concluimos que la internet y la virtualización hicieron posible la aparición del Cloud computing.
Ahora ya no es necesario adquirir servidores físicos, puedes contratar servidores de Amazon, Azure, Digital Ocean, etc. Lo cual reduce inmensamente el problema del costo y tiempo que se tenía.
Algo muy interesante y beneficioso para los bolsillos del cliente es que estos proveedores de Cloud Computing cobran por el uso de los recursos, lo que representa una mejor opción que comprar un servidor, además de todas las ventajas que esto trae consigo.
Algunas ventajas son:
- Tienes alta disponibilidad.
- Tolerancia a fallos.
- Puedes elegir los servidores más cercanos geográficamente a tus clientes.
- Garantía de no perder tu información porque se hacen replicas en servidores en diferentes partes del mundo, a menos que haya una destrucción del planeta claro está,
- Te ahorras de tener Data Center, que si no es bien administrado con estándares y buenas prácticas, puede llegar a ser un terrible dolor de cabeza, etc.
Como todo en la vida, también existen desventajas en el uso de Cloud computing, pero lo vamos a dejar allí, para continuar con nuestro tema.
Si todo es tan bonito con Máquinas virtuales, ¿Por qué la necesidad de los contenedores?
Virtualización basada en contenedores
Los contenedores por su misma arquitectura traen grandes ventajas, los contenedores también crean entornos aislados donde se pueden desplegar aplicaciones, pero sin la necesidad de tener un sistema operativo completo, como en el caso de las máquinas virtuales.
Además de ello, la virtualización no se da a nivel de hardware, sino a nivel de sistema operativo. Lo que hace que podamos desplegar nuestras aplicaciones en menos tiempo y con el uso de menos recursos.
Para que se entienda mejor, cuando creas una virtual machine, lo primero que haces es reservar los recursos (CPU, RAM, HDD) que se va necesitar.
Pero aquí también hay un problema, puesto que no siempre todo lo que has reservado será utilizado por la aplicación, y por otro lado estás limitando los recursos para otras máquinas virtuales.
En los contenedores, esta administración de recursos se hacen de forma dinámica, de modo que no hay que preocuparse por reservar tamaño de RAM, CPU, etc.
Otro aspecto importante es la naturaleza del aislamiento de las aplicaciones, los contenedores te permiten gestionarlas muy bien y con menos recursos que las máquinas virtuales y sobre todo, la portabilidad es su mayor ventaja.
Aquí una comparación entre la arquitectura de Máquinas virtuales y contenedores.
El uso de los contenedores se está haciendo cada vez más necesario en el mundo del desarrollo de software. Si no estas familiarizado con esta tecnología, no esperes más tiempo y sumérgete en este mundo.
Alternativas a los contenedores Docker
En el mundo de los contenedores, Docker no es el único, pero es el más usado y con una gran comunidad, así que nos concentraremos en los contenedores Docker.
Pero es recomendable conocer las alternativas que hay, aquí algunas:
- Rocket
- Linux Containers
- LXD de Canonical ,etc
Existen diferentes tipos de contenedores, algunos son full System y otros contenedores de aplicaciones como Docker.
Tipos de contenedores
Los contenedores full system son creados para ejecutar sistemas operativos virtuales de forma aislada y por ende estos contenedores gestionan varios procesos, y todo esto en un mismo núcleo (Aquí la diferencia con los Hypervisores).
También están los contenedores de aplicaciones, los cuales ejecutan las aplicaciones de forma aislada, pero se ejecutan en un solo proceso.
Es por eso que se recomienda que los contenedores Docker ejecute solo una aplicación a la vez y si las aplicaciones requieren de más procesos, estos se deben hacer en otros contenedores, esto se aplica muy bien en la arquitectura de microservicios.
En modo de ejemplo. Para una aplicación web básica se necesita una base de datos y un servidor web, en este caso la base de datos la ponemos en un contenedor y nuestra aplicación con el servidor web en otro contenedor.
Ya veremos en otros posts como los contenedores Docker nos permiten desplegar aplicaciones en cuestión de segundos.
Por ahora lo dejamos aquí, este es el primero de una serie sobre Docker.
¡Hasta la próxima!