Introducción a Docker: Docker Compose

2 min de lectura Ingeniería

Es hora de ir recapitulando todo lo que hemos aprendido de Docker hasta ahora:

  1. Introducción a Docker: Nginx
  2. Introducción a Docker: Nginx + PHP
  3. Introducción a Docker: Nginx + PHP + Redis

Lo peor de las anteriores publicaciones ha sido el tener que introducir comandos muy largos en la terminal, de manera que vamos a intentar reducir esa fricción. ¿Y si os dijera que podemos hacer lo mismo pero ejecutando un comando, uno solo, y muy cortito? “Yes, we can!”.

“Por favor Sr. Docker-Compose, preséntese en la sala”

Docker-compose acude al rescate para ayudarnos a agrupar configuraciones, y dejar a un lado esos comandos infernales, que podemos agrupar bajo un mismo alias/servicio para arrancar juntas o de manera individual. A continuación vamos trasladar todo lo aprendido hasta ahora a un fichero YML, y sin miedo (lo tenéis en https://github.com/avcconti/ph-docker-intro/blob/master/4-docker-compose/docker-compose.yml):

version: '3'

services:
  redis:
    image: 'redis:latest'
    ports:
      - '6379:6379'
    volumes:
      - 'redis_data:/data'
    networks:
      - 'mynet'
  php:
    build:
      context: .
      dockerfile: DockerfilePHP
    volumes:
      - '.:/www/myapp'
    ports:
      - '9000:9000'
    networks:
      - 'mynet'
  web:
    build: .
    depends_on:
      - 'php'
    ports:
      - '8080:80'
    volumes:
      - '.:/www/myapp'
    networks:
      - 'mynet'
    
volumes:
  redis_data: {}

networks:
  mynet: {}

Docker-compose se instala normalmente con Docker, por lo que deberíais recibir respuesta satisfactoria del siguiente comando:

docker-compose -h

Descargad/clonad/actualizad el repositorio local de https://github.com/avcconti/ph-docker-intro para obtener la carpeta 4-docker-compose, y dentro de esa carpeta ejecutad el siguiente comando:

docker-compose up

Cuando veáis algo similar a esto:

visitad con el navegador la URL http://localhost:8080/ y el resultado debería ser:

Traduciendo

Si nos fijamos en el fichero YML, y hemos seguido la serie de publicaciones, veremos una relación directa entre la configuración de cada servicio y los comandos que introdujimos en el pasado, por ejemplo:

web:
    build: .
    depends_on:
      - 'php'
    ports:
      - '8080:80'
    volumes:
      - '.:/www/myapp'
    networks:
      - 'mynet'
  1. Construye el servicio web usando la imagen por defecto (al no especificarse busca Dockerfile ).
  2. No arranca hasta que el servicio php esté levantado y corriendo gracias al depends_on.
  3. Engancha puerto local 8080 al 80 del contenedor.
  4. Enlaza el path actual al volumen indicado del contenedor.
  5. Usa la red mynet

Y ahora con el de Redis:

redis:
    image: 'redis:latest'
    ports:
      - '6379:6379'
    volumes:
      - 'redis_data:/data'
    networks:
      - 'mynet'
  1. Este servicio se basa en la imagen redis:latest (que buscará en Dockerhub)
  2. Engancha mi puerto 6379 al mismo puerto del contenedor
  3. Enlaza redis_data al path indicado del contenedor
  4. Usa la red mynet

Si os vais al fichero docker_assets/myapp.conf del repositorio veréis que hemos cambiado el nombre de dominio con el que buscaremos a PHP-FPM, en este caso buscaremos php, ya que es el nombre que le hemos puesto al servicio en docker-compose, y el que se usará para la resolución de dominios dentro de mynet.

Despedida

Hasta aquí hemos llegado con la introducción a Docker, espero que hayáis aprendido tanto como lo hice yo en su momento, y que me permitió agilizar tareas de desarrollo del día a día. Seguiremos hablando de Docker en el futuro, pero de manera más concisa y menos dirigida, como lo han sido estas cuatro publicaciones.

¡Nos vemos pronto!

Escrito por

Andrés Velasco

Andrés Velasco

Puede que te interese

Megaguía de eCommerce Growth para el Black Friday 2020

Post /Comentarios

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


Post /Relacionados