1. Introducción
Este artículo (1/3) explica de forma más detallada cómo crear una aplicación multi-container con Docker Compose basada en un Tutorial AKS original de Microsoft. Además, proporciona aclaraciones de conceptos fundamentales de Docker más allá de imágenes (images) y contenedores (containers). Entender qué es un servicio en Docker, cómo se comunican los diferentes contenedores o qué infraestructura interna a nivel de networking es creada para interconectar los containers son parte de los objetivos fundamentales de este artículo.
2. Entorno de Trabajo
El entorno en el que se han realizado todos los ejemplos es una Máquina Virtual Windows 2019 Datacenter de Azure con las siguientes características:
- Funcionalidades de Hyper-V y Contenedores de Windows habilitadas.
- Docker Desktop for Windows instalado.
- Máquina virtual con tamaño Standard D2s v3. Docker Desktop for Windows instala una máquina virtual denominada DockerDesktopVM sobre la que se ejecuta el daemon de Docker. Por tanto, para que Docker funcione se debe ejecutar una máquina virtual "anidada" en otra. Esto exige hacer uso de capacidades de virtualización anidada lo cual restringe el tamaño de máquina virtual que debemos elegir. Las series Dv3 y Ev3 admiten esta característica. Por otro lado y como se muestra en el primer punto, Hyper-V debe estar habilitado ya que este componente es el encargado de interactúar con la máquina virtual DockerDesktopVM. Puedes comprobar como esta máquina virtual se inicia o detiene cada vez que inicias o detienes Docker Desktop.
![](data:image/png;base64,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)
![](data:image/png;base64,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)
- Linux Subsystem for Windows habilitado. Docker permite seleccionar el tipo de contenedores a utilizar (opciones Switch to Linux Containers o Switch to Windows Containers). Se debe elegir una de ellas, no es posible la selección de ambas al mismo tiempo. El uso de contenedores Linux es masivamente superior al uso de contenedores Windows. Linux Subsystem for Windows permite que los contenedores Linux se ejecuten directamente (sin sobrecargas de máquinas virtuales adicionales) en un subsistema Linux dentro de Windows. Docker Desktop for Windows no debe ser utilizado en entornos de producción. Por tanto, se usará esta configuración solamente en nuestra máquina de "desarrollo" Windows. En "producción", los contenedores serán desplegados en clusters de kubernetes (AKS) sobre máquinas Linux.
3. Consideraciones Generales
A continuación se listan las siguientes consideraciones generales respecto a todo lo explicado en este artículo:
- Se trabajará con Linux containers y Docker Desktop for Windows en nuestra máquina de desarrollo. Por tanto, si no lo has hecho ya, arranca Docker y ejecuta la opción Switch to Linux containers. Ten en cuenta las condiciones explicadas en el capítulo anterior para la correcta ejecución de Linux containers en máquinas Windows.
- La aplicación demo está basada en un Tutorial AKS original de Microsoft al cual se le han modificado fragmentos de código y añadido comentarios adicionales. Cuando lo leí por primera vez, con conocimientos básicos de Docker y Kubernetes, pude completarlo y desplegar la aplicación en Azure Kubernetes Service (AKS) pero eché en falta explicaciones más extensas sobré qué era cada componente, cómo se configuraba o cómo interactuaba con el entorno. El artículo original no se extiende en ese aspecto y a mi entender da por hecho un conocimiento medio de Docker y Kubernetes. Tal vez, la configuración de los ficheros YAML fue la parte que más lagunas me ocasionaba en aquel momento ya que no hay ninguna explicación al respecto más alla de su uso en los despliegues. El objetivo del artículo es proporcionar explicaciones más detalladas de dicha configuración y de los componentes implicados (images, containers, ficheros YAML, services, networks, etc.)
- La aplicación consiste en un frontal web creado con Python sobre un servidor web Ngynx que irá incluida en un primer contenedor de Docker y un backend soportado por una Redis Cache para almacenar datos de forma temporal que irá en un segundo contenedor Docker. La creación de los contenedores y los servicios que permiten su ejecución y comunicación en nuestra máquina de desarrollo se realizará mediante docker-compose.
- Una vez verificado el correcto funcionamiento en desarrollo, se copiaran las imagénes necesarias a un Azure Container Registry propio (artículo 2 de 3) y posteriormente se desplegarán los contenedores en un cluster de Azure Kubernetes Service (artículo 3 de 3).
4. Comandos Básicos
Estos son algunos de los comandos básicos que se usaran en este artículo al usar los diferentes componentes:
Docker
docker images
: permite listar todas las imagenes existentes.
docker ps -a
: permite listar todos (-a
) los contenedores existentes.
docker exec -it <container_name> <command_name>
: permite ejecutar (exec
) comandos (<command_name>
), de forma interactiva (-i
) con pseudoterminal (-t
) dentro de un contenedor (<container_name>
). Lo usaremos para ejecutar comandos shell (sh
) sobre los contenedores Linux.
docker exec <container_id> env
: permite mostrar todas las variables de entorno asociadas al contenedor <container_id>
. Las variables de entorno son usadas para inyectar datos en los contenedores como entrada de variables internas.
docker exec <container_id> env | find "<env_var_name>"
: filtra la variable de entorno <env_var_name>
sobre la lista asociada al contenedor <container_id>
.
docker network ls -f <filter_condition>
: permite listar las redes existentes y filtrar según <filter_condition>
.
docker network inspect <network_name>
: permite obtener detalles de la red <network_name>
.
Docker-Compose
docker-compose up -d
: construye, re-crea e inicia contenedores y servicios (up
) en segundo plano (-d
). Si no se especifica, como en este caso, lee la configuración de un fichero con nombre y ruta por defecto ./docker-compose.yml
.
Redis Cache
docker exec -it <container_name> sh
: permite abrir un shell (sh
) de Linux sobre el contenedor (container_name
) donde se encuentra incluida la Redis Cache. Es el primer paso antes de acceder a redis-cli
.
redis-cli:
command line interface para Redis. Permite ejecutar comandos en Redis y leer las respuestas desde el servidor, todo ello desde un shell o terminal.
keys *:
devuelve la lista de claves incluida en la Redis Cache.
get "key_name":
devuelve el valor asociado a la clave key_name
en la Redis Cache
Redis Command Reference
Otros Comandos
curl <url>
: permite ejecutar conexiones usando diferentes protocolos (HTTP, HTTPs, FTP, etc.) en una red. Lo ejecutaremos sobre un shell para verificar la conexión entre contenedores y servicios disponibles.
5. Configuración, Despliegue y Verificación en local
Una vez descargado el código fuente desde el Tutorial AKS original de Microsoft he modificado la configuración de la aplicación (fichero config_file.cfg), el fichero python main.py y los ficheros de estilos (default.css) para añadir nuevos botones, personalizar los textos asociados a los elementos del interfaz de usuario y los estilos de los componentes visuales. Es una tarea muy sencilla ya que la programación de la aplicación es muy simple y fácil de entender. No requiere de comentarios adicionales e incluso puedes utilizar la aplicación exactamente con el código original.
5.1 Descripción General de la Aplicación
Sin más, si ejecutamos directamente el comando docker-compose up -d
desde la carpeta donde se encuentra el fichero docker-compose.yml
y abrimos el browser con la url http://localhost:8080
podemos acceder a la aplicación:
![](data:image/png;base64,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)
Haciendo uso del frontend, cada vez que pulsamos en un botón se incrementa su contador asociado o bien se resetean todos ellos en caso de usar la opción Reset. Los valores de los contadores se almacenan en el backend de la Redis Cache.
Si ejecutamos el comando docker ps -a
podemos ver nuestros contenedores junto con la información asociada a cada uno de ellos (Ids, imágenes, estado, etc.). Los nombres de los contenedores, como puede verse en la imagen posterior, son en mi caso jm-inn-azure-vote-front-container
y jm-inn-azure-vote-back-container
. Como se verá posteriormente, entre las modificaciones realizadas en el fichero docker-compose.yml
, está la de asignar sufijos a los nombres de cada componente para saber a qué tipo concreto (imagen, contenedor, servicio, etc.) nos estamos refiriendo en cada momento tan solo viendo el nombre del componente. Asignar nombres idénticos a componentes de distinto tipo es perfectamente válido pero en caso de empezar a aprender una nueva tecnología, a mi parecer, causa confusión.
![](data:image/png;base64,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)
En resumen, el comando docker-compose up -d
a través del fichero de configuración docker-compose.yml
ha generado todos los componentes incluidos en el frontend y el backend, tanto imágenes (jm-inn-azure-vote-front-image
, redis
), contenedores (jm-inn-azure-vote-front-container
, jm-inn-azure-vote-back-container
), configuración de puertos (ports
), redes (network jm-inn-aks-azure-voting-app-redis_default
) y...servicios, que no se nombran en ningún momento en el artículo original y que son imprescindibles para entender como el contenedor que incluye el frontend puede comunicarse con el contenedor del backend.
5.2 Configuración General de la Aplicación
Entre los aspectos a destacar de la configuración de la aplicación a nivel de código interno para entender la comunicación entre el frontend y el backend está la configuración del cliente de Redis en el fichero python main.py. Unicamente voy a mostrar y comentar las líneas de código relacionadas con este punto:
...
redis_server = os.environ['REDIS']
...
try:
...
r = redis.Redis(redis_server)
r.ping()
except redis.ConnectionError:
exit('Failed to connect to Redis')
- El nombre de host o hostname donde se encuentra instalado el servidor de la Redis Cache es inyectado en la aplicación por medio de la variable de entorno con nombre
REDIS
. Por tanto, una vez llevada la aplicación a un escenario de contenedores, dicha variable de entorno deberá ser creada en el contenedor del frontend y su valor ser una referencia al servidor Redis Cache incluido en el contenedor del backend. Como adelanto, esta referencia es el nombre del servicio que expone el contenedor de backend al resto de contenedores en la red creada por defecto por Docker Compose.
- Conocida la referencia al nombre de servidor de la Redis Cache, se utilizan las librerías de cliente de Redis para python para crear la conexión y gestionar su contenido.
El otro aspecto a comentar es la configuración del fichero Dockerfile para construir la imagen del frontend :
# Imagen base con uWSGI y Nginx para Flask en Python que se ejecuta en un único contenedor.
FROM tiangolo/uwsgi-nginx-flask:python3.6
# PIP es un gestor de instalación de paquetes o módulos en Python
# Instala el cliente de Redis para Python
RUN pip install redis
# Añade el contenido de la carpeta "/azure-vote" del host al directorio "/app" del contenedor
ADD /azure-vote /app
Respecto al
backend servirá una imagen base de
Redis Cache descargada directamente de
Docker Hub por lo que no es necesario ningún fichero
dockerfile adicional.
El resto de código es realmente sencillo y no requiere de explicaciones adicionales.
5.3 Configuración de Servicios y Contenedores
Toda la configuración de servicios y contenedores se realiza en el fichero docker-compose.yml
, por lo que su (casi) completo entendimiento es crucial para comprender todos los componentes y configuraciones que se generan a partir de él. Este es mi fichero modificado con los comentarios oportunos:
version: '3'
# Se crea una red interna para hospedar los servicios configurados.
services:
# Servicio jm-inn-azure-vote-back-service. Se le asigna IP privada y host name.
jm-inn-azure-vote-back-service:
# Descarga la imagen https://hub.docker.com/r/_/redis con la última versión
image: redis
# Establece el nombre del contenedor que incluye el backend
container_name: jm-inn-azure-vote-back-container
# Las peticiones recibidas por la máquina host en el puerto 6379 (6379:)
# son redirigidas al contenedor sobre el puerto 6379 (:6379)
# Redis Cache escucha en el puerto 6379
ports:
- "6379:6379"
# Servicio jm-inn-azure-vote-front-service. Se le asigna IP privada y host name.
jm-inn-azure-vote-front-service:
# Carpeta con el código para construir la imagen del frontend
build: ./azure-vote
# Establece nombre asignado a la nueva imagen
image: jm-inn-azure-vote-front-image
# Establece nombre del contenedor que incluye el frontend
container_name: jm-inn-azure-vote-front-container
# Establece variables de entorno asociadas al contenedor frontend
environment:
# Establece la variable de entorno REDIS
# Asigna como valor el nombre del servicio que expone el contenedor backend
# El nombre del servicio coincide con el hostname asignado en la red interna creada por defecto
REDIS: jm-inn-azure-vote-back-service
# Las peticiones recibidas por la máquina host en el puerto 8080
# son redirigidas al contenedor sobre el puerto 80
# El servidor web escucha en el puerto 80
ports:
- "8080:80"
Como aspecto a destacar docker-compose
crea una red virtual interna donde hospeda los servicios que exponen los contenedores. A cada servicio se le asigna una dirección IP privada y un nombre de host que coincide con el nombre del servicio. Esta infraestructura hace posible la comunicación entre contenedores. Por ejemplo, el primer mensaje de log al ejecutar docker-compose up -d
es Creating network "jm-inn-aks-azure-voting-app-redis_default" with the default driver
. Ahora vamos a ver cómo podemos extraer más información al respecto:
- Con
docker network ls
podemos obtener la lista de redes. Si lo ejecutamos veremos una red con nombre igual al de nuestro proyecto más el sufijo "_default
", en mi caso, jm-inn-aks-azure-voting-app-redis_default
.
- Conocido el nombre de red, ejecutamos
docker network inspect <network_name>
. Obtenemos una salida similar a la mostrada a continuación. En mi caso, se crea una subred con rango de direcciones 172.18.0.0/16
y asigna a los contenedores endpoints con las direcciones IP 172.18.0.3/16
(backend) y 172.18.0.2/16
(frontend):
[
{
"Name": "jm-inn-aks-azure-voting-app-redis_default",
"Id": "6f2359df901d39691ed2c35a7d7ae02d95f45b5701b8711fbbca32695db81440",
"Created": "2020-09-07T09:56:08.85861365Z",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.18.0.0/16",
"Gateway": "172.18.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"3dacd55d97dadb6e61524cf3bcc393f332c78a951876e01c4f092f48eb147dcb": {
"Name": "jm-inn-azure-vote-back-container",
"EndpointID": "df580037f34932b83163c1efd11556361679ff37be901f5face1792402dbb1bb",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
},
"5db8bfab8adec7fd1f702866d6a9a62d83749e2cc3eb8b518921271f32c931fb": {
"Name": "jm-inn-azure-vote-front-container",
"EndpointID": "12720995757e5ba51d2109c66d09a857bbc5f541c8cacd87700ea93caa345618",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "default",
"com.docker.compose.project": "jm-inn-aks-azure-voting-app-redis",
"com.docker.compose.version": "1.26.2"
}
}
]
- Si ejecutamos
docker exec -it <frontend_container_name> sh
para acceder al contenedor que incluye nuestro frontend y a continuación hacemos desde dicho contenedor un ping 172.18.0.2
o ping jm-inn-azure-vote-back-service
para verificar si podemos comunicarnos con el contenedor de backend obtenemos una respuesta positiva:
![](data:image/png;base64,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)
![](data:image/png;base64,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)
- También podemos ejecutar desde el contenedor de frontend
curl jm-inn-azure-vote-front-service:80
o curl 172.18.0.3:80
y comprobaremos qué el contenido de la página html es devuelta correctamente verificando el correcto acceso al servicio de frontend.
- Evidentemente si tratas de ejecutar los comandos
ping
o curl
anteriores fuera del scope de los contenedores no funcionarán ya que las direcciones IP y hostnames utilizados sólo tienen sentido en el interior de la red de contenedores. Para acceder desde la máquina host puedes usar curl 127:0:0:1:8080
:
![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlQAAABWCAYAAAAJzwgLAAAWoklEQVR4Ae2dS67rNhKG7568kN6I95GJ95G5gZ7cnmTSCDIJkDMOMu3B6V6DGnwUWVV8yNa1dWzlu8CFKZGsx0eK+k352N8W/kEAAhCAAAQgAAEI/BCBbz/Um84QgAAEIAABCEAAAstLC6qPy2k5Xz9ffphui/NzuZ5Py+l8XV4xo9ty+PqhuC3OfVh/TSwfy+X01fMo8X2Ha/PrZ+w9EbzC2N4T7/5t22vuvZn9949/LP/8/i39/+3X/YHi8aEEnKDKkzMs2PL/8qEctvWmWrVsih+XavN0Xm7SSZ/X5dwTINHWZdGRLflc43ePE6M4je99bvLG5T0Hwxxy3DIfwuvNg35PADe2Hcap+9/BOtjTuUn5fF2WWV1w9+hYdArD8ivcQBBUw+FZqWgFge7wCmOr43m9csvvGMyisLpbUA1yd+tWWa7d+XKPD2vd6j93HyhG1zpu7RfsDvKbusx9ZB0/aZ0wi2VrPxtMV1BVVjmAeCKVt7wr/byel5MRUZ/L9XL7INZ4cvCvJqiWxKaJ07J+8aNRDv58mnhb5sFjAPh4HmNVWwmL9kg02rrnx6Ljep1yyvvr5sDrkLg3klYQ3Gvh793+IfzC/ePFFuu7BVW+B17DvdVsOoRrU21YxHbq2E0fu565SnVo291+D9jaTzZI2vxUUE2xXY+1f10WsZbWsK39mgD8I78Eysy1PHDp3fp4YFrTcqZjU6rKa2rTneTBv5kwQbiG3S6tPOu5ZDIBKgrctHV1KtkAPABOAjDt0tVq18/YzP59nFlo1Tj8oxpnU/qH/C7X9IgwCNGPvIsS30mkPjWusFFyLgvEPIfMWdS7+JNx6LFuxGLyX2+mLocSWDgf5ov2qcdMn1/h8qOspzwleXkNcY3meaduwqw77nfFIjGlVz0v7bUyYz2rs/bbIze2Zb6k83UOyFhesgnXz49f66jfz/kzPE+nJU215KtMu7hxeOv14OLURkYxhvHz+eRzqYuwyLv8OQczdnL9hdfs09SbOEKMd1xH0fZ5FL0673I3rEf+1mJR5l1xvi65WJr81ROTU/0YyJhZcO5smjHLdSVnF+zs8K+f6iO679+Wf/3xn2VZ/rP8/su35d9/1Y5aIP35W2qnH+/ptqGXbl+tjEofy0XPq2keaT4apMVsZz0rdaoQd7bsmhjZr+1sbe0XdqZW88vXmUmszSfGGdpMY9naTzHKxZUdKi1UZIJasK1Jd6a3ALkmohZlcbHVbbJrgqpAtIbikVWpKSe5McQ6v8jlSTOzmdx04nT+ZRLKZ6g+rxf16FPFEpmlG0aKKQiRZF8WCj2PdGzjHJT9GFceT20o+7CPY1O70ixvG8vxmGe2r8RJbTuPRefjEObDO1lPeVoPM9/9uufFYiOrR20cnrXmO6urNnul4fzMN6t03YT8600u2Gnj61lvz439ubZhPGUCNoLf+h9fD+F9WRU0cl3JWuA8qsOUb3Fv8tXcQ5fMXjUOPmc+Wnbz8TM5uGtTBd0Ux6y9P81pVte4MCe2joPJL96OWn4tMzsHTCDqIMWk3+Spyl4xiql/LL//z1euC6r4Oan8SC+Kp19+NkbuE1S1a8x9o6DqcauWVSlcb9pHXk/DG4vpv639lNFxfuk6rOtA6mTGVF8PK7Fs7adCjcUVQTVYLPM7rNnCUBxF+HdM2tKxFpqB79nM50Kv2N68IxFbIR8XSwYdWkSoeuLEAUmTZmxTbK9fxOPJkWyUPHNMQXiFmOqNK7zzTIuaWqPNDWyYQ4+Zyk+yKDHICbkp5DG3j25nPNs4oxAOAnUlloeznvIsiQba9+1O5a4tM20zzwuZVzfHYm3oo9Zfy7q2mdVpq+tlb/N8vTZiKliJ7fx1tm6+aVH96So/5+b5Da+HONbjtUB79GUbV/Cf32SuzOtgp17P3mo6trbDuVl+gYXs1NW2N63Lzn312/or120nllrnDLrDTeOQ1yf9Wdkevxp7dRrP3TAHU7tbNgmSaEo7UtVPKt0gqH75efmvdPvfz8u/vv8kR/H1WYKq4V68zta60igVZM3KAiXt0Kb+rqU93NpPWYnjI2unOj8txusw7Gqqcb0llq39VDBdQaW31ocXp8DVd3ZluBRjkG7hKpU3FvyF1bOZz4nFOJG88JOYizio2/KhX+9iFXtSL2y6XHycurPcaPTk6MUTeIZccrsak0zgdsHTC0pt75wrm6Umx1uOQ6HJQftL5ZJ7L/7AdvBoUoSUzq/4drF0x6807sWpK7eJmNnFO6trmf1ALA3T9trR45086THKZ8pj4FmdcNSPVJS/JhbZ0Uk207WgFi2V9nD8Gpu3+KuGg1275MzzG14PTRx2LUhjOuOS4w525Jq+4RobxpNT3DK25V16zEmNR5PjLaxbnuW6HQkq2amY+Bvm3fRR4xDrVMyDNbpllmAGn9P1WtbksGbZSVUnXCn9uvz7u32sV6pufORX27elZwiqyGUgKmOdzNs2HHsm3lsDSzUWeWxsQ3e0tZ8yc1eceX7IvTPN27whsRJLnCvCI7eN97mVfirUWOwKqtW5la1Ist6oOc4XzK02TV91YC7IzoUmN2nVJRfTu7gIp9dPdTA+1Pm2qGy6ypkN4ZUe+bU2Yn0AFQbxGYJKXxAh7jhZ2m1bm4NbYHOf+K5xytP1E3+jHapBLPI4uIg4xdvGqSpkodQXyJCn9Evj0Z+ns7rU/7GxSEz91zJPSnXLuraZ1RUDncJkfuYbaxiT6MfPK2OttWOqy0HbruaQG4U50gzQPL/huEznbglqUKg+Q4xlbuprQ3q6eT2MJ7dvcu6IGN0m2BPREF5LLOK/+zpjXXMrXUMOszdJsa607haGec/GoVPXs6N5dJ3H3ciWTWKnREK/cz7b7kLV5m2dFkjyGaravi3p9m3t+EzMXdY51Sye1zs0qk7W1OZSMm3UQRwHJdRDVZkTqp0vbu2n7IzyU01qceQvCP5RXZi7o7q1ftVzKf2AoEoXXrvAFdul0E5c/1d+6QKf2soDqMVInRAplv5iouvmMfcu1pKEKWibpqJMNPmclK61kyPlXHKIg5rfKalca0yhfX3kV3INbdU7rNpeew5lv4jemkNqV+JUN1N5HNEfN99P+9flENskllmd4uSzNaxVu8pHeKaepr0zNqsrTZWPci4XTH/VbhSL7++Po706IIWfPlXb+HHIu3e6sXcQj9MYlWZ6froxCXnIG4DW1GxsdeuZv6iQl3NXuDn7ge9N10Pq15+7Oq5+OfA9Xz+W61nfkNfntZkLHdN13KRyMn5xTLR/6bP2OmPt/emcZnVzn3Wu+3azcbBxRjYd0dgy6/soa6bfyfDNB8dR9Hz/afmzqXePA+WD6/kzU3sLqsTJCSAVc6zviLDYRK5zU5/HqJxLx5pn2dEtbYK1rf1qsONY09ww12+OvaxZapynsWztV8MspdsFlSxUYbGS/zryYrJfiIuu9GuUcwdOYyYNTnEpAy82a0X+67hRnHmQpZ+6QFcvetXHDKSJ1cWp6vzkSBNf4rws8U9EQx5rN12d+/m6fJTHO6Fr+06shpA5Sx6FWW2RSjoHXc7t4lyQvyQa8RydF1+jWNp+P8z6Rp5dHJ2LTTKwrx1OuYEZ97VYrFF11OESxjEG3fqOPlfrlPlOcTg/naAqi5US/GWNKDF2HLhTa/6MTW138/XQMjU3CRefPRytWaN5Lb2dTzVG/fxmY5uud9/vlhzuYV3tudjV2inZjV7n69LEblxr8hp5+Yg7oimetk/kMOIZz+fogk19PAq6cz6JqvxFnOWv/JZliZ+Lyud/+Xn5M3xh56qgSkKsfLHnzV/wOcg97hS6+Sdrvewirq1nci0ZYRRAWJ91TmRID+1nfZX5LTlEl4PrT8+XkLvJw9o1OWzt5+aIE1Su9tUOQ9IG6qsFmOMZxFlvci8atw5rkINuMi+nybtx3Zqb1rWDOL+E9SvFohlRPiaBeBNzO1TxnLzZ2ZL27Lqd1W3xRR8IHIvAewmqt2afFLVRxW+dz1rwX7n4vhLrV4plbcyofysCQcC7x6Bp56n9XOTtec2u21nd7R5oCYGjEkBQPXNkZRtUtl2fvl3zzGTutb3z4vtKrF8plnuHjfZvRcB+lCI8GnM7VndnM7tuZ3V3O6IDBA5HAEF1uCElIQhAAAIQgAAE9iaAoNqbOP4gAAEIQAACEDgcAQTV4YaUhCAAAQhAAAIQ2JsAgmpv4viDAAQgAAEIQOBwBBBUhxtSEoIABCAAAQhAYG8CCKq9ieMPAhCAAAQgAIHDEUBQHW5ISQgCEIAABCAAgb0JIKj2Jo4/CEAAAhCAAAQORwBBdbghJSEIQAACEIAABPYmgKDamzj+IAABCEAAAhA4HAEE1eGGlIQgAAEIQAACENibAIJqb+L4gwAEIAABCEDgcAQQVIcbUhKCAAQgAAEIQGBvAgiqvYnjDwIQgAAEIACBwxFAUB1uSEkIAhCAAAQgAIG9CSCo9iaOPwhAAAIQgAAEDkcAQXW4ISUhCEAAAhCAAAT2JoCg2ps4/iAAAQhAAAIQOBwBBNXhhpSEIAABCEAAAhDYmwCCam/i+IMABCAAAQhA4HAEEFSHG1ISggAEIAABCEBgbwIIqr2J4w8CEIAABCAAgcMRQFAdbkhJCAIQgAAEIACBvQkgqPYmjj8IQAACEIAABA5HAEF1uCElIQhAAAIQgAAE9iaAoNqbOP4gAAEIQAACEDgcAQTV4YaUhCAAAQhAAAIQ2JsAgmpv4viDAAQgAAEIQOBwBBBUhxtSEoIABCAAAQhAYG8CCKq9ieMPAhCAAAQgAIHDEUBQHW5ISQgCEIAABCAAgb0JIKj2Jo4/CEAAAhCAAAQORwBBdbghJSEIQAACEIAABPYmgKDamzj+IAABCEAAAhA4HAEE1eGGlIQgAAEIQAACENibAIJqb+L4gwAEIAABCEDgcAQQVIcbUhKCAAQgAAEIQGBvAgiqvYnjDwIQgAAEIACBwxH42wuqj8tpOV8/DzewJAQBCEAAAhCAwH4EOoLqY7mcTstJ/b981IC2CpCt/arnTunjouI8L1t00VPi6oR62FOf1+U8mCvL8rlcz2ou6Yk0rTssLRKDAAQgAIGDEnCCKt0AZzs2WwXI1n4j7p/X83I6aRH1uVwv11Hz4flHxzV0dMiKMF/UGESBW48D21MRUUmoy9ya1R0SFUlBAAIQgMChCVhBFXcb6g1RZ54EjNptkF2JcsN0uxHn6xIepM37pT7FhLQvJ5zN02VJm2Xp5lya6UBj2e2y5VhSM29TP/JzdWMHjcdjnMjcNuetxqUzl+JcOF/DpFjORgzneRLq+AcBCEAAAhB4QwJWUJXHMH1RFfIb7eh8Xi/qkVsSJrIbMe6X2un7d7zp5hO6bNjGnRARV6YmSLL4mKn6ziIp27Q7IzYfW+fteD9HPH6goApjpIVseTx7CdDHdUfESk4QgAAEIHB4Ak5QpXz1rlIVJqluJKg8KS+G+v1uEFRlV0p5mAmqXl3cEbnknRErxGpcQUzYOrnxK88UJwSiIBURJaIpsg87m4FtYHyugqpXN7FPFQQgAAEIQOBVCXQFVQlWbnhqC6kKkNIqFaStPAoMr6v95oIqGI436WyziLueaJJw5EYux+E1xrYiqHrxB788htIkh+UkwpUgjWMkQip3k3GY1Q09UAEBCEAAAhB4XQJzQSWfaVKioi+o0qOiInik3wMEVUWnfGTxo8yrZuEv/9SNPdRkASbCSv3RYn2EmW/2uq4apTQjkMSUe0wcebpzWez2PkPFbuCMMHUQgAAEIPDqBFYElf38UUgm3jzlsU7JLomdInCy4NE7VP1+7nNKsnNRDBUHwbP5bFTaudLCSf7KTwmv2F33s3EmISAfSm9z1d7/HuXER4/bWt5dMaW4189R6XHIrMs80nVrHqmHAAQgAAEIvB4BK6hE0Awe26Xw881Q2mTxI+IkfX/VZbmGrzUwwqjfL+1W5L8ePF+Xj9LPtQ/+jD37ONB+hUIWBi7GGL/O8fIRBWLdWWt91rrXG7zHR3SvoHKchXfZ0bQ8LctZ3eMzwyIEIAABCEDgmQSsoHqmJ2xDAAIQgAAEIACBgxJAUB10YEkLAhCAAAQgAIH9CCCo9mONJwhAAAIQgAAEDkoAQXXQgSUtCEAAAhCAAAT2I4Cg2o81niAAAQhAAAIQOCgBBNVBB5a0IAABCEAAAhDYjwCCaj/WeIIABCAAAQhA4KAEEFQPG9j8nUzlyyofYfgZNh8RFzYgAAEIQAACENAEOoKq/bJG/X2a/Z+e0Sb75a39utb0l3PmL5O0XxrZ7fXkk9vEz5zLNptPTtSZt1/QWb8ZPcVe505uV77005nhEAIQgAAEIPDGBJygSje9mTiZC4Axia39uhajoFI/O5N/6mYWd9fOC5x8KJfd8/HzJYumqKKsoOr/9NDuAeMQAhCAAAQg8BQCVlD1ftA2u7U/LZN/Ksb8HEy+maqfH/mU3/6Tc/o13nRTn7qLkX8rsJxwNuVHj72gCjHmcylc16/YC7WuTmzmPJOdmp+INBE+moOY1efsz+MEX+EHgvNOU8w/CUHTp+GSOch5cSQxLtreaam7QmN/peu0kO02/gadAnP/iDPOoUsYkOVyOi3RVD7HD08POHIaAhCAAATenoAVVEVsBBHQz02Eha/9vF5UnyRaRIyEtv1+qZ2+f0ehkU/osvHXE1RZDIqvKmxsLEObqeNifxOweg3xx98p1LG5x1et7eRb24x2VMJ9LtXvyGZlm31Em96fzb1aHZXuE1RtbMFusiGvl48Qw3g+jSLhPAQgAAEIQOCdCDhBlUKPN8q8O1Jv3KluTQBI8v5m2++XbvhKX8QfKxYxlOJQj/bEeE9QxRv5Od/QXZ+8kxK6D21mMenzrS71TlA0tJxPYSem/vM5y26Yzi/ugCkh1ucysdnLvewKzXlWq48p9WNPMYigCiJ0xPQxUWAFAhCAAAQg8PUEuoKqhBVv1KdFBE4437+JisCoj8r0bs6437oACP6iLX1jHoqKc1BMy1kelelXJ2Iam/oRVQFQC8O8axMjBtPpNj/7aHLCM9ttRFoWh2YD8YsEVRNbjDnsUImwDY/80vFox1PhowgBCEAAAhB4WwJzQSU7Ok6MtDsO6TGPPu9vtn1B0goO36+SVT46gir2CztGWVzc9nkdZTPvUJndpOp8LCRVmzb2Nr+n7FBlHr0dsTYmFfCPFqfiLrGNPDvj9aOu6Q8BCEAAAhB4JQIrgioJAr1DFW/Q/oPIfndHdomUOun3S/aLEIs3XrsjVmGptv4Gnfsld23M1YYvKZsiHv2H1HOXviC09lrxkuxXDFrApb59LtVua9Pb0Dl4f/kRZw2gGu6Wkm093t1m5eQsllQnrtfyLCYpQAACEIAABN6QgBVUImj0ozK5I5bk0k1bHpnJzTfeMEu/y3K9ns2jQtk98f3MI7rzdfko/ZyfYFtiaeL0H3pu+ybR1p4vNnN+No/6+Z+xoOrYLLG2dUU8Tnm2/SI3yT8L2IZlZ5etFWTFcadwr6AKJnKfPPY1Pyuo6vjbz511guAUBCAAAQhA4O0IWEH1duG/esBJGBUd9OrhEh8EIAABCEAAApsIIKg2Ybu1E4LqVlK0gwAEIAABCLwzAQTVU0cPQfVUvBiHAAQgAAEIvAgBBNWLDARhQAACEIAABCDwvgQQVO87dkQOAQhAAAIQgMCLEEBQvchAEAYEIAABCEAAAu9L4P/QVBuzqrqI6wAAAABJRU5ErkJggg==)
Llegados a este punto, quedaría explicada la infraestructura creada por docker para posibilitar la intercomunicación entre contenedores.
5.4 Verificación de Redis Cache
Ahora vamos a acceder al contenedor que incluye el backend mediante docker exec -it <backend_container_name> y
a continuación redis-cli
para acceder al interfaz de Redis Cache. Una vez en el CLI de Redis podemos usar los comandos keys *
o get "Key_Name"
para listar las claves o consultar el valor de una clave concreta "Key_Name"
. Verificamos que las claves y sus valores asociados son almacenados de forma correcta:
![](data:image/png;base64,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)
En siguientes artículos se mostrará como subir nuestras imágenes a Azure Container Registry (2/3) y desplegar la aplicación en Azure Kubernetes Service (3/3).
Referencias