Es hora de ir recapitulando todo lo que hemos aprendido de Docker hasta ahora:
- Introducción a Docker: Nginx
- Introducción a Docker: Nginx + PHP
- 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'
- Construye el servicio
web
usando la imagen por defecto (al no especificarse busca Dockerfile
). - No arranca hasta que el servicio
php
esté levantado y corriendo gracias al depends_on
. - Engancha puerto local 8080 al 80 del contenedor.
- Enlaza el
path actual
al volumen indicado del contenedor. - Usa la red
mynet
Y ahora con el de Redis:
redis:
image: 'redis:latest'
ports:
- '6379:6379'
volumes:
- 'redis_data:/data'
networks:
- 'mynet'
- Este servicio se basa en la imagen
redis:latest
(que buscará en Dockerhub) - Engancha mi puerto 6379 al mismo puerto del contenedor
- Enlaza
redis_data
al path indicado del contenedor - 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!
Es un post súper interesante!
¡Me alegro de que te sirva Carla!