Docker: Docker-Compose

Docker compose, es la herramienta de docker que nos simplifica la vida para desplegar stacks. Podemos definir mediante ficheros yaml, la estructura de docker que queremos desplegar y una vez hecho esto ejecutarlo. El concepto es parecido a un dockerfile pero orientado a stacks en vez de a imágenes. Con esto podemos crear una infraestructura de docker muy fácilmente en cosa de segundos. Además, podemos luego controlar todo el stack con esta herramienta.

Instalación

Descargar docker compose

curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

Dar permisos de ejecución

chmod +x /usr/local/bin/docker-compose

Primeros pasos

Para hacer el ejemplo de un docker compose, vamos a desplegar un zabbix.

Lo primero que hay que hacer es crear una carpeta para el proyecto. En este caso vamos a desplegar un sistema de monitorización con la herramienta zabbix a modo de ejemplo.

mkdir zabbix

Una vez hecha la carpeta, crear el docker-compose

vim docker-compose.yml

Nota: muy importante, la sintaxis yaml no acepta tabulaciones

Ejemplo de docker-compose:

version: '3'
services:
  zabbix-db:
    image: monitoringartist/zabbix-db-mariadb
    container_name: zabbix-db
    hostname: zabbix-db
    restart: always
    volumes:
      - zabbix-db-storage:/var/lib/mysql
      - backups:/backups
      - /etc/localtime:/etc/localtime:ro
    environment:
      - MARIADB_USER=zabbix
      - MARIADB_PASS=zabbix
  zabbix-server:
    image: monitoringartist/zabbix-xxl
    container_name: zabbix-server
    hostname: zabbix-server
    restart: always

    ports:
      - "80:80"
      - "10051:10051"
    volumes:
      - /etc/localtime:/etc/localtime:ro
    links:
      - zabbix-db:zabbix.db
    environment:
      - ZS_DBHost=zabbix.db
      - ZS_DBUser=zabbix
      - ZS_DBPassword=zabbix
volumes:
  zabbix-db-storage:
    driver: local
  backups:
    driver: local

Cosas a tener en cuenta:

image: imagen de docker que se va a utilizar
volumes: son los volumenes que se van a pasar al docker
environment: las variables de entorno
ports: puertos mapeados
links: para indicar las referencias contra otro docker
container_name: Nombre para el docker
hostname: nombre del docker
restart: para que se reinicie automáticamente cuando se cae

Comprobar la sintaxis

docker-compose config

Una vez comprobado el docker-compose, solo falta iniciarlo. Para ello:

docker-compose up -d

En el caso de que se quisiese levantar un docker-compose con otro nombre, hay que hacerlo de la siguiente manera:

docker-compose -f <docker-compose_file> up -d

De este modo se iniciará en modo demonio y levantará todo el zabbix automáticamente. Para comprobar que está bien levantado

docker-compose ps
 Name         Command               State                                    Ports 
---------------------------------------------------------------------------------------------------------------
zabbix-db     /run.sh                 Up    3306/tcp 
zabbix-server /config/bootstrap.sh    Up    0.0.0.0:10051->10051/tcp, 10052/tcp, 162/udp, 0.0.0.0:80->80/tcp

Si se quisiese parar/arrancar sería con los comandos

docker-compose stop
docker-compose start

También se pueden ver los logs de los contenedores

docker-compose logs

Y si se quieren ver en vivo

docker-compose logs -f

Para ver de un docker en concreto

docker-compose logs <nombre_docker>

Una vez desplegado el docker, podemos ver que tiene mapeado el puerto 80 al de nuestro host. Para acceder la panel web:

http://<ip_host>

admin / zabbix

Mas info:

https://docs.docker.com/compose/compose-file/


Also published on Medium.

8 comments

  1. Hola ¿se pueden configurar las notificaciones por mail? he intentado pero no salen los mails. Tampoco sé qué logs tendría que revisar para poder ver dónde está el problema.

Leave a Reply

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *