¿Qué es docker y para qué sirve?
Docker es un proyecto de código abierto iniciado en 2013, el cual ayudó a popularizar la tecnología y ha contribuido a impulsar la tendencia hacia la contenedorización y los microservicios en el desarrollo de programas informáticos llamados desarrollo nativo de la nube.
¿Qué son los contenedores?
Uno de los objetivos del desarrollo de software moderno es mantener las aplicaciones en el mismo host o grupos aislados entre sí para que no interfieran indebidamente con el funcionamiento o el mantenimiento de los demás. Esto puede ser difícil, gracias a los paquetes, bibliotecas y otros componentes de software necesarios para que funcionen.
Una solución a este problema han sido las máquinas virtuales, que mantienen las aplicaciones en el mismo hardware completamente separadas y reducen al mínimo los conflictos entre los componentes de software y la competencia por los recursos de hardware.
Sin embargo, las máquinas virtuales son voluminosas (cada una requiere su propio sistema operativo, por lo que suele tener un tamaño de gigabytes) y puede ser una tarea tediosa de mantener y actualizar.
Los contenedores, por el contrario, aíslan los entornos de ejecución de las aplicaciones entre sí, pero comparten el núcleo del SO (Sistema Operativo) oculto. Normalmente se mide en megabytes, utilizan muchos menos recursos que las máquinas virtuales y se inician casi inmediatamente.
Pueden estar empaquetados de forma mucho más densa en el mismo hardware. Los contenedores proporcionan un mecanismo eficiente para combinar componentes de software en los servicios necesarios en una empresa moderna, y para mantener esos componentes de software actualizados y estables.
Otra ventaja es que los contendores no ocupan grandes cantidades de memoria RAM o núcleos del CPU como lo hacen las máquinas virtuales.
¿Qué es Docker?
Docker es un proyecto de código abierto que facilita la creación de contenedores y aplicaciones ejecutadas en contenedores. Originalmente construido para Linux, Docker ahora funciona también en Windows y MacOS. Para entender cómo funciona Docker, echemos un vistazo a algunos de los componentes que usarías para crear aplicaciones.
En términos simples, Docker es una plataforma de software que simplifica el proceso de construcción, ejecución, gestión y distribución de aplicaciones. Lo hace virtualizando el sistema operativo de la computadora en la que está instalado y ejecutándose.
Ahora tratemos de poner en contexto un problema como ejemplo, y la solución que Docker tiene para ofrecer:
El problema
Digamos que tienes tres aplicaciones diferentes basadas en Python que planeas alojar en un solo servidor (que podría ser una máquina física o virtual). Cada una de estas aplicaciones utiliza una versión diferente de Python, así como las librerías y dependencias asociadas, que difieren de una aplicación a otra.
La solución
En tal escenario, podríamos resolver este problema teniendo tres máquinas físicas, o una sola máquina física, que es lo suficientemente poderosa para alojar y ejecutar tres máquinas virtuales en ella.
Ambas opciones nos permitirían instalar diferentes versiones de Python en cada una de estas máquinas, junto con sus dependencias asociadas.
Independientemente de la solución que elijamos, los costes asociados a la adquisición y mantenimiento del hardware son bastante elevados.
Ahora, veamos cómo Docker podría ser una solución a este problema:
Docker como solución
La máquina en la que se instala y se ejecuta el Docker se denomina normalmente Host Docker o Host en términos simples.
Así que, siempre que planees desplegar una aplicación en el host, se creará una entidad lógica en él para alojar esa aplicación. En la terminología de Docker, llamamos a esta entidad lógica un Contenedor o Contenedor Docker para ser más precisos.
Un Contenedor Docker no tiene ningún sistema operativo instalado y ejecutándose en él. Pero tendría una copia virtual de la tabla de procesos, la(s) interfaz(es) de red y el(los) punto(s) de montaje del sistema de archivos. Estos han sido heredados del sistema operativo del host en el que el contenedor está alojado y ejecutándose.
Mientras que el núcleo del sistema operativo del host se comparte entre todos los contenedores que se ejecutan en él.
Esto permite que cada contenedor esté aislado del otro presente en el mismo host. Así pues, admite que varios contenedores con diferentes requisitos de aplicación y dependencias se ejecuten en el mismo host, siempre que tengan los mismos requisitos de sistema operativo.
Para comprender cómo Docker ha sido beneficioso para resolver este problema, es necesario consultar la siguiente sección, en la que se analizan las ventajas y desventajas de utilizar Docker.
En resumen, Docker virtualizaría el sistema operativo del host en el que está instalado y en funcionamiento, en lugar de virtualizar los componentes de hardware.
Ventajas del uso de Docker
- Docker soporta múltiples aplicaciones con diferentes requerimientos y dependencias, para ser alojadas juntas en el mismo host, siempre y cuando tengan los mismos requerimientos de sistema operativo.
- Almacenamiento optimizado: Un gran número de aplicaciones pueden ser alojadas en el mismo host, ya que los contenedores suelen tener un tamaño de pocos megabytes y consumen muy poco espacio de disco.
- Robustez. Un contenedor no tiene un sistema operativo instalado. Por lo tanto, consume muy poca memoria en comparación con una máquina virtual (que tendría un sistema operativo completo instalado y funcionando en ella). Esto también reduce el tiempo de arranque a sólo unos pocos segundos, en comparación con el par de minutos que se necesitan para arrancar una máquina virtual.
- Reduce los costos. Docker es menos exigente en cuanto al hardware necesario para ejecutarlo.
- Para equipos de desarrolladores de software: Docker provee un entorno de desarrollo exacto por cada proyecto sin importar que cada desarrollador pueda usar máquinas con diferentes SO (win, mac, linux) y con diferentes versiones entre sí.
Desventajas de usar Docker
- Las aplicaciones con diferentes requisitos de paqueterias, librerias y versiones no pueden ser alojadas en el mismo Docker Host. Por ejemplo, digamos que tenemos 4 aplicaciones diferentes, de las cuales 3 aplicaciones requieren un sistema operativo basado en Linux y la otra aplicación requiere un sistema operativo basado en Windows.
- En este caso, las 3 aplicaciones que necesitan el sistema Linux pueden ser hospedadas en un solo Docker Host, mientras que la otra de Windows necesita estar en otro Docker.
Componentes principales de Docker
El motor Docker es uno de los componentes centrales de Docker. Es responsable del funcionamiento general de la plataforma Docker.
Dicho motor es una aplicación basada en cliente-servidor y consiste en 3 componentes principales:
- Servidor
- REST API
- Cliente
El servidor ejecuta un demonio conocido como dockerd (Docker Daemon), que no es más que un proceso. Es responsable de crear y administrar imágenes, contenedores, redes y volúmenes en la plataforma Docker.
El REST API especifica cómo las aplicaciones pueden interactuar con el servidor, y le da instrucciones para que haga su trabajo.
El Cliente no es más que una interfaz de línea de comandos, que permite a los usuarios interactuar con Docker usando los comandos.
Todo esto podría ser diferente si el número de aplicaciones creciera en nuestro sistema, si esto sucediera sería complicado de gestionar con Docker por lo que una opción para esta problemática serían los Kubernetes y Docker Swarm.
Los contenedores ofrecen una gran cantidad de beneficios para las organizaciones que buscan velocidad y flexibilidad en la forma de entregar el software. Durante esta nueva década es el momento de empezar a construir lo que su nuevo ecosistema parece para los centros de datos y la nube.