Cómo usar el comando docker stack config para inspeccionar archivos Compose combinados

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderá cómo utilizar el comando docker stack config para inspeccionar la configuración final y combinada de sus archivos Docker Compose. Esta es una habilidad crucial para comprender cómo Docker interpreta sus definiciones de Compose, especialmente cuando se trabaja con múltiples archivos o variables de entorno. Comenzará generando la configuración a partir de un solo archivo Compose, incluyendo los pasos necesarios para instalar Docker Compose en el entorno LabEx.

A continuación, explorará cómo combinar y generar la configuración a partir de múltiples archivos Compose, demostrando cómo Docker combina definiciones de diferentes fuentes. También aprenderá cómo generar la configuración directamente desde la entrada estándar y cómo omitir la interpolación de variables de entorno al generar la salida de la configuración. Estos pasos le brindarán una comprensión integral de las capacidades del comando docker stack config para depurar y verificar sus configuraciones de Docker Compose.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/VolumeOperationsGroup(["Volume Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/ls("List Containers") docker/ContainerOperationsGroup -.-> docker/exec("Execute Command in Container") docker/ContainerOperationsGroup -.-> docker/create("Create Container") docker/VolumeOperationsGroup -.-> docker/volume("Manage Volumes") subgraph Lab Skills docker/run -.-> lab-555233{{"Cómo usar el comando docker stack config para inspeccionar archivos Compose combinados"}} docker/ls -.-> lab-555233{{"Cómo usar el comando docker stack config para inspeccionar archivos Compose combinados"}} docker/exec -.-> lab-555233{{"Cómo usar el comando docker stack config para inspeccionar archivos Compose combinados"}} docker/create -.-> lab-555233{{"Cómo usar el comando docker stack config para inspeccionar archivos Compose combinados"}} docker/volume -.-> lab-555233{{"Cómo usar el comando docker stack config para inspeccionar archivos Compose combinados"}} end

Generar la configuración final a partir de un solo archivo Compose

En este paso, aprenderá cómo generar la configuración final a partir de un solo archivo Docker Compose. Esto es útil para depurar o comprender el estado final de su archivo Compose después de que se hayan procesado todas las variables y extensiones.

Primero, instalemos Docker Compose. Dado que no está preinstalado en el entorno de la máquina virtual (VM) de LabEx, necesitamos descargarlo e instalarlo. Descargaremos la última versión estable.

sudo curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Este comando descarga el binario de Docker Compose desde el repositorio oficial de GitHub. $(uname -s) y $(uname -m) se utilizan para obtener el sistema operativo y la arquitectura de la VM, asegurando que se descargue el binario correcto.

A continuación, necesitamos dar permisos de ejecución al binario descargado.

sudo chmod +x /usr/local/bin/docker-compose

Este comando hace que el comando docker-compose sea ejecutable.

Ahora, verifiquemos la instalación comprobando la versión.

docker-compose --version

Debería ver la versión instalada de Docker Compose impresa en la consola.

Antes de poder generar la configuración, necesitamos un archivo Docker Compose. Creemos uno simple en el directorio ~/project.

nano ~/project/docker-compose.yaml

Pegue el siguiente contenido en el archivo docker-compose.yaml:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"

Este es un archivo Compose simple que define un solo servicio llamado web utilizando la imagen nginx:latest y mapeando el puerto 80 del host al puerto 80 del contenedor.

Guarde el archivo presionando Ctrl + X, luego Y y Enter.

Ahora, navegue al directorio ~/project donde guardó el archivo docker-compose.yaml.

cd ~/project

Para generar la configuración final a partir de este archivo Compose, utilizamos el comando docker-compose config.

docker-compose config

Este comando lee el archivo docker-compose.yaml en el directorio actual y genera la configuración final combinada en la salida estándar. Debería ver el contenido YAML de su archivo docker-compose.yaml impreso, posiblemente con algunos valores predeterminados adicionales agregados por Docker Compose.

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.

Generar la configuración desde la entrada estándar (stdin)

En este paso, aprenderá cómo generar la configuración final a partir de un archivo Docker Compose proporcionado a través de la entrada estándar (stdin). Esto es útil cuando desea generar un archivo Compose de forma dinámica o canalizar la salida de otro comando directamente a docker-compose config.

Seguiremos trabajando en el directorio ~/project. En lugar de leer desde un archivo, canalizaremos el contenido de una configuración Compose directamente al comando docker-compose config.

Utilicemos el comando cat para generar el contenido de nuestro archivo docker-compose.yaml y canalizarlo a docker-compose config.

cd ~/project
cat docker-compose.yaml | docker-compose config -f -

En este comando:

  • cat docker-compose.yaml genera el contenido del archivo docker-compose.yaml a la salida estándar.
  • | es el operador de canalización, que redirige la salida estándar del comando cat a la entrada estándar del comando docker-compose config.
  • docker-compose config -f - le indica a docker-compose config que lea la configuración desde la entrada estándar (-) en lugar de un archivo.

Debería ver la misma salida que cuando ejecutó docker-compose config en el primer paso, que es la configuración del archivo docker-compose.yaml.

También puede canalizar directamente una configuración diferente. Por ejemplo, canalicemos una configuración simple para un servicio redis.

echo "version: '3.8'\nservices:\n  redis:\n    image: redis:latest" | docker-compose config -f -

En este comando:

  • echo "version: '3.8'\nservices:\n redis:\n image: redis:latest" genera la cadena YAML para un archivo Compose simple con un servicio redis. El \n crea saltos de línea en la salida.
  • | canaliza esta cadena al comando docker-compose config.
  • docker-compose config -f - lee la configuración desde la entrada estándar.

La salida debería ser la configuración YAML para el servicio redis.

Este método es especialmente útil cuando está generando configuraciones Compose mediante programación o cuando desea probar rápidamente una configuración sin guardarla en un archivo.

Generar la configuración combinada omitiendo la interpolación

En este paso, aprenderá cómo generar la configuración combinada a partir de múltiples archivos Docker Compose mientras se omite la interpolación de variables. Por defecto, docker-compose config interpola las variables de entorno. Omitir la interpolación puede ser útil cuando desea ver la configuración sin procesar con las variables todavía presentes, por ejemplo, cuando se está depurando o generando una plantilla.

Seguiremos trabajando en el directorio ~/project con nuestros archivos docker-compose.yaml y docker-compose.override.yaml.

Primero, agreguemos una variable de entorno a nuestro archivo docker-compose.yaml para demostrar la interpolación.

nano ~/project/docker-compose.yaml

Modifique el archivo docker-compose.yaml para incluir una variable de entorno en el nombre de la imagen:

version: "3.8"
services:
  web:
    image: nginx:${NGINX_VERSION:-latest}
    ports:
      - "80:80"

Aquí, ${NGINX_VERSION:-latest} es una variable que será reemplazada por el valor de la variable de entorno NGINX_VERSION. Si NGINX_VERSION no está configurada, tomará el valor predeterminado latest.

Guarde el archivo presionando Ctrl + X, luego Y y Enter.

Ahora, configure la variable de entorno NGINX_VERSION y luego ejecute docker-compose config para ver la interpolación en acción.

cd ~/project
export NGINX_VERSION=1.21
docker-compose config

Debería ver la configuración combinada, y el nombre de la imagen para el servicio web ahora debería ser nginx:1.21.

Para generar la configuración combinada sin interpolar las variables, usamos la opción --no-interpolate con el comando docker-compose config.

docker-compose --no-interpolate config

Esta vez, la salida debería mostrar el nombre de la imagen como nginx:${NGINX_VERSION:-latest}, con el marcador de posición de la variable todavía presente, incluso aunque la variable de entorno NGINX_VERSION esté configurada.

Esta opción es útil cuando desea ver la configuración exactamente como está escrita en sus archivos Compose, antes de que se realice cualquier sustitución de variables.

Resumen

En este laboratorio, aprendiste cómo utilizar el comando docker-compose config para inspeccionar la configuración final de los archivos Docker Compose. Comenzaste instalando Docker Compose en el entorno de la máquina virtual (VM) de LabEx, asegurándote de descargar el binario correcto para la arquitectura del sistema y otorgarle permisos de ejecución. Luego verificaste la instalación comprobando la versión.

Después de la instalación, creaste un archivo docker-compose.yaml simple que define un servicio web básico. Luego utilizaste el comando docker-compose config para generar la configuración final a partir de este único archivo Compose, demostrando cómo ver el estado procesado de tu definición Compose.