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
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:
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.