Docker Compose

Compose

Compose es una herramienta para definir y ejecutar aplicaciones Docker de varios contenedores. Con Compose, utiliza un archivo YAML para configurar los servicios de su aplicación. Luego, con un solo comando, crea e inicia todos los servicios desde su configuración. Para obtener más información sobre todas las funciones de Compose, consulte la lista de funciones.

Compose funciona en todos los entornos: producción, puesta en escena, desarrollo, pruebas, así como flujos de trabajo de CI. Puede obtener más información sobre cada caso en Casos de uso común.

El uso de Compose es básicamente un proceso de tres pasos:

  • Defina el entorno de su aplicación con un Dockerfile para que pueda reproducirse en cualquier lugar.
  • Defina los servicios que componen su aplicación en docker-compose.yml para que puedan ejecutarse juntos en un entorno aislado.
  • Ejecute docker compose up y el comando Docker compose inicia y ejecuta toda su aplicación. Alternativamente, puede ejecutar docker-compose up usando el binario docker-compose.

Un docker-compose.yml se ve así:

services:
  web:
    build: .
    ports:
      - "8000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    links:
      - redis
  redis:
    image: redis
volumes:
  logvolume01: {}

Compose tiene comandos para administrar todo el ciclo de vida de su aplicación:

  • Iniciar, detener y reconstruir servicios
  • Ver el estado de los servicios en ejecución
  • Transmita la salida de registro de los servicios en ejecución
  • Ejecutar un comando único en un servicio

Funcionalidades

Las funcionalidades de Compose que lo hacen efectivo son:

  • Múltiples entornos aislados en un solo host
  • Conservar datos de volumen cuando se crean contenedores
  • Solo recrear contenedores que hayan cambiado
  • Variables y movimiento de una composición entre entornos

Múltiples entornos aislados

Compose usa un nombre de proyecto para aislar los entornos entre sí. Puede hacer uso de este nombre de proyecto en varios contextos diferentes:

  • en un host de desarrollo, para crear varias copias de un solo entorno, como cuando desea ejecutar una copia estable para cada rama de función de un proyecto
  • en un servidor CI, para evitar que las compilaciones interfieran entre sí, puede establecer el nombre del proyecto en un número de compilación único
  • en un host compartido o dev host, para evitar que diferentes proyectos, que pueden usar los mismos nombres de servicio, interfieran entre sí

El nombre del proyecto predeterminado es el nombre base del directorio del proyecto. Puede establecer un nombre de proyecto personalizado mediante la opción de línea de comando -p o la variable de entorno COMPOSE_PROJECT_NAME.

El directorio del proyecto predeterminado es el directorio base del archivo Compose. Se puede definir un valor personalizado con la opción de línea de comando --project-directory.

Conservar datos de volumen

Compose conserva todos los volúmenes utilizados por sus servicios. Cuando se ejecuta docker-compose up, si encuentra contenedores de ejecuciones anteriores, copia los volúmenes del contenedor anterior al contenedor nuevo. Este proceso garantiza que no se pierda ningún dato que haya creado en los volúmenes.

Si usa docker-compose en una máquina con Windows, consulte Variables de entorno y ajuste las variables de entorno necesarias para sus necesidades específicas.

Solo recrear contenedores que hayan cambiado

Compose almacena en caché la configuración utilizada para crear un contenedor. Cuando reinicia un servicio que no ha cambiado, Compose reutiliza los contenedores existentes. La reutilización de contenedores significa que puede realizar cambios en su entorno muy rápidamente.

Variables y movimiento de una composición entre entornos

Compose admite variables en el archivo Compose. Puede usar estas variables para personalizar su composición para diferentes entornos o diferentes usuarios.

Puede extender un archivo Compose utilizando el campo extends o creando varios archivos Compose.

Casos de uso común

Compose se puede utilizar de muchas maneras diferentes. A continuación se describen algunos casos de uso comunes.

Entornos de desarrollo

Cuando desarrolla software, la capacidad de ejecutar una aplicación en un entorno aislado e interactuar con ella es crucial. La herramienta de línea de comandos Compose se puede utilizar para crear el entorno e interactuar con él.

El archivo Compose proporciona una forma de documentar y configurar todas las dependencias del servicio de la aplicación (bases de datos, colas, cachés, API de servicios web, etc.). Con la herramienta de línea de comandos Compose, puede crear e iniciar uno o más contenedores para cada dependencia con un solo comando (docker-compose up).

Juntas, estas características brindan una manera conveniente para que los desarrolladores comiencen un proyecto. Compose puede reducir una “guía de inicio para desarrolladores” de varias páginas a un solo archivo de Compose legible por máquina y algunos comandos.

Entornos de prueba automatizados

Una parte importante de cualquier proceso de implementación continua o integración continua es el conjunto de pruebas automatizado. Las pruebas automatizadas de extremo a extremo requieren un entorno en el que ejecutar las pruebas. Compose proporciona una forma conveniente de crear y destruir entornos de prueba aislados para su conjunto de pruebas. Al definir el entorno completo en un archivo Compose, puede crear y destruir estos entornos con solo unos pocos comandos:

 docker-compose up -d

 ./run_tests

 docker-compose down

Implementaciones de host único

Compose se ha centrado tradicionalmente en los flujos de trabajo de desarrollo y prueba, pero con cada versión avanzamos en funciones más orientadas a la producción.

NOTA DE INTERÉS: Para más información sobre Compose en producción, ver Compose In Production. En este curso no indagaremos en este contenido debido a que nos enfocaremos en los orquestadores de contenedores.