Clase 10: Ejemplos de escenarios multicontenedor
Ejemplo 1: Despliegue de la aplicación guestbook
En este ejemplo vamos a desplegar con Docker Compose la aplicación guestbook.
En el fichero docker-compose.yaml vamos a definir el escenario. El comando docker compose se debe ejecutar en el directorio donde este ese fichero.
services:
app:
container_name: guestbook
image: iesgn/guestbook
restart: always
environment:
REDIS_SERVER: redis
ports:
- 8080:5000
db:
container_name: redis
image: redis
restart: always
command: redis-server --appendonly yes
volumes:
- redis:/data
volumes:
redis:
Veamos algunas observaciones:
- Aunque ya sabemos que la variable de entorno
REDIS_SERVERtiene el valorredispor defecto, la hemos indicado indicando el nombre del contenedor redis. - Podríamos haber usado también el nombre del servicio, es decir,
REDIS_SERVER: db, ya que, como hemos comentado, la resolución se puede hacer usando el nombre del contenedor o el nombre del servicio. - Como vimos en el ejemplo del módulo 3, al crear el contenedor tenemos que ejecutar el comando
redis-server --appendonly yespara que redis guarde la información de la base de datos en el directorio/datos. Para indicar el comando que hay que ejecutar al crear el contenedor usamos el parámetrocommand. - Por último indicar que hemos uso un volumen docker llamado
redispara guardar la información de la base de datos (en el módulo3 usamos un bind mount). - Recuerda que para eliminar también el volumen usaremos
docker compose down -v.
Ejercicio
- Crea el escenario, pero ten en cuenta que el nombre del contenedor de redis debe ser
bd_redis. - Comprueba que esta funcionando de forma adecuada.
- Elimina el escenario y el volumen asociado.
Ejemplo 2: Despliegue de la aplicación Temperaturas
En este ejemplo vamos a desplegar con Docker Compose la aplicación Temperaturas.
En este caso el fichero docker-compose.yaml puede tener esta forma:
services:
frontend:
container_name: temperaturas-frontend
image: iesgn/temperaturas_frontend
restart: always
ports:
- 8081:3000
environment:
TEMP_SERVER: temperaturas-backend:5000
depends_on:
- backend
backend:
container_name: temperaturas-backend
image: iesgn/temperaturas_backend
restart: always
Como hicimos en el ejemplo anterior, aunque no es necesario porque es valor por defecto, declaramos la variable de entorno TEMP_SERVER: temperaturas-backend:5000. Como indicábamos también, podríamos uso del nombre del servicio, de esta manera quedaría como TEMP_SERVER: backend:5000.
Ejercicio
- Crea el escenario, pero ten en cuenta que el nombre del contenedor de
temperaturas_backendse debe llamarapi-temp. - Comprueba que esta funcionando de forma adecuada.
- Elimina el escenario y el volumen asociado.
Ejemplo 3: Despliegue de WordPress + Mariadb
En este ejemplo vamos a desplegar con Docker Compose la aplicación WordPress + MariaDB.
Utilizando volúmenes docker
Por ejemplo para la ejecución de wordpress persistente con volúmenes docker podríamos tener un fichero docker-compose.yaml con el siguiente contenido:
services:
wordpress:
container_name: servidor_wp
image: wordpress
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: user_wp
WORDPRESS_DB_PASSWORD: asdasd
WORDPRESS_DB_NAME: bd_wp
ports:
- 80:80
volumes:
- wordpress_data:/var/www/html/wp-content
db:
container_name: servidor_mysql
image: mariadb
restart: always
environment:
MYSQL_DATABASE: bd_wp
MYSQL_USER: user_wp
MYSQL_PASSWORD: asdasd
MYSQL_ROOT_PASSWORD: asdasd
volumes:
- mariadb_data:/var/lib/mysql
volumes:
wordpress_data:
mariadb_data:
Utilizando bind-mount
Por ejemplo para la ejecución de wordpress persistente con bind mount podríamos tener un fichero docker-compose.yaml con el siguiente contenido:
services:
wordpress:
container_name: servidor_wp
image: wordpress
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: user_wp
WORDPRESS_DB_PASSWORD: asdasd
WORDPRESS_DB_NAME: bd_wp
ports:
- 80:80
volumes:
- ./wordpress:/var/www/html/wp-content
db:
container_name: servidor_mysql
image: mariadb
restart: always
environment:
MYSQL_DATABASE: bd_wp
MYSQL_USER: user_wp
MYSQL_PASSWORD: asdasd
MYSQL_ROOT_PASSWORD: asdasd
volumes:
- ./mysql:/var/lib/mysql
Ejercicio
Vamos a desplegar la aplicación nextcloud con una base de datos (puedes elegir mariadb o PostgreSQL) utilizando la aplicación docker compose. Puedes coger cómo modelo el fichero docker-compose.yaml el que hemos estudiado para desplegar WordPress.
- Dentro de un directorio crea un fichero
docker-compose.yamlpara realizar el despliegue de nextcloud con una base de datos. Recuerda las variables de entorno y la persistencia de información. - Levanta el escenario con
docker compose. - Muestra los contenedores con
docker compose. - Accede a la aplicación y comprueba que funciona.
- Comprueba el almacenamiento que has definido y que se ha creado una nueva red de tipo bridge.
- Borra el escenario con
docker compose.