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
- Pods: La unidad básica de ejecución en Kubernetes, que puede contener uno o más contenedores.
- Nodes: Servidores en los que Kubernetes ejecuta los contenedores.
- Deployments: Administran la implementación y actualización de los pods.
- 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ística | Docker | Kubernetes |
---|---|---|
Gestión de Contenedores | Ejecuta contenedores individuales | Orquesta múltiples contenedores |
Escalabilidad | Manual | Automática y distribuida |
Networking | Requiere configuración | Networking 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.