Práctica: Docker Backend + Frontend

Comunicación entre servicios en red interna

Introducción

En sistemas modernos, las aplicaciones se dividen en servicios independientes (backend y frontend). Docker permite ejecutarlos de forma aislada pero comunicados mediante redes internas.

Los contenedores no se comunican por IP manual, sino por nombre dentro de la red Docker.

Objetivo

Condiciones del entorno

docker --version
docker ps

Paso 1: Crear red interna

docker network create red_interna

Paso 2: Backend (FastAPI)

Crear archivo app.py:

from fastapi import FastAPI

app = FastAPI()

@app.get("/api")
def api():
    return {"mensaje": "Hola desde backend"}

Crear Dockerfile:

FROM python:3.10
WORKDIR /app
COPY . .
RUN pip install fastapi uvicorn
CMD ["uvicorn", "app:app", "--host", "0.0.0.0", "--port", "8000"]

Construir:

docker build -t backend .

Ejecutar:

docker run -d --name backend --network red_interna backend

Paso 3: Frontend (HTML simple)

Crear archivo index.html:

<html>
<body>
<h1>Frontend</h1>
<script>
fetch("http://backend:8000/api")
.then(res => res.json())
.then(data => {
    document.body.innerHTML += "<p>" + data.mensaje + "</p>";
});
</script>
</body>
</html>

Crear Dockerfile:

FROM nginx:alpine
COPY index.html /usr/share/nginx/html/index.html

Construir:

docker build -t frontend .

Ejecutar:

docker run -d --name frontend -p 8080:80 --network red_interna frontend

Validación

Abrir navegador:

http://IP_SERVIDOR:8080

Debe mostrar mensaje del backend

Análisis

Docker DNS resuelve nombres automáticamente dentro de la red.

Reflexión

Extensión

Entrega