viernes, 31 de diciembre de 2021

Docker-compose

Posted by q3it on viernes, diciembre 31, 2021 in
Es una herramienta que nos permite describir de forma declarativa la arquitectura de nuestra aplicación, utiliza composefile (docker-compose.yml).

permite definir y ejecutar entornos Docker de varios contenedores. Puede configurar los servicios de su aplicación en un archivo Compose y luego iniciar y detener todos los servicios desde este archivo de configuración.
YAML (YAML Ain't Markup Language), estándar de serialización de datos amigable para los humanos, para su formato de archivo de configuración.[1]

Crear el archivo docker-compose.yml
Dockerfile -> describer de manera imperativa (paso a paso) la arquitectura de nuestra aplicación
docker-compose.yml -> describir de forma declarativa la arquitectura de nuestra aplicación

version: "3"
services:
app:
image: nodeapp
environment:
MONGO_URL: "mongodb://db:27017/test"
depends_on:
- db
ports:
- "3000:3000"
db:
image: mongo

docker-compose up para crear el build de la imagen.
  • Docker compose es una herramienta que nos permite describir de forma declarativa la arquitectura de nuestra aplicación.
  • utiliza composefile (docker-compose.yml).
  • Un servicio puede tener más de un contenedor.
  • depends on: -db -> indica que el servicio depende de otro servicio llamado db, así que debe inicializar primero el servicio del cual depende.
  • docker-compose up -> corre todo con un solo comando (red virtual, contenedores, etc).

Trabajando con docker-compose
Detener contenedores en docker-compose
docker-compose down
Para los contenedores y los borra incluyendo el network

Entrar a un contenedor montado con docker-compose
docker-compose exec <nombre del contenedor> bash
Ej: docker-compose exec app bash

Ver logs de los contenedores montados con docker-compose
docker-compose logs
Para filtrar:
docker-compose logs <keyword>
Ej: docker-compose logs app

Ver el status de docker-compose
docker-compose ps

Ejecutar contenedores en segundo plano docker-compose
docker-compose up -d
No muestra el output
-d = —detach Corre en segundo plano

Escalar contenedores
para escalar contenedores y hallan más estos para atender las solicitudes, se puede usar el comando: docker-compose scale [nombre_contenedor]=[cantidad_contenedores]
docker-compose scale app=4

al momento de ejecutar esto, si no está preparado el archivo de docker-compose.yaml nos dará error porque ya se están usando los puertos de la maquina local, al intenta asignar el mismo que ya está en uso:
version: "3"
services:
app:
build:
environment:
MONGO_URL: "mongodb://db:27017/test"
depends_on:
- db
ports:
- "3000-3010:3000"
volumes:
- .:/usr/src
- /usr/src/node_modules
db:
image: mongo


agregando un rango de puertos a usar de la maquina local en: ports:
- "3000-3010:3000"

Esto se resuelve usando un contenedor para el balanceo, por ejemplo haproxy.

version: "3"
services:
app:
build:
environment:
MONGO_URL: "mongodb://db:27017/test"
depends_on:
- db
db:
image: mongo
lb:
image: dockercloud/haproxy
links:
- app
ports:
- '80:80'
volumes:
- /var/run/docker.sock:/var/run/docker.sock


Ref: [1] https://runnable.com/docker/introduction-to-docker-compose