Muchos dockers, poca diversión


*Disclaimer: Esto me funciona a mí, puede que a tí no.

TLDR: LOOPS EN BASH!!

Estructura

La estructura de las carpetas, dónde se encuentran los dockers-compose.yaml es la siguiente:

DockerFolder/
|-> AplicaciónLegal_1/
    |-> docker-compose.yaml
    |-> config folders and files
|-> AplicaciónLegal_2/
    |-> docker-compose.yaml
    |-> config folders and files
.env

La carpeta DockerFolder solo contiene otras carpetas y un archivo .env. Las carpetas interiores contienen el docker-compose.yaml y otras carpetas de configuración para la cada aplicación. El arhcivo .env contiene variables necesarias para ejecutar los docker-compose. Por ejemplo:

SECURE_PASSWORD=123456
MOVIES_DIR=/srv/dev-externalfiles/Movies

En los archivos docker-compose nos podemos referir a estas variables de la siguiente manera:

    volumes:
      - ./config:/config
      - ${MOVIES_DIR}:/movies

Magia

Si queremos parar todos los dockers nos situamos dentro de la carpeta DockerFolder/ y ejecutamos;

for dir in */; do docker-compose --env-file .env -f "$dir"/docker-compose.yaml down; done

Si queremos iniciar todos los dockers nos situamos dentro de la carpeta DockerFolder/ y ejecutamos;

for dir in */; do docker-compose --env-file .env -f "$dir"/docker-compose.yaml up -d; done

También podríamos incluir up -d --force-recreate si fuera necesario.

Tmux; un pasito más

En mi caso los dockers están en un servidor al cual me conecto por ssh. Cuando hay muchos dockers estas operaciones pueden tardar un poco, por eso utilizo Tmux.

Una vez tenemos instalado Tmux, abrimos la terminal y ejecutamos Tmux. Des de Tmux accedemos al servidor por ssh y ejecutamos el comando que queramos. Mientras se ejecuta, presionamos Ctrl+b d. Esto deja la sesión en un segundo plano (deattach). En este punto ya podemos cerrar la terminal y esperar tranquilamente a que pase el tiempo.

Cuando queramos comprobar el estado del comando, abrimos la terminal y ejecutamos tmux attach, esto nos llevarà a la sesión anterior y podremos ver si ha finalizado.

Esto se puede aplicar a muchas otras tareas, copias de seguridad, aplicaciones..