Combinar y generar la configuración a partir de múltiples archivos Compose
En este paso, aprenderá cómo combinar configuraciones de múltiples archivos Docker Compose y generar la configuración final combinada. Esta es una función poderosa que le permite definir una configuración base y luego sobrescribirla o extenderla con archivos adicionales, lo cual es útil para gestionar diferentes entornos (por ejemplo, desarrollo, preproducción, producción).
Seguiremos trabajando en el directorio ~/project. En el paso anterior, creamos un archivo docker-compose.yaml. Ahora, creemos otro archivo Compose para extender la configuración base. Lo llamaremos docker-compose.override.yaml.
nano ~/project/docker-compose.override.yaml
Pegue el siguiente contenido en el archivo docker-compose.override.yaml:
version: "3.8"
services:
web:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./html:/usr/share/nginx/html
Este archivo de sobrescritura modifica el servicio web definido en docker-compose.yaml. Cambia el mapeo de puertos del host de 80 a 8080 y agrega un montaje de volumen para servir contenido HTML estático desde un directorio local llamado html.
Guarde el archivo presionando Ctrl + X, luego Y y Enter.
Ahora, creemos el directorio html y un archivo index.html simple dentro de él.
mkdir ~/project/html
nano ~/project/html/index.html
Pegue el siguiente contenido en ~/project/html/index.html:
<h1>Hello from Nginx!</h1>
Guarde el archivo presionando Ctrl + X, luego Y y Enter.
Por defecto, Docker Compose busca automáticamente docker-compose.yaml y docker-compose.override.yaml en el directorio actual y los combina. Las configuraciones en el archivo de sobrescritura tienen prioridad.
Para ver la configuración combinada, asegúrese de estar en el directorio ~/project y ejecute nuevamente el comando docker-compose config.
cd ~/project
docker-compose config
Ahora debería ver la configuración combinada, donde el servicio web tiene el mapeo de puertos 8080:80 y el montaje de volumen ./html:/usr/share/nginx/html.
También puede especificar explícitamente qué archivos Compose utilizar con la opción -f. El orden en el que se especifican los archivos es importante, ya que los archivos posteriores sobrescriben a los anteriores.
Por ejemplo, para combinar explícitamente docker-compose.yaml y docker-compose.override.yaml, puede ejecutar:
docker-compose -f docker-compose.yaml -f docker-compose.override.yaml config
En este caso, esto producirá la misma salida combinada que ejecutar docker-compose config sin la opción -f, porque docker-compose.override.yaml se detecta y combina automáticamente después de docker-compose.yaml.