Como hemos visto hasta ahora, en muchas ocasiones necesitamos correr varios contenedores para que nuestra aplicación funcione. En cualquiera de estos casos es necesario tener varios contenedores:

  • Si tenemos aplicaciones monolíticas, vamos a usar un esquema multicapa. Necesitamos varios servicios para que la aplicación funcione. Partiendo del principio de que cada contenedor ejecuta un sólo proceso, si necesitamos que la aplicación use varios servicios (web, base de datos, proxy inverso, …) cada uno de ellos se implementará en un contenedor.
  • Si tenemos construida nuestra aplicación con microservicios, cada uno de ellos se podrá implementar en un contenedor independiente.

Cuando trabajamos con escenarios donde necesitamos correr varios contenedores podemos utilizar Compose. Compose nos ofrece una especificación para gestionar escenarios multicontenedor. Vamos a definir el escenario en un fichero llamado compose.yaml y vamos a gestionar el ciclo de vida de la aplicación y de todos los contenedores con la herramienta podman-compose.

El fichero de definición del escenario también puede ser llamado compose.yml, y por compatibilidad también se puede llamar docker-compose.yaml o docker-compose.yml.

podman-compose

podman-compose es una aplicación que implementa la especificación Compose, y que permite la gestión de escenarios multicontenedor en Podman.

podman-compose es un script escrito en Python, por lo que podemos hacer la instalación:

  • Utilizando el paquete oficial de la distribución: apt install podman-compose, dnf install podman-compose.
  • O utilizando pip: pip3 install podman-compose.
  • Compose se puede usar también desde Podman Desktop.

Una vez instalado, podremos utilizar directamente el ejecutable de podman-compose o un comando que nos ofrece el cliente de Podman: podman compose.

docker-compose

docker-compose es un script escrito en Python que tradicionalmente se ha utilizado para crear escenarios multiescenario en Docker. Actualmente la funcionalidad para trabajar con Compose se ha añadido al cliente Docker y podemos usar el comando docker compose para trabajar.

Como alternativa al uso de podman-compose podemos usar docker-compose para ello hay que instalar los siguiente paquetes:

En distribuciones Debian/Ubuntu:

$ sudo apt install docker-compose podman-docker

El la distribución Fedora:

$ sudo dnf install docker-compose podman-docker 

El paquete podman-docker añade un alias para que al poner el comando docker se ejecute el comando podman. Por último necesitamos activar el socket de Podman para que docker-compose se pueda conectar a la API de Podman.

Si queremos usar docker-compose en entorno rootful:

$ sudo systemctl start podman.socket

Si queremos usarlo en entornos rootless:

$ systemctl --user start podman.socket
$ export DOCKER_HOST=unix://$XDG_RUNTIME_DIR/podman/podman.sock

Ventajas de usar Compose

  • Hacer todo de manera declarativa para que no tenga que repetir todo el proceso cada vez que construyo el escenario.
  • Los archivos de declaración de Compose se pueden distribuir de manera sencilla, aumentando la colaboración entre los equipos de desarrollo.
  • 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.
  • Portabilidad entre entornos: Compose admite variables en el archivo de declaración. Puede utilizar estas variables para personalizar su composición para diferentes entornos o diferentes usuarios.

Actualizado: