Como usar o comando docker stack config para inspecionar arquivos Compose mesclados

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar o comando docker stack config para inspecionar a configuração final e mesclada dos seus arquivos Docker Compose. Esta é uma habilidade crucial para entender como o Docker interpreta suas definições Compose, especialmente ao lidar com múltiplos arquivos ou variáveis de ambiente. Você começará exibindo a configuração de um único arquivo Compose, incluindo as etapas necessárias para instalar o Docker Compose no ambiente LabEx.

Em seguida, você explorará como mesclar e exibir a configuração de múltiplos arquivos Compose, demonstrando como o Docker combina definições de diferentes fontes. Você também aprenderá como exibir a configuração diretamente da entrada padrão (standard input) e como ignorar a interpolação de variáveis de ambiente ao gerar a saída da configuração. Essas etapas fornecerão a você uma compreensão abrangente das capacidades do comando docker stack config para depurar e verificar suas configurações Docker Compose.

Exibir a configuração final de um único arquivo Compose

Nesta etapa, você aprenderá como exibir a configuração final de um único arquivo Docker Compose. Isso é útil para depurar ou entender o estado final do seu arquivo Compose após todas as variáveis e extensões terem sido processadas.

Primeiro, vamos instalar o Docker Compose. Como ele não está pré-instalado no ambiente da VM LabEx, precisamos baixá-lo e instalá-lo. Vamos baixar a versão estável mais recente.

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 baixa o binário do Docker Compose do repositório oficial do GitHub. $(uname -s) e $(uname -m) são usados para obter o sistema operacional e a arquitetura da VM, garantindo que você baixe o binário correto.

Em seguida, precisamos dar ao binário baixado permissões de execução.

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

Este comando torna o comando docker-compose executável.

Agora, vamos verificar a instalação verificando a versão.

docker-compose --version

Você deve ver a versão instalada do Docker Compose impressa no console.

Antes de podermos exibir a configuração, precisamos de um arquivo Docker Compose. Vamos criar um simples no diretório ~/project.

nano ~/project/docker-compose.yaml

Cole o seguinte conteúdo no arquivo docker-compose.yaml:

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

Este é um arquivo Compose simples que define um único serviço chamado web usando a imagem nginx:latest e mapeando a porta 80 no host para a porta 80 no container.

Salve o arquivo pressionando Ctrl + X, depois Y e Enter.

Agora, navegue até o diretório ~/project onde você salvou o arquivo docker-compose.yaml.

cd ~/project

Para exibir a configuração final deste arquivo Compose, usamos o comando docker-compose config.

docker-compose config

Este comando lê o arquivo docker-compose.yaml no diretório atual e exibe a configuração final mesclada na saída padrão. Você deve ver o conteúdo YAML do seu arquivo docker-compose.yaml impresso, potencialmente com alguns valores padrão adicionais adicionados pelo Docker Compose.

Mesclar e exibir a configuração de múltiplos arquivos Compose

Nesta etapa, você aprenderá como mesclar configurações de múltiplos arquivos Docker Compose e exibir a configuração combinada final. Este é um recurso poderoso que permite definir uma configuração base e, em seguida, substituí-la ou estendê-la com arquivos adicionais, o que é útil para gerenciar diferentes ambientes (por exemplo, desenvolvimento, staging, produção).

Continuaremos trabalhando no diretório ~/project. Na etapa anterior, criamos um arquivo docker-compose.yaml. Agora, vamos criar outro arquivo Compose para estender a configuração base. Vamos chamá-lo de docker-compose.override.yaml.

nano ~/project/docker-compose.override.yaml

Cole o seguinte conteúdo no arquivo docker-compose.override.yaml:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html

Este arquivo de override modifica o serviço web definido em docker-compose.yaml. Ele altera o mapeamento da porta do host de 80 para 8080 e adiciona uma montagem de volume para servir conteúdo HTML estático de um diretório local chamado html.

Salve o arquivo pressionando Ctrl + X, depois Y e Enter.

Agora, vamos criar o diretório html e um simples arquivo index.html dentro dele.

mkdir ~/project/html
nano ~/project/html/index.html

Cole o seguinte conteúdo em ~/project/html/index.html:

<h1>Hello from Nginx!</h1>

Salve o arquivo pressionando Ctrl + X, depois Y e Enter.

Por padrão, o Docker Compose procura automaticamente por docker-compose.yaml e docker-compose.override.yaml no diretório atual e os mescla. As configurações no arquivo de override têm precedência.

Para ver a configuração mesclada, certifique-se de estar no diretório ~/project e execute o comando docker-compose config novamente.

cd ~/project
docker-compose config

Você deve agora ver a configuração combinada, onde o serviço web tem o mapeamento de porta 8080:80 e a montagem de volume ./html:/usr/share/nginx/html.

Você também pode especificar explicitamente quais arquivos Compose usar com a flag -f. A ordem em que você especifica os arquivos é importante, pois os arquivos posteriores substituem os anteriores.

Por exemplo, para mesclar explicitamente docker-compose.yaml e docker-compose.override.yaml, você pode executar:

docker-compose -f docker-compose.yaml -f docker-compose.override.yaml config

Isso produzirá a mesma saída mesclada que executar docker-compose config sem a flag -f neste caso, porque docker-compose.override.yaml é automaticamente detectado e mesclado após docker-compose.yaml.

Exibir a configuração a partir de stdin

Nesta etapa, você aprenderá como exibir a configuração final de um arquivo Docker Compose fornecido via entrada padrão (stdin). Isso é útil quando você deseja gerar um arquivo Compose dinamicamente ou direcionar a saída de outro comando diretamente para docker-compose config.

Continuaremos trabalhando no diretório ~/project. Em vez de ler de um arquivo, direcionaremos o conteúdo de uma configuração Compose diretamente para o comando docker-compose config.

Vamos usar o comando cat para exibir o conteúdo do nosso arquivo docker-compose.yaml e direcioná-lo para docker-compose config.

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

Neste comando:

  • cat docker-compose.yaml exibe o conteúdo do arquivo docker-compose.yaml para a saída padrão.
  • | é o operador pipe, que redireciona a saída padrão do comando cat para a entrada padrão do comando docker-compose config.
  • docker-compose config -f - diz ao docker-compose config para ler a configuração da entrada padrão (-) em vez de um arquivo.

Você deve ver a mesma saída que quando executou docker-compose config na primeira etapa, que é a configuração de docker-compose.yaml.

Você também pode direcionar uma configuração diferente diretamente. Por exemplo, vamos direcionar uma configuração simples para um serviço redis.

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

Neste comando:

  • echo "version: '3.8'\nservices:\n redis:\n image: redis:latest" exibe a string YAML para um arquivo Compose simples com um serviço redis. O \n cria novas linhas na saída.
  • | direciona esta string para o comando docker-compose config.
  • docker-compose config -f - lê a configuração da entrada padrão.

A saída deve ser a configuração YAML para o serviço redis.

Este método é particularmente útil quando você está gerando configurações Compose programaticamente ou quando deseja testar rapidamente uma configuração sem salvá-la em um arquivo.

Exibir configuração mesclada ignorando a interpolação

Nesta etapa, você aprenderá como exibir a configuração mesclada de múltiplos arquivos Docker Compose, ignorando a interpolação de variáveis. Por padrão, docker-compose config interpola variáveis de ambiente. Ignorar a interpolação pode ser útil quando você deseja ver a configuração bruta com variáveis ainda presentes, por exemplo, ao depurar ou gerar um template.

Continuaremos trabalhando no diretório ~/project com nossos arquivos docker-compose.yaml e docker-compose.override.yaml.

Primeiro, vamos adicionar uma variável de ambiente ao nosso arquivo docker-compose.yaml para demonstrar a interpolação.

nano ~/project/docker-compose.yaml

Modifique o arquivo docker-compose.yaml para incluir uma variável de ambiente no nome da imagem:

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

Aqui, ${NGINX_VERSION:-latest} é uma variável que será substituída pelo valor da variável de ambiente NGINX_VERSION. Se NGINX_VERSION não estiver definido, ele será definido como latest por padrão.

Salve o arquivo pressionando Ctrl + X, depois Y e Enter.

Agora, vamos definir a variável de ambiente NGINX_VERSION e, em seguida, executar docker-compose config para ver a interpolação em ação.

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

Você deve ver a configuração mesclada, e o nome da imagem para o serviço web agora deve ser nginx:1.21.

Para exibir a configuração mesclada sem interpolar as variáveis, usamos a flag --no-interpolate com o comando docker-compose config.

docker-compose --no-interpolate config

Desta vez, a saída deve mostrar o nome da imagem como nginx:${NGINX_VERSION:-latest}, com o espaço reservado da variável ainda presente, mesmo que a variável de ambiente NGINX_VERSION esteja definida.

Esta flag é útil quando você deseja ver a configuração exata como escrita em seus arquivos Compose, antes que qualquer substituição de variável ocorra.

Resumo

Neste laboratório, você aprendeu como usar o comando docker-compose config para inspecionar a configuração final dos arquivos Docker Compose. Você começou instalando o Docker Compose no ambiente da VM do LabEx, garantindo que você baixou o binário correto para a arquitetura do sistema e concedendo a ele permissões executáveis. Em seguida, você verificou a instalação verificando a versão.

Após a instalação, você criou um arquivo docker-compose.yaml simples definindo um serviço web básico. Em seguida, você usou o comando docker-compose config para exibir a configuração final deste único arquivo Compose, demonstrando como visualizar o estado processado da sua definição Compose.