Skip to content

Docker Compose

Docker Compose busca simplificar la gestión de contenedores de Docker cuando se requiren combinar servicios o aplicaciones con varios componentes, es decir, para múltiples contenedores que se comunican o enlazan, sugiriendo el uso de contenedor por servicio. Esta herramienta generaría "scripts" de docker simplemente indicando especificaciones en un archivo de tipo YAML.

En lugar de hacer "scripts" de comandos complejos y largos con Dockerfile, se define otro archivo de nombre docker-compose.yml con ciertos criterios a nivel declarativo y el archivo Dockerfile sólo se usaría para definir aspectos básicos del contenedor (semejante a los ejemplos que suelen ser sencillos).

Por tanto, se usa para crear multiples entornos aislados en un solo anfitrión y proporcionar una manera conveniente para que los desarrolaldores cuenten fácilmente con un entorno de desarrollo.

Este documento tiene un alcance sencillo y ágil a modo de abre bocas. Superado este alcance, para conocer más de este tema deberá investigarse.

Ejemplo de archivo para Docker Compose

Veamos un ejemplo de la estructura del contenido con un archivo docker-compose.yml:

yaml
version: "3.8"
services:
  proxy:
    image: traefik:chevrotin
    command: --providers.docker
    ports:
      - "80:80"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  nginx:
    image: nginx
    labels:
      - "traefik.http.routers.nginx.rule=Host(`nginx.domain.com`)"

  apache:
    image: httpd
    labels:
      - "traefik.http.routers.apache.rule=Host(`apache.domain.com`)"

Intalación de Docker Compose

Para instalar Docker Compose en Linux Debian, por ejemplo, se ejecuta:

bash
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

La configuración establecida en el archivo docker-compose.yml se lanza con el comando:

shell
docker-compose up -d

// instalacion en macOS En macOS, si se ha instalado Docker con Colima, ya se dispone de Docker Compose. En caso contrario, se puede instalar con brew:

bash
brew install docker-compose

Ejemplos con bases de datos y Docker Compose

Veamos algunos ejemplos con bases de datos. En estos casos se recomienda usar volúmenes para persistir la información, es decir, que no se pierda al detener el contenedor.

Ejemplo con MongoDB

yaml
version: "3.8"
services:
  db:
    image : mongo
    environment:
      - PUID=1000
      - PGID=1000
    volumes:
      - mongodb:/datadb
    ports:
      - 27017:27017
    container_name: mongodb
    restart: unless-stopped
volumes:
  mongodb:
    driver: local

Para lanzar el contenedor e interactuar con la base de datos ejecutamos lo siguiente:

bash
docker-compose up -d
sudo docker exec -it mongodb bash

Una vez se ingresa al contenedor se puede crear la base de datos con: use ....

Ejemplo con MariaDB

yaml
version: "3.8"
services:
  db:
    image : mariadb
    environment:
      - MYSQL_ROOT_PASSWORD=password
    volumes:
      - type: bind
        source: ./my.cnf
        target: /etc/mysql/my.cnf
    ports:
      - 3306:3306
    restart: unless-stopped

Ejemplo con PostgreSQL

yaml
version: "3.8"
services:
  db:
    image : postgres
    environment:
      - POSTGRES_DB=mytest
      - POSTGRES_USER=myuser
      - POSTGRES_PASSWORD=password
    volumes: 
      - postgres:/var/lib/postgresql/data
    ports:
      - '5432:5432'
    restart: unless-stopped
volumes:
  postgres:
    driver: local

Comandos esenciales con docker-compose

Podemos citar los siguientes comandos esenciales para el archivo docker-compose:

ComandoDescripción
docker-compose buildConstruye los contenedores asociados a la composición
docker-compose rmElimina los contenedores asociados a la composición
docker-compose upSube todos los contenedores asociados. -d para correr en segundo plano
docker-compose downDetiene todos los contenedores asociados
docker-compose runEjecuta comandos para la composición de contenedores
docker-compose logsMuestra "logs" para la composición de contenedores

© 2020 by César Arcila