miércoles, 31 de octubre de 2018

Docker-Compose: Mi primera receta

Resultado de imagen de docker compose down one container

Hoy vamos a hablar del orquestador de Docker y aprender a crear nuestro primer ficher de docker-compose. Si aun no conoces Docker, en esta publicación lo explico y doy unas sencillas pautas para comenzar con él.

Un poco de teoría
Docker-Compose es una herramienta que se instala aparte de Docker y que nos permite realizar "recetas" para levantar varios contenedores con la posibilidad de que estén conectados entre sí de una forma bastante sencilla, entre otras cosas que veremos. Simplemente bastará con crear un archivo llamado docker-compose.yml (en los casos mas sencillos).

Instalando docker-compose
Esto es bastante sencillo, solo tendremos que hacer uso de los siguientes comandos:
sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
Por aquí les dejo la pagina de la documentacion con los pasos de instalación por si encontrais problemas: https://docs.docker.com/compose/install/#install-compose

Primera configuración
Como antes comentamos, solo tenemos que crear un fichero llamado docker-compose.yml donde queramos, escribir las ordenes para levantar los contenedores y finalmente ejecutarlo. Voy a poner un ejemplo de configuración en el que podamos ver mas o menos gran parte de las posibilidades:

version: '3'
services:
    nagios:
        image: jasonrivers/nagios:latest
        hostname: nagios
        container_name: nagios
        volumes:
          - "./path-to-nagios/etc/:/opt/nagios/etc/"
          - "./path-to-nagios/var:/opt/nagios/var/"
          - "./path-to-custom-plugins:/opt/Custom-Nagios-Plugins"
          - "./path-to-nagiosgraph-var:/opt/nagiosgraph/var"
          - "./path-to-nagiosgraph-etc:/opt/nagiosgraph/etc"
        ports:
          - "8080:80"
        networks:
          frontend:
            ipv4_address: 172.20.0.5
    nginx:
        image: nginx
        hostname: web
        container_name: web
        links:
          - mysql
        volumes:
          - ./web1:/usr/share/nginx/html
          - ./default.conf:/etc/nginx/conf.d/default.conf
        networks:
          frontend:
            ipv4_address: 172.20.0.6
    mysql:
        image: mysql
        hostname: database
        container_name: database
        networks:
          frontend:
            ipv4_address: 172.20.0.7
networks:
    frontend:
        ipam:
          config:
            - subnet: 172.20.0.0/24
Vamos a comenzar por las dos primeras instrucciones casi religiosas, la versión que usaremos y la cabecera de los servicios. A partir de ahí vienen los contenedores: Nagios, Nginx y MSQL. Dentro de cada servicio tenemos:
image: Nombre de la imagen local u online (Dockerhub)
hostname: Nombre de la "maquina"
container_name: Nombre del contenedor
links: Conectar contenedores
ports: Redirección de puertos "anfitrión:contenedor"
volumes: Carpetas compartidas con el contenedor en formato "anfitrión:contenedor"
networks: Configuración de red como dirección IP
 Al final del todo, fuera de los servicios, tenemos una configuración general sobre la red. Ya que si no la nombramos nos dará problemas con los contenedores. Obviamente la configuración de ese fichero podría complicarte muchísimo más para cosas mas concretas, pero tampoco era la intención.

También hay que plantearse cuando compensa complicarse y cuando no. Si ya existe una imagen que reúne todos los servicios LAMP, para que montar varios contenedores interconectados (Apache, MSQL, PHP...) pudiendo levantar uno solo que ya reúna todas las herramientas, como este caso.

Esto a sido todo, cualquier duda la dejáis en los comentarios y tratare de resolverla.

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

0 comentarios:

Publicar un comentario