Docker vs Kubernetes ¿En qué se diferencian?

08/07/2020
Artículo original

imagen ornamental

Dicho de manera muy simplificada, la tecnología de contenedores permite empaquetar y distribuir software aislándolo del sistema operativo subyacente y asegurándonos que se van a ejecutar siempre igual en cualquier sitio. Gracias a ellos podemos desplegar aplicaciones rápidamente sin miedo a que algo falle aunque cambiemos de entorno, arrancarán rapidísimo y podremos usarlos para desarrollar, probar y poner en producción cualquier aplicación o conjunto de ellas sin sorpresas.

Si esto te suena a una máquina virtual, te recomiendo que leas mi artículo ¿Qué diferencia hay entre Docker (Contenedores) y Máquinas virtuales (VMWare, VirtualBox...)?, porque verás que no son lo mismo en absoluto.

Cuando estás empezando con la tecnología de contenedores existen dos productos que aparecen todo el tiempo: Docker y Kubernetes, lo que da lugar a confusión. Vamos a aclarar qué son y en qué se parecen o se diferencian ambos productos.

¿Qué es Docker?

Docker es la principal tecnología para la creación y ejecución de contenedores. Se trata de un conjunto de herramientas Open Source que nos permiten definir, crear y ejecutar imágenes de software y contenedores que las ejecutan en cualquier sistema operativo.

Con Docker puedes definir cómo será el entorno en el que se ejecutará tu aplicación, que tú y todo tu equipo podáis desarrollar sobre la imagen correspondiente, que otros la prueben e incluso llevártela a un servidor, a producción, con la garantía de que siempre va a funcionar exactamente igual. Esto es una maravilla, y termina de una vez por todas con la clásica letanía de "¡En mi máquina funciona!" cuando algo falla en producción.

Las imágenes de tus aplicaciones se pueden compartir con todo el equipo (e incluso externamente), las puedes versionar, combinar... y puede facilitar mucho el desarrollo, prueba y despliegue de las aplicaciones, incluso en equipos de trabajo pequeños.

Aquí desarrollamos más todos los conceptos básicos sobre Docker.

¿Qué es Kubernetes?

Tras una temporada trabajando con Docker seguro que no quieres volver atrás. Sin embargo, si no desarrollas o pruebas únicamente, sino que tienes que poner aplicaciones en producción, probablemente tendrás una sensación agridulce con él. Y es que para eso se queda corto si tienes que gestionar más de uno o dos contenedores o varios servidores.

Cuando debes desplegar una aplicación hay muchas cosas que puedes necesitar, más allá de simplemente "levantar" un contenedor y de que la app funcione. Algunos ejemplos (hay muchos más) son:

  • Ejecutar contenedores/apps diferentes en diferentes servidores sin tener que ponerlos a funcionar uno a uno, a mano.
  • Asegurarte de que la aplicación siempre funciona y, si algo falla o "se cae", que se vuelva a levantar automáticamente.
  • Relacionado con lo anterior, monitorizar tus contenedores para saber en qué estado se encuentran en todo momento.
  • Si la aplicación se divide en capas y cada una en diferentes contenedores, algo muy habitual, que éstos sepan cómo comunicarse entre sí sin que tengas que hacerlo todo manualmente.
  • Cuando la aplicación crezca que pueda escalar automáticamente, levantando nuevas instancias para atender a más usuarios, desplegando más contenedores en otras máquinas, etc... Es decir, lograr que tu desarrollo no muera de éxito.

En definitiva, cuando empiezas a desplegar en serio aplicaciones "contenedorizadas" vas a tener que desplegar los contenedores, arrancar cada uno cuando le corresponda, comunicarlos entre sí, gestionar su almacenamiento, lidiar con sus fallos y caídas, y escalarlos cuando se necesite. Y hacer esto a mano puede llegar a ser una pesadilla y algo totalmente inviable en algunos entornos.

Es ahí en donde entra en juego Kubernetes, una tecnología Open Source desarrollada por Google que se encarga de todas estas cosas y muchas más. Es lo que se denomina un orquestador de contenedores, ya que los dirige y coordina, como el director de una orquesta, para que trabajen adecuadamente todos juntos.

Esquema básico de la relación entre Docker y Kubernetes

Puedes profundizar más en las utilidades de Kubernetes en este estupendo artículo de Eduard Tomás, el autor y tutor del mejor curso online que existe sobre Docker y Kubernetes.

Entonces ¿en qué se parecen o diferencian Docker y Kubernetes?

Como podemos deducir de lo anterior, Docker y Kubernetes son tecnologías relacionadas, pero no tienen nada que ver.

Docker es la tecnología que nos va a permitir hacer lo básico del trabajo con contenedores (definirlos, ejecutarlos y que funcionen), mientas que Kubernetes saca partido a esta tecnología para llevarla un nivel más allá, potenciando a Docker para permitirnos crear algo mucho más complejo a partir de esa tecnología de base.

Conviene aclarar que Docker no es la única tecnología de contenedores que existe ni la única que puede utilizar Kubernetes. Y Kubernetes no es el único orquestador de contenedores Docker que hay en el mercado, ni mucho menos. De hecho, Docker tiene su propio orquestador llamado Swarm que puedes utilizar de serie con esta tecnología.

Sin embargo, ambas son las tecnologías dominantes en su especialidad (Docker la principal tecnología de contenedores, y Kubernetes el principal orquestador de contenedores), y juntos forman una pareja imbatible para construir aplicaciones basadas en contenedores, modernas, escalables y con toda la complejidad que necesitemos.