Desplegar sitio web
Desplegar una Web con Docker y containerd
1. Requisitos previos
- Kubernetes instalado (
kubeadm
concontainerd
). kubectl
configurado correctamente.- Docker instalado (para construir la imagen).
ctr
ycrictl
instalados (para gestionarcontainerd
).
2. Crear la página web y el Dockerfile
Primero, creamos el código HTML y el Dockerfile para empaquetarlo en un contenedor.
2.1- Crear el archivo index.html
mkdir -p ~/static-website
cd ~/static-website
nano index.html
Contenido:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8" />
<title>Hola Mundo</title>
</head>
<body>
<h1>¡Hola, Kubernetes!</h1>
</body>
</html>
Guardar (CTRL+X
, Y
, Enter
).
2.2- Crear el Dockerfile
nano Dockerfile
Contenido:
FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html
Guardar (CTRL+X
, Y
, Enter
).
3. Construir la imagen con Docker
Ejecuta el siguiente comando para construir la imagen en Docker:
docker build -t static-website:v1 .
Verifica que la imagen se creó correctamente:
docker images
4. Mover la imagen de Docker a containerd
Kubernetes no usa Docker directamente, así que debemos exportar la imagen de Docker e importarla en containerd
.
4.1- Exportar la imagen desde Docker
docker save static-website:v1 -o static-website.tar
4.2- Importar la imagen en containerd
sudo ctr -n k8s.io images import static-website.tar
4.3- Verificar que la imagen está en containerd
sudo crictl images
La imagen ya está lista para ser usada en Kubernetes.
5. Crear el manifiesto de Kubernetes (static-website.yaml
)
nano static-website.yaml
Contenido:
apiVersion: apps/v1
kind: Deployment
metadata:
name: static-website
spec:
replicas: 1
selector:
matchLabels:
app: static-website
template:
metadata:
labels:
app: static-website
spec:
containers:
- name: static-website
image: static-website:v1
imagePullPolicy: Never
ports:
- containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
name: static-website-service
spec:
type: NodePort
selector:
app: static-website
ports:
- protocol: TCP
port: 80
targetPort: 80
nodePort: 30080
Guardar (CTRL+X
, Y
, Enter
).
6. Desplegar la aplicación en Kubernetes
kubectl apply -f static-website.yaml
Verificar que el pod está corriendo:
kubectl get pods
Verificar que el servicio está creado:
kubectl get svc
Salida esperada:
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 10m
static-website-service NodePort 10.101.198.243 <none> 80:30080/TCP 30s
7. Acceder a la web desde el navegador
-
Obtener la IP de la VM:
hostname -I
-
Acceder desde el navegador:
http://<IP-DE-TU-VM>:30080
-
Verificar acceso desde dentro de la VM:
curl http://localhost:30080
Resumen final
- Construiste la imagen con Docker.
- Exportaste la imagen y la importaste en containerd.
- Desplegaste la aplicación en Kubernetes.
- Configuraste las reglas de red para que sea accesible.
- Probaste y accediste con
http://<IP-VM>:30080
.
Este método te permite usar Docker para construir imágenes, pero aprovechar containerd
en Kubernetes sin problemas.