Docker vs Kubernetes

14 de enero de 2025

La virtualización ha cambiado la forma en que se despliegan y gestionan las aplicaciones, y Docker junto con Kubernetes han revolucionado la industria del software al proporcionar un entorno flexible y escalable basado en contenedores. En este artículo, exploraremos qué son, cómo funcionan y cómo se complementan estas dos tecnologías.

¿Qué es Docker?

Docker es una plataforma que permite crear, distribuir y ejecutar aplicaciones en contenedores. Un contenedor es una unidad de software que agrupa el código y todas sus dependencias, garantizando que la aplicación se ejecute de manera consistente en diferentes entornos.

Instalación de Docker

Si aún no tienes Docker instalado, puedes hacerlo siguiendo las instrucciones oficiales según tu sistema operativo: https://docs.docker.com/get-docker/

Creación de un Contenedor Simple

Para crear un contenedor, primero necesitas una imagen. Docker Hub es un repositorio donde puedes encontrar miles de imágenes preconstruidas. Veamos cómo ejecutar un contenedor de Nginx:

docker run -d -p 8080:80 --name mi_nginx nginx

Esto hará que un servidor web Nginx se ejecute en el puerto 8080 de tu máquina. Puedes acceder a él en http://localhost:8080.

Crear una Imagen Propia con Dockerfile

Un Dockerfile define el entorno de ejecución de una aplicación. A continuación, un ejemplo para una aplicación Node.js:

# Usar la imagen base de Node.js
FROM node:16

# Establecer el directorio de trabajo
WORKDIR /app

# Copiar archivos necesarios
COPY package.json .
RUN npm install
COPY . .

# Exponer el puerto de la aplicación
EXPOSE 3000

# Comando para ejecutar la app
CMD ["node", "server.js"]

Construimos y ejecutamos la imagen:

docker build -t mi_app .
docker run -p 3000:3000 mi_app

¿Qué es Kubernetes?

Kubernetes (K8s) es un sistema de orquestación de contenedores que automatiza la implementación, escalado y gestión de aplicaciones en contenedores. Mientras que Docker gestiona contenedores individuales, Kubernetes permite coordinar múltiples contenedores en un clúster distribuido.

Componentes Principales de Kubernetes

  1. Pods: La unidad básica de ejecución en Kubernetes, que puede contener uno o más contenedores.
  2. Nodes: Servidores en los que Kubernetes ejecuta los contenedores.
  3. Deployments: Administran la implementación y actualización de los pods.
  4. Services: Exponen las aplicaciones en el clúster y las hacen accesibles desde el exterior.

Configuración de un Deployment en Kubernetes

Un archivo YAML define un Deployment que ejecuta una aplicación en un clúster:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mi-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: mi-app
  template:
    metadata:
      labels:
        app: mi-app
    spec:
      containers:
        - name: mi-app
          image: mi_usuario/mi_app:v1
          ports:
            - containerPort: 3000

Aplicamos la configuración con:

kubectl apply -f deployment.yaml

Verificamos los pods activos:

kubectl get pods

Docker vs Kubernetes

CaracterísticaDockerKubernetes
Gestión de ContenedoresEjecuta contenedores individualesOrquesta múltiples contenedores
EscalabilidadManualAutomática y distribuida
NetworkingRequiere configuraciónNetworking avanzado

Docker y Kubernetes son herramientas esenciales para la modernización del desarrollo y despliegue de aplicaciones. Docker permite la creación y ejecución de contenedores de manera eficiente, mientras que Kubernetes facilita su orquestación a gran escala. Si estás comenzando, puedes probar Docker primero y luego explorar Kubernetes para la gestión avanzada de aplicaciones en la nube.