0% encontró este documento útil (0 votos)
25 vistas4 páginas

Práctica Docker: Conexiones y Redes

Cargado por

hbarromoya15
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
25 vistas4 páginas

Práctica Docker: Conexiones y Redes

Cargado por

hbarromoya15
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

.

Grado en Inteligencia Artificial

REDES [G4121225] [2023/2024]

Práctica 4 - Docker - Networking

Resumen
El objetivo de esta práctica es conocer el funcionamiento básico del gestor de contenedores Docker
y desarrollar habilidades en su manejo.

1. Indicaciones previas
Esta práctica se realizará en pareja. No se puede utilizar internet para buscar ayuda sobre los comandos
de Docker, sino que debes aprender a utilizar la ayuda por lı́nea de comandos: docker --help o docker
<comando> --help.

2. Conectando el contenedor
Ahora que somos capaces de crear contenedores adaptados a las necesidades que tenemos en cada mo-
mento, vamos a ver cómo podemos extender sus capacidades conectándolos con el mundo exterior y entre
sı́.
En concreto, podemos definir tres tipos de conexiones para los contenedores de Docker:
1. A Internet: Si necesitamos conectar procesos dentro del contenedor a algún servicio de Internet,
como puede ser un servidor web.
2. Localmente: En determinados momentos podemos necesitar conectar nuestro contenedor con algún
servicio que se esté ejecutando en el host.
3. Entre contenedores: Una filosofı́a en la utilización de contenedores es que cada contenedor se utilice
para una única tarea. Ası́, si tenemos una aplicación compleja compuesta por diferentes servicios,
podemos simplificar la gestión poniendo cada servicio en un contenedor independiente.
Por ejemplo, para hacer un servicio web, podemos configurar el servidor web en un contenedor, e
indicarle que tome datos de una base de datos configurada dentro de otro contenedor; estos dos
contenedores necesitarán estar interconectados.
En esta práctica vamos a aprender cómo configurar nuestros contenedores para poder realizar cualquiera
de las conexiones descritas. Comencemos por la primera, la conexión con Internet.
Ejercicio 1: Vamos a lanzar un contenedor en base a una imagen de Python. Dicho contenedor tiene
que ejecutarse en modo interactivo para poder insertar comandos desde la terminal. Una vez que
tenemos el contenedor funcionando, vamos a importar el módulo requests para hacer peticiones a
un servicio web. Escribe lo siguiente: import requests en la terminal de Python.
Vaya, parece que la imagen que hemos utilizado para ejecutar el contenedor no tiene instalado dicho
módulo. . . Para solucionarlo, solo tenemos que instalar el módulo requests mediante el comando
pip install requests. Ahora bien, el contenedor nos proporciona una terminal de Python, y no
podemos salir de ella para ir a una terminal de Bash, ya que en cuanto cerramos Python con quit(),
el contenedor también se cierra.
Existe una solución rápida para poder instalar el módulo que nos falta y continuar con el ejercicio. Si
conoces dicha solución, coméntala en el informe y utilı́zala para saltarte los pasos del Dockerfile.
En caso contrario, vamos a tener que crear este Dockerfile para generar una imagen personalizada
de Python, y con el módulo requests ya instalado. Vamos a aprovechar para incluir también una
aplicación Python con el código para probar a conectar el contenedor a Internet:
1. Elimina el contenedor anterior.
2. Sitúate en un directorio vacı́o de tu equipo.
3. Crea un código de Python que realice una llamada GET para obtener, a través de una API,
información del Producto 1 disponible en la web dummyjson.com. Para ello, crea un fichero
llamado app.py con el siguiente contenido:
• import requests
• api_url = "https://dummyjson.com/products/1"
• response = requests.get(api_url)
• print(response.json())
4. Crea el Dockerfile de manera que:
• Se utilice como imagen base la imagen de Python.
• Se establezca /app como directorio de trabajo.
• Se instale el módulo requests mediante el comando pip install requests.
• Se ejecute la aplicación app.py mediante el comando python.
Cuando lances el contenedor, no te olvides de hacerlo en modo attached para poder ver el resultado
de la ejecución del comando Python.
Para aquellos que hubiesen conseguido instalar el módulo requests sin necesidad de crear la imagen
personalizada, lo único que tienen que hacer es ejecutar directamente en la terminal de Python las
instrucciones indicadas para app.py.
En cualquier caso, el resultado final es que el contenedor recogerá de dummyjson.com información
sobre el Producto 1. Como habrás podido comprobar, no hemos necesitado ninguna configuración
adicional para que el contenedor tenga conexión a Internet. Es decir, Docker habilita acceso a
internet desde los contenedores por defecto.
En el informe, muestra los pasos seguidos para completar este ejercicio, incluido el Dockerfile
creado en caso de utilizarlo.
La conexión de un contenedor a un servicio local será un ejercicio opcional que no contará para nota.
La propuesta es abierta, y consiste en instalar una base de datos en el host, como MongoDB o SQLite.
A continuación, podemos utilizar módulos de Python para conectarnos a la base de datos. Por ejem-
plo, en el caso de usar MongoDB, necesitarı́amos instalar pymongo, y realizar consultas desde Python
tal que cliente = MongoClient("mongodb://host.docker.internal:27017"). En este caso, el valor
host.docker.internal indica al contenedor que se trata de un servicio ubicado en el host.

2
El último tipo de conexión que vamos a probar es la comunicación entre contenedores. Incluye en el
informe todos los pasos seguidos para completar los ejercicios.
Ejercicio 2: Comenzaremos con una forma directa para conectar nuestros contenedores. Estos son
los pasos a seguir:
1. Para todos los contenedores que tengas abiertos.
2. Descarga del Campus Virtual los ficheros correspondientes al Ejercicio 2 y descomprı́melos en
un directorio vacı́o. A continuación, sitúate en dicho directorio.
3. Ejecuta, en modo detached, un contenedor basado en la imagen de mongo (disponible en Docker
Hub) y llámalo mongodb.
4. Fı́jate en el contenido del fichero app.js. Lo único que hace este código es intentar conectarse
a una base de datos que se encuentra en localhost:27017. Como ya sabrás, localhost hace
referencia a nuestro propio equipo, y por lo tanto no va a funcionar ya que la base de datos
está funcionando dentro de un contenedor (además de que desde un contenedor no se puede
acceder directamente a localhost, tal y como vimos en el ejercicio opcional).
Para solucionarlo, vamos a tener que cambiar ese localhost por la dirección IP del contenedor
que está ejecutando la base de datos. Para conocerla, debemos ejecutar el comando docker
container inspect mongodb, y buscar dentro de la sección NetworkSettings un parámetro
que se llama IPAddress, y que consta de cuatro números separados por puntos. Ahora solo
nos queda sustituir la palabra localhost (dentro del fichero app.js) por la dirección IP que
acabamos de buscar.
5. Con todo configurado, solo nos queda construir la imagen basada en el Dockerfile descargado,
y ejecutar un contenedor sobre ella. Si todo va bien, deberı́as ver un mensaje diciendo: It
works!! - Good work!!.
Ejercicio 3: Como habrás podido comprobar, el método anterior no es muy cómodo ya que nos
obliga a conocer la dirección IP de los contenedores a los que nos queremos conectar. En este
tercer ejercicio vamos a ver una opción más elegante para resolver el problema de interconexión de
contenedores. Docker permite crear redes de contenedores, o simplemente redes, a las que podemos
conectar nuestros contenedores. Vamos a seguir los siguientes pasos:
1. Para todos los contenedores que tengas abiertos. Elimina aquellos que no necesites.
2. Descarga del Campus Virtual los ficheros correspondientes al Ejercicio 2 y descomprı́melos en
un directorio vacı́o. A continuación, sitúate en dicho directorio.
3. A diferencia de los volúmenes, Docker no crea automáticamente una red al indicarla como
argumento, sino que tenemos que crearla manualmente de antemano. Utiliza la ayuda del
comando docker network para averiguar cómo crear una red llamada net_3 (no hace falta
utilizar ninguna opción extra). Lista las redes disponibles para verificar que has creado la red
correctamente.
4. Ejecuta, en modo detached, un contenedor basado en la imagen de mongo (disponible en Doc-
ker Hub), y llámalo mongodb. No olvides incluir la opción correspondiente para conectar el
contenedor con la red que acabamos de crear (usa la ayuda de Docker).
5. Ahora tenemos que ajustar la conexión a la base de datos desde el fichero app.js. Como en el
ejercicio anterior, debemos cambiar localhost por el parámetro adecuado. Afortunadamente,
la red de Docker permite asignar automáticamente a los nombres de los contenedores las

3
direcciones IP pertinentes. Es decir, solo tenemos que sustituir la palabra localhost por el
nombre del contenedor al que nos queremos conectar; mongodb en este caso.
6. Con todo configurado, solo nos queda crear la imagen basada en el Dockerfile y ejecutar el
contenedor. Recuerda incluirlo dentro de la red que hemos creado para este ejercicio. Si todo
va bien, deberı́as ver un mensaje diciendo: It works!! - Good work!!.

3. Formato y fecha de entrega


Haz un breve informe respondiendo a todas las preguntas que se formulan en esta guı́a. Incluye
todos los comentarios pertinentes para justificar las respuestas, ası́ como capturas de pantalla de
los resultados cuando sea necesario. Sube al Campus Virtual un único archivo llamado:
Apellido1 Apellido2-Apellido1 Apellido2.pdf
En la nota obtenida se tendrán en cuenta la estructura y claridad, tanto del informe como de las
respuestas a las preguntas.
La evaluación de esta práctica puede estar sujeta a una revisión individual.
Fecha de entrega: Hasta las 23:59 del dı́a anterior a la siguiente sesión interactiva de tu grupo de
prácticas. Revisa el apartado de entrega en el Campus Virtual para verificar esta fecha.

También podría gustarte