Introducción
En los contenedores, el aislamiento es una característica fundamental. De forma predeterminada, la red de un contenedor está separada del sistema host. Esto significa que un servidor web que se ejecuta dentro del contenedor puede funcionar correctamente y, aun así, ser inaccesible desde el exterior si no publica un puerto de forma explícita.
El mapeo de puertos resuelve esta separación. Reenvía el tráfico desde un puerto elegido del host hacia un puerto elegido dentro del contenedor. Este es uno de los conceptos básicos más importantes de las redes de contenedores, porque explica cómo los servicios aislados pasan a ser accesibles.
Sin ese paso de publicación, un servicio puede funcionar perfectamente dentro del contenedor, pero permanecer privado para el espacio de nombres de red del propio contenedor.
En este laboratorio practicará lo siguiente:
- Ejecutar un contenedor con un servidor web Nginx.
- Mapear el puerto 8080 del host al puerto 80 del contenedor.
- Verificar el mapeo y acceder al servicio.
- Limpiar los recursos.
Exponer el puerto del contenedor
En este paso iniciará un contenedor Docker nuevo mediante la imagen de Nginx.
Nginx es un servidor web que, de forma predeterminada, escucha en el puerto 80 dentro del contenedor. Sin embargo, como el contenedor está aislado, el puerto 80 no es accesible automáticamente desde el entorno de LabEx. Para solucionarlo, mapeará el puerto 8080 de la máquina host al puerto 80 dentro del contenedor.
La sintaxis para mapear puertos es -p <host_port>:<container_port>.
El orden es importante. El lado izquierdo corresponde al puerto del host al que se conectan los clientes, y el lado derecho corresponde al puerto en el que la aplicación está escuchando dentro del contenedor.
Ejecute el siguiente comando en su terminal:
docker run -d -p 8080:80 --name my-nginx nginx
Desglose del comando:
docker run: comando para crear e iniciar un contenedor.-d: ejecuta el contenedor en modo detached (en segundo plano).-p 8080:80: opción para mapear puertos.- 8080: puerto de la máquina host (el entorno de LabEx).
- 80: puerto dentro del contenedor, donde Nginx está escuchando.
--name my-nginx: asigna al contenedor el nombre "my-nginx".nginx: imagen que se utilizará.
Si la operación se realiza correctamente, Docker mostrará el identificador largo del contenedor.
En este punto, Docker no ha modificado Nginx. Ha creado una regla de red para que las solicitudes que llegan al puerto del host se reenvíen al puerto del servicio dentro del contenedor.
Comprobar la configuración de los puertos
Ahora debe verificar que el contenedor se está ejecutando y que el mapeo de puertos está configurado correctamente. El comando docker ps proporciona esta información.
Ejecute el siguiente comando:
docker ps
Debería ver una salida similar a esta:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
abc123456789 nginx "/docker-entrypoint.…" 10 seconds ago Up 10 seconds 0.0.0.0:8080->80/tcp my-nginx
Cómo interpretar la salida:
Observe detenidamente la columna PORTS: 0.0.0.0:8080->80/tcp.
0.0.0.0:8080: significa que el host escucha en el puerto 8080 en todas las interfaces de red.->: indica la dirección del reenvío.80/tcp: es el puerto de destino dentro del contenedor.
Esto confirma que todo el tráfico enviado al puerto 8080 de su máquina se reenviará al puerto 80 dentro del contenedor.
Por eso el mapeo de puertos suele describirse como la acción de "publicar" un puerto del contenedor. Está exponiendo al host o a clientes externos un servicio que, de otro modo, permanecería aislado.
También puede utilizar un comando específico para consultar únicamente los puertos:
docker port my-nginx
Probar el servicio
Ahora que el puerto está mapeado, compruebe si el servidor web es accesible. Como ha mapeado el puerto 8080 del host, puede acceder al servidor Nginx enviando una solicitud a localhost:8080.
Utilizará curl, una herramienta de línea de comandos para realizar solicitudes web.
Ejecute el siguiente comando:
curl localhost:8080
Qué debe observar:
Debería ver el código HTML sin procesar de la página de bienvenida predeterminada de Nginx.
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
<h1>Welcome to nginx!</h1>
...
</html>
Si ve esta salida HTML, ¡enhorabuena! La solicitud viajó desde el host (puerto 8080) -> al contenedor (puerto 80) -> fue procesada por Nginx -> y la respuesta se envió de vuelta.
Este recorrido de ida y vuelta demuestra en la práctica que la red entre el host y el contenedor funciona; no demuestra únicamente que el proceso del contenedor esté en ejecución.
Limpiar los recursos
En este último paso limpiará el entorno. Detener y eliminar los contenedores que ya no necesita es una buena práctica, ya que permite liberar puertos y recursos del sistema.
Primero, detenga el contenedor en ejecución:
docker stop my-nginx
A continuación, elimine el contenedor detenido:
docker rm my-nginx
Verifique que el contenedor ya no existe:
docker ps -a
El contenedor my-nginx ya no debería aparecer en la lista.
Resumen
En este laboratorio ha aprendido correctamente los fundamentos del mapeo de puertos en Docker. Ha realizado lo siguiente:
- Inició un contenedor de Nginx en modo detached.
- Mapeó el puerto 8080 del host al puerto 80 del contenedor mediante la opción
-p. - Verificó la configuración de los puertos con
docker ps. - Accedió al servicio desde el host mediante
curl. - Limpió el contenedor.
Comprender el mapeo de puertos es esencial para implementar aplicaciones web, ya que permite que el tráfico externo llegue a los servicios que se ejecutan dentro de contenedores aislados.



