¿QUÉ ES DOCKER COMPOSE?

Compose para Docker es una herramienta que nos permite definir y correr aplicaciones con multi contenedores, una vez definida la configuración mediante el comando docker-compose y sus parámetros podemos crear y lanzar las aplicaciones de forma conjunta y con una línea de comandos.

Además Compose nos permite trabajar con diferentes entornos como Production, Staging, Development y Testing, permitiendo crear un entorno de integración continua.

La configuración de Compose se realiza en un fichero con formato YAML, con la extensión yml, es decir, todos nuestros ficheros de configuración se denominarán: docker-compose.yml.

YAML fue creado bajo la creencia de que todos los datos pueden ser representados adecuadamente como combinaciones de listas, hashes y datos escalares, la sintaxis es relativamente sencilla y muy legible, algunas características de este fichero son:

  • Los contenidos en YAML se describen utilizando el conjunto de caracteres imprimibles de Unicode, bien en UTF-8 o UTF-16.
  • La estructura del documento se denota indentando con espacios en blanco y no se permite el uso de caracteres de tabulación para sangrar.
  • Los miembros de las listas se denotan encabezados por un guion ( – ) con un miembro por cada línea, …
  • Para ver más detalles puedes consultar algiunas características adiciones en la Wikipedia: Wiki YAML Características

Cómo nos indican en la documentación oficial todo fichero de docker se puede establecer en 3 pasos:

  1. Creacion del fichero Dockerfile de nuestra aplicación
  2. Creación de los servicios en el fichero docker-compose.yml con las indicaciones para la construcción y lanzamiento de nuestra aplicación.
  3. Finalmente ya podremos utilizar el comando docker-compose up para crear y lanzar nuestra aplicación con multi contenedores.

Ejemplo de fichero docker-compose.yml

Ejemplo de como sería la estructrura de un fichero docker-compose.yml, esto simplemente es un esqueleto para que os hagáis una idea de como se estructura:

version: "3.9"  # optional since v1.27.0
services:
  web:
    build: .
    ports:
      - "5000:5000"
    volumes:
      - .:/code
      - logvolume01:/var/log
    depends_on:
      - db
  db:
    image: mysql:5.7
    restart: unless-stopped
    ports:
     - 3307:3306
    environment:
      MYSQL_ROOT_PASSWORD:rootpass
      MYSQL_PASSWORD:mysqlpass
      MYSQL_USER: mysqluser
      SERVICE_NAME: mysql
volumes:
  logvolume01: {}

Documentación