Como usar o comando docker compose alpha dry-run para testar alterações

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar o comando docker compose alpha dry-run para testar alterações em sua configuração do Docker Compose sem realmente executá-las. Esta é uma ferramenta valiosa para verificar seu arquivo docker-compose.yaml e entender o impacto potencial dos comandos antes de aplicá-los.

Você começará preparando um arquivo docker-compose.yaml simples. Em seguida, usará a flag dry-run com comandos básicos do Docker Compose para observar a saída simulada e entender como o comando se comportaria. Finalmente, você aplicará dry-run a um comando que normalmente faria alterações, permitindo que você veja as ações pretendidas sem alterar seu sistema.

Prepare um arquivo docker-compose.yaml simples

Nesta etapa, prepararemos um arquivo docker-compose.yaml simples. Este arquivo definirá um serviço básico que podemos usar para demonstrar a funcionalidade dry-run do Docker Compose.

Primeiro, precisamos instalar o Docker Compose. Como ele não está pré-instalado neste ambiente, faremos o download do binário e o tornaremos executável.

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
sudo chmod +x /usr/local/bin/docker-compose

Este comando baixa o binário do Docker Compose para a arquitetura do seu sistema e o salva em /usr/local/bin/docker-compose. O comando chmod +x torna o arquivo executável.

Agora, vamos verificar se o Docker Compose está instalado corretamente, verificando sua versão.

docker-compose version

Você deve ver uma saída indicando a versão instalada do Docker Compose.

Em seguida, criaremos um diretório para nosso projeto e navegaremos até ele.

mkdir ~/project/my-compose-app
cd ~/project/my-compose-app

Agora estamos no diretório ~/project/my-compose-app, onde criaremos nosso arquivo docker-compose.yaml.

Agora, vamos criar o arquivo docker-compose.yaml usando o editor nano.

nano docker-compose.yaml

Dentro do editor nano, cole o seguinte conteúdo:

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

Este arquivo docker-compose.yaml define um único serviço chamado web. Este serviço usa a imagem Docker nginx:latest e mapeia a porta 80 no host para a porta 80 no container.

Salve o arquivo pressionando Ctrl + O, depois pressione Enter e saia do editor pressionando Ctrl + X.

Criamos com sucesso um arquivo docker-compose.yaml simples.

Use dry-run com um comando compose básico

Nesta etapa, usaremos a flag dry-run com um comando básico do Docker Compose para ver como ele funciona. A flag dry-run permite que você veja quais ações o Docker Compose tomaria sem realmente executá-las. Isso é útil para entender o impacto potencial de um comando antes de executá-lo.

Usaremos o comando docker-compose config com a flag dry-run. O comando config valida e exibe a configuração do arquivo Compose. Adicionar dry-run a este comando não altera significativamente seu comportamento, pois config já é um comando não destrutivo, mas é um bom ponto de partida para entender a sintaxe da flag.

Primeiro, certifique-se de estar no diretório que contém seu arquivo docker-compose.yaml.

cd ~/project/my-compose-app

Agora, execute o comando docker-compose config --dry-run.

docker-compose config --dry-run

Você deve ver a configuração analisada do seu arquivo docker-compose.yaml impressa no console. Esta saída é a mesma de executar docker-compose config sem a flag dry-run neste caso, porque config é inerentemente uma operação dry-run.

A saída confirma que o Docker Compose analisou com sucesso seu arquivo docker-compose.yaml e entende os serviços e configurações definidos nele.

Observe a saída do comando dry-run

Nesta etapa, observaremos cuidadosamente a saída do comando docker-compose config --dry-run que executamos na etapa anterior. Entender essa saída é crucial para ver como o Docker Compose interpreta seu arquivo docker-compose.yaml.

A saída que você viu é a configuração validada em formato YAML. Ela representa como o Docker Compose entende os serviços, redes e volumes definidos em seu arquivo.

Vamos analisar as partes principais da saída com base em nosso simples docker-compose.yaml:

services:
  web:
    build:
      context: /home/labex/project/my-compose-app
    container_name: my-compose-app-web-1
    image: nginx:latest
    ports:
      - published: 80
        target: 80
    restart: "no"

Você verá a seção services e, dentro dela, o serviço web.

  • image: nginx:latest: Isso confirma que o Docker Compose identificou corretamente a imagem a ser usada para o serviço web.
  • ports:: Esta seção mostra o mapeamento de portas. published: 80 indica a porta do host e target: 80 indica a porta do container. Isso corresponde ao que definimos em nosso docker-compose.yaml.
  • container_name: my-compose-app-web-1: O Docker Compose gera automaticamente um nome de container padrão com base no nome do diretório do projeto e no nome do serviço.
  • build:: Mesmo que tenhamos especificado uma image, o Docker Compose inclui uma seção build com o contexto definido para o diretório atual. Isso faz parte da representação interna e não significa que ele construirá uma imagem se você apenas especificou uma image.
  • restart: 'no': O Docker Compose define a política de reinicialização como no por padrão, se não for especificado.

Esta saída é uma representação da configuração final que o Docker Compose usaria se você executasse um comando como docker-compose up. A flag dry-run, quando usada com comandos que fariam alterações (o que veremos na próxima etapa), mostraria as ações que ele tomaria, não apenas a configuração.

Para o comando config, a flag dry-run serve principalmente para validar a sintaxe e a estrutura do seu arquivo docker-compose.yaml. Se houvesse algum erro de sintaxe, o comando config (com ou sem dry-run) os relataria.

Use dry-run com um comando que faria alterações

Nesta etapa, usaremos a flag dry-run com um comando do Docker Compose que normalmente faria alterações em seu sistema, como docker-compose up. Isso demonstrará como dry-run pode mostrar as ações pretendidas sem realmente criar containers ou redes.

O comando docker-compose up, sem dry-run, faria o pull das imagens especificadas (se ainda não estiverem presentes), criaria redes e iniciaria containers com base no seu arquivo docker-compose.yaml. Ao adicionar a flag dry-run, podemos ver as etapas que ele tomaria sem executá-las.

Primeiro, certifique-se de estar no diretório correto:

cd ~/project/my-compose-app

Agora, execute o comando docker-compose up --dry-run.

docker-compose up --dry-run

Você verá uma saída indicando as ações que o Docker Compose faria. Para nosso simples docker-compose.yaml, a saída pode ser semelhante a esta:

Would create network "my-compose-app_default"
Would create service "web"
  Would pull image "nginx:latest"
  Would create container "my-compose-app-web-1"

Esta saída mostra claramente que o Docker Compose pretende:

  1. Criar uma rede padrão chamada my-compose-app_default.
  2. Criar um serviço chamado web.
  3. Fazer o pull da imagem nginx:latest (se ela ainda não estiver disponível localmente).
  4. Criar um container chamado my-compose-app-web-1 para o serviço web.

Observe que nenhuma dessas ações é realmente executada. Nenhuma rede é criada, nenhuma imagem é baixada e nenhum container é iniciado. A flag dry-run impede quaisquer alterações reais no seu ambiente Docker.

Isso é incrivelmente útil para:

  • Visualizar alterações: Antes de implantar uma aplicação complexa, você pode usar dry-run para ver exatamente o que o Docker Compose fará.
  • Solução de problemas: Se um comando docker-compose up estiver falhando, dry-run pode ajudá-lo a entender as etapas iniciais e identificar possíveis problemas em sua configuração.
  • Aprendizado: Ele permite que você experimente diferentes configurações docker-compose.yaml e veja seu impacto sem afetar seu sistema.

Você pode usar a flag dry-run com outros comandos do Docker Compose também, como down, start, stop e rm, para ver quais recursos seriam afetados.

Resumo

Neste laboratório, aprendemos como preparar um arquivo docker-compose.yaml simples, primeiro instalando o Docker Compose e, em seguida, criando um diretório e o arquivo YAML com uma definição básica do serviço Nginx. Em seguida, exploramos o uso da flag dry-run com os comandos do Docker Compose.

Observamos como a flag dry-run nos permite visualizar as ações que um comando executaria sem realmente fazer nenhuma alteração no sistema. Esta é uma ferramenta valiosa para testar alterações em nosso arquivo docker-compose.yaml e entender o impacto potencial dos comandos antes da execução.