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.22.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/

6 comments

Leave a Reply

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