Uno de los usos más extendidos de YAML es la configuración de aplicaciones y servicios. Su sintaxis clara lo volvió el formato predilecto en herramientas de DevOps como Docker Compose y Kubernetes.
docker-compose.yml
)¿Qué es Docker Compose? Permite definir y ejecutar aplicaciones multi-contenedor desde un único archivo YAML que describe servicios, redes y volúmenes.
Ejemplo: aplicación web con base de datos
version: "3.9"
services:
app:
image: miapp:1.0
container_name: app_container
ports:
- "8080:8080"
environment:
- DB_HOST=db
- DB_USER=root
- DB_PASSWORD=1234
depends_on:
- db
db:
image: mysql:8.0
container_name: db_container
environment:
MYSQL_ROOT_PASSWORD: 1234
MYSQL_DATABASE: miappdb
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
Explicación:
version
: versión del esquema.services
: define los contenedores (app y db).app
: servicio que expone el puerto 8080.db
: servicio MySQL con volumen persistente.volumes
: asegura que los datos sobrevivan a reinicios.Ejecución: docker-compose up -d
levanta todo el stack.
deployment.yaml
y service.yaml
)Kubernetes describe el estado deseado de pods, servicios, deployments, configmaps y más a través de archivos YAML.
deployment.yaml
)apiVersion: apps/v1
kind: Deployment
metadata:
name: mi-app
labels:
app: mi-app
spec:
replicas: 2
selector:
matchLabels:
app: mi-app
template:
metadata:
labels:
app: mi-app
spec:
containers:
- name: mi-app-container
image: miapp:1.0
ports:
- containerPort: 8080
Claves: replicas
define la cantidad de instancias; selector
y labels
enlazan el Deployment con los pods correctos; containers
especifica imagen y puertos.
Aplicación: kubectl apply -f deployment.yaml
service.yaml
)apiVersion: v1
kind: Service
metadata:
name: mi-app-service
spec:
selector:
app: mi-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
Claves: selector
conecta el Service con los pods etiquetados app: mi-app
; ports
define la redirección; type
determina el alcance (interno con ClusterIP
).
Aplicación: kubectl apply -f service.yaml
Podemos declarar varios objetos en un único archivo usando separadores ---
.
---
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-container
image: miapp:1.0
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: mi-app-service
spec:
selector:
app: mi-app
ports:
- protocol: TCP
port: 80
targetPort: 8080
type: ClusterIP
Aplicación conjunta: kubectl apply -f mi-app.yaml
Aspecto | Docker Compose | Kubernetes |
---|---|---|
Enfoque | Despliegue local y sencillo | Orquestación de clústeres a gran escala |
Archivo YAML | docker-compose.yml |
Archivos por recurso (deployment.yaml , service.yaml , etc.) |
Escalabilidad | Limitada (escala manual) | Escalado automático con réplicas/autoscaling |
Complejidad | Fácil de aprender | Más complejo y potente |
deployment.yaml
, service.yaml
, configmap.yaml
).En definitiva, YAML es la base de la configuración en Docker Compose y Kubernetes, pilares del ecosistema DevOps. Dominar archivos como docker-compose.yml
, deployment.yaml
y service.yaml
es esencial para desplegar aplicaciones modernas.