Docker es una plataforma que hace posible la creación, la prueba y la implementación de aplicaciones. Esta herramienta permite generar contenedores: unidades estandarizadas de software empaquetado que albergan lo que se necesita para su ejecución, desde el código hasta las bibliotecas.
Gracias a Docker, se pueden implementar las apps en todo tipo de entornos con la garantía de la ejecución de su código. Cabe destacar que la plataforma es de código abierto (open source).
Historia de Docker
La historia de Docker comenzó en el interior de la compañía dotCloud, dedicada al desarrollo de PaaS (plataforma como servicio). Fue Solomon Hykes quien impulsó el proyecto con aportes de Francois-Xavier Bourlet, Andrea Luzzardi y otros ingenieros de la empresa.
Puede decirse que Docker supuso la evolución de una tecnología de dotCloud, construida a partir de Cloudlets y otras iniciativas de código abierto.
La liberación de Docker con código abierto tuvo lugar en 2013. Al año siguiente, la plataforma empezó a usar su propia biblioteca (llamada libcontainer).
Con el tiempo, dotCloud, Inc. se transformó en Docker, Inc, que hoy es la firma que promueve el proyecto y ofrece a la venta la versión comercial de la plataforma.
Actualmente, en definitiva, la idea de Docker puede aludir al sistema informático, a la compañía o a la comunidad de código abierto.
Cómo funcionan los contenedores
Docker se basa en la producción de contenedores. Se trata de unidades ejecutables que funcionan como entornos virtuales, empaquetando el código de la aplicación que se crea en conjunto con sus dependencias y bibliotecas. De esta manera, la ejecución del código puede llevarse a cabo en un escritorio, en la nube o en otros lados.
Es importante indicar que los contenedores recurren a un modo de virtualización del sistema operativo que hace que las propiedades del kernel puedan utilizarse para el aislamiento de procesos y para determinar a cuánta memoria y CPU acceden los procesos en cuestión.
Generalmente se compara a los contenedores con las máquinas virtuales (virtual machines o VM). De acuerdo a los expertos, los contenedores brindan la funcionalidad de las máquinas virtuales (disponibilidad, escalabilidad, aislamiento de aplicaciones) pero con beneficios como más eficiencia, mejor productividad y un peso más liviano.
Características de Docker
En su funcionamiento Docker apela al kernel de Linux, empleando funciones como el espacio de nombres (Namespaces) y los grupos de control, para propiciar la división de los procesos y, de esta forma, conseguir su ejecución independiente.
En este contexto, Docker trabaja con un modelo de implementación que se basa en imágenes. Cada imagen Docker alberga el código de la aplicación, las bibliotecas, etc., haciendo que los servicios y la aplicación se puedan compartir con facilidad en múltiples entornos.
Aunque las imágenes pueden crearse desde cero, lo habitual es que se obtengan de un repositorio común (como Docker Hub). Así, de una imagen base pueden obtenerse distintas imágenes, que se estructuran en capas. Estas capas son las diferentes versiones de la imagen.
La tecnología cliente-servidor que se usa para la construcción y la contenerización de las aplicaciones se conoce como Docker Engine. Lo que hace es posibilitar el desarrollo de todas las acciones que están vinculadas con la ejecución de la aplicación que se basa en el contenedor. Este motor tiene componentes como Docker Daemon (a cargo de la gestión de las imágenes Docker, los contenedores y otros elementos), Docker CLI (interfaz de línea de comando para la comunicación con Docker Daemon) y API REST (para la interacción con Docker Daemon).
Por otra parte, a través de Docker Compose se puede lograr la ejecución de distintos contenedores a modo de un solo servicio. Primero se debe crear un Dockerfile para establecer el entorno, luego hay que definir los diversos servicios y finalmente usar el comando Docker Compose para dar inicio a la ejecución de la aplicación.
Otro dato a considerar es que, instalando Docker Desktop, se puede usar Docker en Windows, Linux o Mac. Esta interfaz hace posible la gestión de los contenedores, las imágenes Docker y las aplicaciones en la computadora.
Ventajas y desventajas
El uso de Docker ofrece muchas ventajas. No solo permite trabajar con distintos sistemas operativos, sino también con diferentes lenguajes de programación.
Gracias a Docker, un programador se asegura que su código funcionará en diferentes entornos por los contenedores (que, como ya indicamos líneas arriba, ocupan un espacio menor que las máquinas virtuales). Dado que cada aplicación se almacena en un contenedor aislado de los demás, es más simple la gestión de la seguridad y se evitan los contagios de virus en cadena.
La rápida implementación, las opciones de restauración con las capas de las imágenes Docker, la modularidad posibilitada por los microservicios y la portabilidad simplificada también están entre los beneficios de Docker.
Entre las desventajas, en tanto, se mencionan la necesidad de aprender la línea de comandos ya que no ejecuta aplicaciones con GUI (interfaz gráfica de usuario); la menor velocidad en comparación a un servidor físico; y el hecho de que la ejecución de los contenedores se produce en el sistema operativo de un anfitrión (lo cual acarrea ciertos riesgos de seguridad).