El fichero compose.yaml
En el fichero compose.yaml
vamos a definir un escenario multicontenedor usando el formato YAML. La instrucción docker compose
se debe ejecutar en el directorio donde se encuentra ese fichero. Por lo tanto tenderemos un directorio con un fichero compose.yaml
para cada una de las aplicaciones que queremos desplegar.
Puedes encontrar los ficheros necesarios para este ejemplo en el Repositorio con el código de los ejemplos.
Veamos un fichero de ejemplo compose.yaml
donde se define el escenario para desplegar la aplicación Let’s Chat que es un chat escrito en NodeJS, que guarda su información en una base de datos MongoDB:
version: '3.1'
name: 'escenario_letschat'
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:
Estructura del fichero compose.yaml
- El parámetro
version
indica el formato de fichero Docker Compose que se está utilizando. Se usa sólo a nivel informativo, no es necesario indicarlo. - Podemos indicar un nombra al escenario con el parámetro
name
. Si no se indica el nombre del proyecto será el nombre del directorio donde se encuentra el ficherocompose.yaml
. - Es escenario está formado por
services
. Cada uno ello representa un contenedor. - Podemos declarar volúmenes con el parámetros
volumes
y declarar redes con el parámetronetwork
.
Definición de los servicios
Como hemos comentado con el parámetro services
se define la lista de contenedores y su configuración que formarán parte del escenario. Veamos algunos aspectos de la configuración de un servicio:
- Cada servicio tiene un nombre, en nuestro ejemplo se llaman
app
ydb
. - En la definición del contenedor indicamos un nombre (parámetro
container_name
), la imagen (con el parámetroimage
), las variables de entorno (parámetroenvironment
), el mapeo de puertos (parámetroports
), los volúmenes (parámetrovolume
),… Iremos estudiando los distintos parámetros cuando veamos más ejemplos. restart: always
: Indicamos la política de reinicio del contenedor si por cualquier circunstancia se para. Más información.depend on
: Indica la dependencia entre contenedores. No se va a iniciar un contenedor hasta que otro este funcionando. Más información.- Puedes encontrar todos los parámetros que podemos definir en la documentación oficial.
Introducción a las redes con Docker Compose
Cuando creamos un escenario con docker compose
se crea una nueva red bridge 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
).