Si queremos acceder a un contenedor docker podemos verlo desde dos perspectivas:
- Acceso al contenedor en modo consola.
- Acceso a los servicios externos que nos proporciona dicho contenedor. Aquí vemos el concepto de mapeo de puertos.
Acceso al contenedor en modo CLI
Podemos acceder a un contenedor a través de la propia consola CLI desde nuestro host anfitrión. Para ello necesitamos poder distinguir el contenedor al que queremos acceder y ejecutar docker exec -it CONTAINER_ID/NAMES /bin/bash (o /bin/sh según sea soportado o no por el sistema operativo del contenedor que lanzamos). A continuación vemos un acceso a un contenedor en el que muestra el usuario a través del que hemos accedido. En este caso hemos accedido a un contenedor alpine que es una version Linux que ocupa menos de 6 MB.

Por defecto, cuando accedemos a un contenedor accedemos como «root» y si tenemos acceso a los recursos externos a ese contenedor (por que explícitamente compartamos una carpeta con el host anfitrión, por ejemplo) podríamos realizar cambios permanentes en el propio host anfitrión. La manera de evitar este tipo de «vulnerabilidad» del sistema se tratara en otro capitulo mas adelante.
Con este tipo de acceso podemos instalar y actualizar nuestro contenedor como si estuviésemos en una MV.
Acceso a servicios que proporciona un contenedor Docker
Los servicios a los que se pueden acceder y que se ejecutan en un contenedor son su principal funcionalidad. No obstante, un contenedor (por defecto) está conectado de manera interna a nuestro host anfitrión y utiliza su interface de red tanto para su trafico de salida como un acceso de entrada a él.
Para realizar esto se debe «mapear» los puertos que están abiertos por los servicios que se ejecutan en el contenedor con los que queremos que estén disponibles para el acceso externo a la IP o URL que identifica nuestro host.
Para mapear los puertos debemos de utilizar la sintaxis -p PUERTO_HOST:PUERTO_CONTENEDOR y lo podemos hacer tantas veces o servicios como deseemos.
En la siguiente imagen lanzaremos una imagen de nginx de solo 126 MB en el que se ha instalado OpenSSH a parte del servicio web que tiene en el. Mapearemos los puertos 80 y 22 del contenedor con los 8081 y 222 del host anfitrión y veremos el resultado del acceso a dichos puertos/servicios del host anfitrión.



Deja una respuesta