Despliegue de la aplicación Guestbook
En este ejemplo vamos a desplegar una aplicación web que requiere de dos servicios (servicio web y servicio de base de datos) para su ejecución. La aplicación se llama Guestbook y necesita los dos siguientes servicios:
- La aplicación Guestbook es una aplicación web desarrollada en Python que es servida en el puerto 5000/tcp. Utilizaremos la imagen
iesgn/guestbook
para crear el contenedor. - Esta aplicación guarda la información en una base de datos no relacional redis, que utiliza el puerto 6379/tcp para conectarnos. Usaremos la imagen
redis
para la creación del contenedor.
Podemos configurar el contenedor que sirve la aplicación Guestbook usando la variable de entorno REDIS_SERVER
para indicar el nombre del servidor de base al que conecta. Su valor por defectos es redis
, si nombramos el contenedor redis con ese nombre no hará falta indicar la variable de entorno.
Los dos contenedores tienen que estar conectados en la misma red bridge definida por el usuario y deben tener acceso por nombres (resolución DNS) ya que de principio no sabemos que dirección IP va a tomar cada contenedor. Por lo tanto vamos a crear los contenedores en la misma red:
$ podman network create red_guestbook
Para ejecutar los contenedores:
$ mkdir redis
$ podman run -d --name contenedor_redis --network red_guestbook -v ./redis:/data:Z docker.io/redis redis-server --appendonly yes
$ podman run -d -p 8080:5000 -e REDIS_SERVER=contenedor_redis --name guestbook --network red_guestbook docker.io/iesgn/guestbook
Algunas observaciones:
- No es necesario mapear el puerto del contenedor de la base de datos redis, ya que no vamos a acceder desde el exterior. Sin embargo la aplicación Guestbook va a poder acceder a la base de datos porque están conectado a la misma red.
- Al nombrar el contenedor de la base de datos con
contenedor-redis
se crea una entrada en el DNS que resuelve ese nombre con la dirección IP del contenedor. Como hemos indicado, con la variableREDIS_SERVER
indicamos a la aplicación Guestbook que use ese nombre para acceder. - Para conseguir la persistencia de datos en el contenedor de la base de datos redis, montamos un bind mount (también podríamos haber usado un volumen) en el directorio
/data
del contenedor, con la opción:Z
para configurar de manera adecuada SELinux. Además, ejecutamos el comandoredis-server --appendonly yes
para que se guarden los datos de la base de datos en ese directorio.
Podemos acceder a la aplicación para comprobar su funcionamiento, accediendo a la dirección IP del host y al puerto que hemos mapeado.