Bienvenida al curso
El firewall del servidor dice que solo SSH está abierto. Usted levanta una base de datos en un contenedor y la prueba desde otra máquina de la red:
$ sudo ufw status
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
$ docker run -d --name db -p 5432:5432 -e POSTGRES_PASSWORD=cambiar postgres:16
# desde otra máquina de la red
$ nc -zv 192.0.2.10 5432
Connection to 192.0.2.10 5432 port [tcp/postgresql] succeeded!No es un error de UFW. Al publicar un puerto, Docker escribe sus propias reglas de iptables, y esas se evalúan antes que las de UFW.
Bienvenido a Docker: fundamentos y seguridad. Va a empaquetar y ejecutar aplicaciones en contenedores sabiendo qué abre cada opción, qué queda dentro de cada imagen y qué controla de verdad cada bandera de docker run.
Qué va a lograr
- Explicar qué es un contenedor y en qué se diferencia de una máquina virtual.
- Manejar el ciclo de vida de un contenedor con
docker run,ps,logs,exec,stopyrm. - Escribir Dockerfiles con caché bien aprovechada, etiquetas fijas,
.dockerignorey multi-stage. - Conectar una API Python con PostgreSQL usando redes, volúmenes y Compose sin hornear secretos en la imagen.
- Endurecer un contenedor (usuario no root, imagen mínima, Trivy, capacidades, límites) y detectar el socket montado o
--privileged.
Para quién es y qué necesita
Es para quien ya se mueve con soltura en una terminal Linux, venga de desarrollo, operaciones o seguridad. Conviene haber hecho Linux básico: 15 comandos para empezar; la píldora Su primer contenedor con Docker sirve de calentamiento.
Necesita una VM con Ubuntu 22.04 o 24.04 (4 GB de RAM y 20 GB de disco como mínimo) o Docker Desktop en Windows o macOS. Prefiera la VM: el caso de arriba y varios del módulo 4 se ven tal cual en Linux.
Cómo está organizado
| Módulo | Qué aprende | Laboratorio |
|---|---|---|
| 1. Contenedores: primeros pasos | Qué es un contenedor, imágenes y capas, instalación y el cliente docker | Sus primeros contenedores con nginx |
| 2. Construir imágenes | Dockerfile, caché, docker build, etiquetas, .dockerignore y multi-stage | La imagen de una API en Python |
| 3. Redes, volúmenes y Compose | Redes de usuario, publicación de puertos, volúmenes, Compose y secretos | API y PostgreSQL con Compose |
| 4. Seguridad de contenedores | Usuario no root, imágenes mínimas, Trivy y Docker Scout, socket, capacidades y límites, más la conclusión | Endurecer un contenedor de punta a punta |
| Evaluación | 6 preguntas sobre todo el curso | Aprueba con 70 % |
Cómo aprovecharlo
Haga docker pull de las imágenes de cada laboratorio antes de sentarse a trabajar, para no quedarse esperando descargas a mitad de un paso.
El laboratorio del módulo 3 es el que más se traba: junta en un solo compose.yaml dos redes, un volumen, un secreto y la condición de salud que hace esperar a la API hasta que PostgreSQL responde. Un nombre mal escrito y la API no levanta. Valide con docker compose config y lea docker compose logs api antes de cambiar nada.
En el módulo 4 compruebe cada control con docker inspect o docker exec, no con la fe de que la bandera quedó bien escrita. Al aprobar la evaluación final recibe el certificado y la insignia.
Tiempo estimado
Unas 5 horas, más de hora y media en laboratorios. Al terminar cada uno, limpie con docker compose down o docker rm.