Es hora de ir recapitulando todo lo que hemos aprendido de Docker hasta ahora:
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!”.

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:

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'
web usando la imagen por defecto (al no especificarse busca Dockerfile ).php esté levantado y corriendo gracias al depends_on.path actual al volumen indicado del contenedor.mynetY ahora con el de Redis:
redis:
image: 'redis:latest'
ports:
- '6379:6379'
volumes:
- 'redis_data:/data'
networks:
- 'mynet'
redis:latest (que buscará en Dockerhub)redis_data al path indicado del contenedormynetSi 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.
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!
Es un post súper interesante!
¡Me alegro de que te sirva Carla!