Clase 9: Creando escenarios multicontenedor con Docker Compose
Docker Compose nos permite crear escenarios Docker de forma declarativa. Nos permite:
- Poner en funcionamiento todos los contenedores que necesita mi aplicación de una sola vez y debidamente configurados.
- Garantizar que los contenedores se arrancan en el orden adecuado. Por ejemplo: mi aplicación no podrá funcionar debidamente hasta que no esté el servidor de bases de datos funcionando en marcha.
- Asegurarnos de que hay comunicación entre los contenedores que pertenecen a la aplicación.
El fichero docker-compose.yaml
En el fichero docker-compose.yaml vamos a definir el escenario. Por ejemplo el siguiente implanta una aplicación de chat, llamada LetsChat que utiliza una base de datos mongo:
services:
app:
container_name: letschat
image: sdelements/lets-chat
restart: always
environment:
LCB_DATABASE_URI: mongodb://mongo/letschat
ports:
- 80:8080
depends_on:
- db
db:
container_name: mongo
image: mongo:4
restart: always
volumes:
- mongo:/data/db
volumes:
mongo:
Algunos parámetros interesantes:
- Es escenario está formado por
services. Cada uno ello va a crear un contenedor. restart: always: Indicamos la política de reinicio del contenedor si por cualquier condición se para.depend on: Indica la dependencia entre contenedores. No se va a iniciar un contenedor hasta que otro este funcionando.
Cuando creamos un escenario con Docker Compose se crea una nueva red definida por el usuario donde se conectan los contenedores, por lo tanto, obtenemos resolución por dns que resuelve tanto el nombre del contenedor (por ejemplo, mongo) como el nombre del servicio (por ejemplo, db).
El comando docker compose
Debemos usar este comando en el directorio donde tenemos el fichero docker-compose.yaml.
Los subcomandos más usados son:
docker compose ps: Lista los contenedores de este escenario.docker compose up -d: Crear en modo detach los contenedores (servicios) que están descritos en eldocker-compose.yaml.docker compose stop: Detiene los contenedores que previamente se han lanzado condocker compose up.docker compose rm: Borra los contenedores parados del escenario. Con las opción-felimina también los contenedores en ejecución.docker compose pause: Pausa los contenedores que previamente se han lanzado condocker compose up.docker compose unpause: Reanuda los contenedores que previamente se han pausado.docker compose restart: Reinicia los contenedores. Orden ideal para reiniciar servicios con nuevas configuraciones.docker compose down: Para los contenedores, los borra y también borra las redes que se han creado condocker compose up(en caso de haberse creado).docker compose down -v: Para los contenedores y borra contenedores, redes y volúmenes.docker compose logs: Muestra los logs de todos los servicios del escenario. Con el parámetro-fpodremos ir viendo los logs en “vivo”.docker compose logs servicio1: Muestra los logs del servicio llamadoservicio1que estaba descrito en eldocker-compose.yaml.docker compose exec servicio1 /bin/bash: Ejecuta una orden, en este caso/bin/bashen un contenedor llamadoservicio1que estaba descrito en eldocker-compose.yamldocker compose top: Muestra los procesos que están ejecutándose en cada uno de los contenedores de los servicios.
Ejercicio
- Despliega la aplicación LetsChat.
- Comprueba que es accesible y que funciona de forma correcta.
- Visualiza los logs de los contenedores.
- Para y elimina el escenario.