MINI TUTORIAL DOCKER – DÍA 3
Publicar puertos y levantar tu primer servidor NGINX en un contenedor
(la primera “demostración real” del poder de Docker)
1. Objetivo del día
Hoy vas a aprender a:
- exponer puertos desde un contenedor al host
- ejecutar Nginx en un contenedor
- acceder desde un navegador (
http://localhost:8080) - consultar logs
- entender qué ocurre si el puerto está ocupado
- parar y reiniciar el contenedor
Este es el día en el que Docker “impresiona” por primera vez:
levantar un servidor web completo en segundos.
2. Qué significa “publicar un puerto”
Los contenedores tienen puertos internos, pero no son accesibles desde tu máquina host a menos que tú los expongas.
La forma estándar es:
docker run -p PUERTO_HOST:PUERTO_CONTENEDOR imagen
Ejemplo clásico para Nginx:
- Nginx escucha dentro del contenedor en el puerto 80
- Tú quieres verlo desde tu navegador en tu PC
Entonces:
-p 8080:80
→ Tu navegador accede a localhost:8080
→ Docker lo redirige al 80 interno del contenedor
3. Ejecutar Nginx en un contenedor (primer ejemplo real)
Lanza este comando:
docker run -d --name mi-nginx -p 8080:80 nginx
Explicación:
-d→ modo background (detached)--name mi-nginx→ nombre del contenedor-p 8080:80→ tu puerto 8080 apunta al 80 del contenedornginx→ imagen oficial
Comprueba que está corriendo:
docker ps
Deberías ver:
mi-nginx nginx ... Up ... 0.0.0.0:8080->80/tcp
4. Comprobar que funciona
Abre tu navegador:
Deberías ver la página por defecto de Nginx.
Si esto funciona, felicidades:
has levantado un servidor web completo en segundos.
5. Ver logs del contenedor
docker logs mi-nginx
Verás:
- peticiones HTTP
- accesos
- errores (si los hay)
Si recargas el navegador varias veces, verás más líneas.
6. Parar, arrancar y reiniciar Nginx
Parar:
docker stop mi-nginx
Arrancar de nuevo:
docker start mi-nginx
Reiniciar (útil para pruebas):
docker restart mi-nginx
7. ¿Qué pasa si el puerto está ocupado?
Si intentas lanzar otro contenedor con:
docker run -d -p 8080:80 nginx
Verás un error como:
Error starting userland proxy: listen tcp 0.0.0.0:8080: bind: address already in use
Significa:
- en tu PC, el puerto 8080 ya lo está usando otro proceso
- no puedes asignarlo a un nuevo contenedor
Solución: usar otro puerto del host:
docker run -d -p 8081:80 nginx
Esto es muy útil cuando necesitas levantar varias instancias de Nginx simultáneamente.
8. Por qué esto demuestra la potencia real de Docker
Sin Docker, instalar Nginx sería:
- instalar paquetes
- configurar systemctl
- configurar ficheros
- permisos
- asegurarte de que no rompes nada del host
Con Docker fue:
docker run -d -p 8080:80 nginx
Y ya tienes:
- Nginx
- en su propio entorno
- limpio
- sin tocar tu sistema
- sin conflictos de dependencias
- sin configuraciones previas
Esta experiencia es la base de por qué DevOps ama Docker.
9. Práctica guiada del Día 3 (30–40 min)
✔ 1) Ejecutar Nginx en el puerto 8080:
docker run -d --name mi-nginx -p 8080:80 nginx
✔ 2) Comprobar con el navegador
http://localhost:8080
✔ 3) Ver logs:
docker logs mi-nginx
✔ 4) Reiniciar el contenedor:
docker restart mi-nginx
✔ 5) Ejecutar otro Nginx en puerto 8081:
docker run -d --name mi-nginx2 -p 8081:80 nginx
Probar:http://localhost:8081
✔ 6) Limpiar:
docker stop mi-nginx mi-nginx2
docker rm mi-nginx mi-nginx2
10. Checklist del Día 3
- Sé qué significa
-p HOST:CONTENEDOR - He levantado Nginx en un contenedor
- He accedido desde el navegador
- Sé ver logs del contenedor
- Sé arrancar, parar y reiniciar contenedores
- Entiendo qué pasa si un puerto está ocupado
- He hecho la práctica guiada
Si está todo marcado → Día 3 completado ✔
👉 Día 4 – Volúmenes y persistencia de datos (lo que pasa cuando quieres guardar algo realmente)
