Cursos & CarrerasDiario del SysAdminDocker

Mapeo de puertos con Docker

En este post vamos trabajar con el mapeo de puertos con Docker, esto significa que asignaremos un puerto local de host para apuntarlo a  un puerto de la aplicación que esta corriendo en el contenedor.

En primer lugar a inspeccionaremos el repositorio llamado training para saber si alguna de las imágenes nos sirve para hacer pruebas, para hacer esto usamos el comando: docker search training

docker search training
NAME                                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
training/webapp                                                                     74                                      [OK]
training/sinatra                                                                    18                                      
training/postgres                                                                   10                                      [OK]
training/namer                                                                      2                                       [OK]
termit/training-apache              Apache image for the Kubernetes training        1                                       
training/whoami                     HTTP docker service printing it's container …   1                                       
cloudbees/training-jenkins                                                          0                                       
kidk/training-images-receiver       Docker image with receiver service              0                                       [OK]
kidk/training-images-calc_words     Docker image with calc_words service            0                                       [OK]
kidk/training-images-processor      Docker image with processor service             0                                       [OK]
kidk/training-images-web            Docker image with web service                   0                                       [OK]
kidk/training-images-nginx          Docker image with nginx service                 0                                       [OK]
kidk/training-images-calc_letters   Docker image with calc_letters service          0                                       [OK]
cloudbees/training-jenkins-agent                                                    0                                       
cnfltraining/training-tools         Tools used in Confluent training courses        0                                       
kidk/training-images-generator      Docker image with generator service             0                                       [OK]
xaan001/training-demo-repoz         training-demo-repoz                             0                                       
training/dockercoins-worker                                                         0                                       
kidk/training-images-rabbitmq       Docker image with rabbitmq service              0                                       [OK]
training/dockercoins-hasher                                                         0                                       
training/dockercoins-rng                                                            0                                       
training/dockercoins-webui                                                          0                                       
cloudbees/training-devbox                                                           0                                       
cloudbees/training-web                                                              0                                       
training/stress                     duped for stability from https://hub.docker.…   0                                       
docker search training

 

Para trabajar descargaremos del repositorio training una imagen llamada webapp, esta aplicación escrita en Python muestra simplemente «Hello World». En la ejecución del comando incluí el parámetro -P el cual permite mapear un puerto cualquiera del host donde esta corriendo docker con el puerto de aplicación en este caso el 5000.

Mapeo de puertos con docker
Mapeo de puertos con docker
docker run -d -P training/webapp
Unable to find image 'training/webapp:latest' locally
latest: Pulling from training/webapp
Image docker.io/training/webapp:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image for better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/
e190868d63f8: Pull complete 
909cd34c6fd7: Pull complete 
0b9bfabab7c1: Pull complete 
a3ed95caeb02: Pull complete 
10bbbc0fc0ff: Pull complete 
fca59b508e9f: Pull complete 
e7ae2541b15b: Pull complete 
9dd97ef58ce9: Pull complete 
a4c1b0cb7af7: Pull complete 
Digest: sha256:06e9c1983bd6d5db5fba376ccd63bfa529e8d02f23d5079b8f74a616308fb11d
Status: Downloaded newer image for training/webapp:latest
cbdb779edf011f3bde30f7ad786bd9f00c407c473946a2e9bc8e59fedec1dd0a
docker run -d -P training/webapp

Podemos observar como esta corriendo el contenedor y el puerto mapeado utilizando el comnado: docker ps -a

docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
cbdb779edf01        training/webapp     "python app.py"     57 seconds ago      Up 54 seconds       0.0.0.0:32771->5000/tcp   inspiring_dijkstra
docker ps -a

Para avanzar un paso vamos a mapear el puerto 5000 del host con el puerto 5000 del contenedor. Utilizando el parámetro -p de la siguiente manera.

 

docker run -d -p 5000:5000  training/webapp
ad829f81f6ef202df46ee2a3a85eec5665d6751f31b80675edd6354f3667c329
docker run -d -p 5000:5000 training/webapp

Para verificar podemos navegar utilizando un navegador de texto  como por ejemplo links, de la siguiente manera.

links http://localhost:5000

 

Monitoreo de Logs

Ahora vamos a monitorear el mapeo de puertos docker con el comando docker logs de la siguiente manera:

 docker logs gallant_jackson 
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
172.17.0.1 - - [09/Jun/2020 11:40:59] "GET / HTTP/1.1" 200 -
docker logs gallant_jackson

 

Otra forma de monitorear logs es utilizando el comando top de la siguiente manera

docker top gallant_jackson 
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                8260                8242                0                   08:36               ?                   00:00:00            python app.py
docker top gallant_jackson

Hasta aqui hemos visto como docker nos permite mapear puertos de manera muy sencilla, a la hora de trabajar es muy importante saber bien como es el mapeo de puertos con docker.

Mas información en https://docs.docker.com/config/containers/container-networking/

Tengamos en cuenta que también podemos mapear puertos udp si fuera necesario.

 

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *