Uso eficiente de puertos en Docker: Ejemplos prácticos

Uso eficiente de puertos en Docker: Ejemplos prácticos

¿Cómo utilizar los puertos en Docker?

Vamos a crear un contenedor con un servidor web nginx, para ello utilizamos el contenedor con el mismo nombre.

docker container run -d nginx

Si exploramos los contenedores en ejecución nos daremos cuenta que existe un puerto 80 disponible pero este no esta enrutado a ningun puerto en el host.

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES
723b2fe61ad4        nginx               "/docker-entrypoint.…"   About a minute ago   Up About a minute   80/tcp              crazy_hugl

Podemos obtener la ip del contenedor explorando los detalles mediante el comando container inspect.

docker container inspect 723b2fe61ad4

En mi caso el valor de IPAddress es 172.17.0.2. Por lo cual al abrir la dirección http://172.17.0.2 me muestra la pagina de bienvenida de nginx. Sin embargo si intentamos conectarnos al servidor web utilizando el localhost vamos a encontrarnos que no se muestra la pagina de bienvenida debido a que no hemos mapeado el puerto del host al del contenedor.

Para enrutar un puerto del contener a uno del host en docker, utilizamos el parámetro -p puerto_host:puerto_contenedor. Por ejemplo para mapear el puerto 80 del contenedor al 8081.

docker container run -d -p 8081:80/tcp -p 8081:80/udp nginx

En este ejemplo hemos mapeado el puerto 80 del contenedor al 8081 del host, tanto para tcp como para udp.

Si ejecutamos curl sobre el puerto 8081 o abrimos http://localhost:8081 en el navegador podremos ver la página de bienvenida de nginx.

curl http://localhost:8081

Por último si deseamos ver la lista de puertos asociados a un contenedor podemos usar el comando container port indicando el identificador del contenedor.

docker container port c66dea11c677
80/tcp -> 0.0.0.0:8081
80/udp -> 0.0.0.0:8081