Ejemplo 1: 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 por el puerto 5000/tcp. Utilizaremos la imagen
iesgn/guestbook. - 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.
Volúmenes
Si estudiamos la documentación de la imagen redis en Docker Hub, para que la información de la base de datos se guarde en un directorio /data del contenedor hay que ejecutar el proceso redis-server con los argumentos --appendonly yes.
Redes
La aplicación guestbook por defecto utiliza el nombre redis para conectarse a la base de datos, por lo tanto debemos nombrar al contenedor redis con ese nombre para que tengamos una resolución de nombres adecuada.
Los dos contenedores tienen que estar en la misma red y deben tener acceso por nombres (resolución DNS) ya que de principio no sabemos que ip va a coger cada contenedor. Por lo tanto vamos a crear los contenedores en la misma red:
Para ejecutar los contenedores:
$ docker run -d --name redis --network red_guestbook -v /opt/redis:/data redis redis-server --appendonly yes
$ docker run -d -p 80:5000 --name guestbook --network red_guestbook iesgn/guestbook
Algunas observaciones:
- No es necesario mapear el puerto de
redis, ya que no vamos a acceder desde el exterior. Sin embargo la aplicaciónguestbookva a poder acceder a la base de datos porque están conectado a la misma red. - Al nombrar al contenedor de la base de datos con
redisse crea una entrada en el DNS que resuelve ese nombre con la ip del contenedor. Como hemos indicado, por defecto, la aplicación guestbook usa ese nombre para acceder. - Si eliminamos el contenedor de
redisy lo volvemos a crear podemos comprobar la persistencia de la información.

Configuración de la aplicación guestbook¶
Como hemos indicado anteriormente, en la creación de la imagen iesgn/guestbook se ha creado una variable de entorno (llamada REDIS_SERVER) donde se configura el nombre del servidor de base de datos redis al que se accede, por defecto el valor de esta variable es redis. Por lo tanto, es necesario que el contenedor de la base de datos tenga el nombre redis para que el contenedor de guestbook pueda conectar a la base de datos.
Si creamos un contenedor redis con otro nombre, por ejemplo:
$ docker run -d --name contenedor_redis --network red_guestbook -v /opt/redis:/data redis redis-server --appendonly yes
Tendremos que configurar la aplicación guestbook parea que acceda a la base de datos redis usando como nombre contenedor_redis, por lo tanto en la creación tendremos que definir la variable de entorno REDIS_SERVER, para ello ejecutamos:
$ docker run -d -p 80:5000 --name guestbook -e REDIS_SERVER=contenedor_redis --network red_guestbook iesgn/guestbook