Parte: 0 — Fundamentos y prerrequisitos · Fuente: Docker Documentation / NIST SP 800-190 ⏱️ Duración estimada: 110 min · Nivel: Fundamentos
Usar contenedores para desplegar entornos vulnerables y herramientas de forma rápida, reproducible y desechable. Al terminar sabrás construir imágenes, ejecutar contenedores, orquestar con Docker Compose y comprender las nociones básicas de seguridad de contenedores, incluido su aislamiento respecto a una VM.
Al finalizar, el alumno podrá:
| # | Tema | Por qué importa |
|---|---|---|
| 1 | Imágenes vs. contenedores | Plantilla vs. instancia |
| 2 | CLI de Docker | run, ps, exec, logs, stop |
| 3 | Dockerfile | Construir imágenes propias |
| 4 | Volúmenes y redes | Persistencia y conectividad |
| 5 | Docker Compose | Multi-servicio declarativo |
| 6 | Labs vulnerables | Entornos de práctica reproducibles |
| 7 | Aislamiento | Namespaces y cgroups |
| 8 | Seguridad de contenedores | Superficie y buenas prácticas |
compose.yml. Clave: levanta un laboratorio completo con un comando.Instala Docker Engine (o Docker Desktop). Verifica:
docker --version && docker run hello-world
Trabaja dentro de tu VM de laboratorio para no exponer contenedores vulnerables. Imágenes de práctica: vulnerables/web-dvwa, bkimminich/juice-shop. Ten Compose disponible (docker compose version).
bash
docker run -d --name web -p 8080:80 nginx
docker ps ; curl -s localhost:8080 | head
bash
docker logs web ; docker exec -it web bash
bash
docker run -d -p 3000:3000 bkimminich/juice-shop
Abre http://localhost:3000 desde la propia VM.
4. Construir una imagen. Crea un Dockerfile con una herramienta Python propia (p. ej. tu pyscan.py) y constrúyela:
dockerfile
FROM python:3.12-slim
COPY pyscan.py /app/pyscan.py
ENTRYPOINT ["python", "/app/pyscan.py"]
bash
docker build -t pyscan . && docker run --rm pyscan --help
compose.yml que levante DVWA + su base de datos y arráncalo con docker compose up -d.bash
docker rm -f web ; docker compose down
⚠️ Nota ética y de seguridad: las imágenes deliberadamente vulnerables (DVWA, Juice Shop) jamás deben exponerse a Internet ni a tu red doméstica. Ejecútalas solo en el laboratorio aislado y elimínalas al terminar.
Crea con Docker Compose un laboratorio web vulnerable reproducible (por ejemplo DVWA con su base de datos) que se levante con un solo comando en tu red aislada, más un contenedor "atacante" con tus herramientas Python. Documenta cómo se lanza, cómo se conectan y cómo se destruye todo limpiamente.
Criterio de aceptación: docker compose up -d levanta la app vulnerable accesible solo desde la VM; el contenedor atacante alcanza a la víctima por la red interna de Compose; y docker compose down elimina todo sin dejar recursos huérfanos. Otro alumno reproduce el lab con tu compose.yml.
| Síntoma / mensaje | Causa y cómo arreglar |
|---|---|
permission denied al usar docker |
Tu usuario no está en el grupo docker. Añádelo o usa sudo. |
| El puerto ya está en uso | Otro proceso ocupa el puerto host. Cambia el mapeo -p. |
| Los datos desaparecen al recrear | No usaste volumen. Monta un volumen para persistencia. |
| Lab vulnerable accesible desde fuera | Bindeaste a 0.0.0.0 en red no aislada. Restringe a la VM/red interna. |
| Imagen enorme/lenta | Base pesada y capas mal ordenadas. Usa imágenes slim/alpine y aprovecha la caché. |
❓ ¿Un contenedor es tan seguro como una VM? No. Comparte el kernel del host, por lo que su aislamiento es más débil. Para malware o exploits de kernel, usa VMs; para servicios y labs web reproducibles, contenedores.
❓ ¿Por qué Docker para labs si ya tengo VMs? Rapidez y reproducibilidad: levantas y destruyes entornos en segundos y compartes un compose.yml. Se complementan con las VMs de la Clase 004.
❓ ¿Debo actualizar/escanear mis imágenes? Sí: las imágenes contienen dependencias con CVEs. Escanéalas (Trivy, Grype) y usa bases mínimas y actualizadas.
❓ ¿Contenedor como root es peligroso? Sí: si el contenedor se compromete, el proceso corre como root y un escape sería más dañino. Usa usuarios no privilegiados en tus imágenes.
Clase 021 — Criptografía: conceptos fundamentales e intuición
Clase 023 — Sistemas operativos: procesos, memoria y syscalls