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.yamlexibe o conteúdo do arquivodocker-compose.yamlpara a saída padrão.|é o operador pipe, que redireciona a saída padrão do comandocatpara a entrada padrão do comandodocker-compose config.docker-compose config -f -diz aodocker-compose configpara 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çoredis. O\ncria novas linhas na saída.|direciona esta string para o comandodocker-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.



