Como usar o comando docker compose alpha viz para visualizar arquivos compose

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como visualizar efetivamente seus arquivos Docker Compose usando o comando docker-compose alpha viz. Esta experiência prática irá guiá-lo através da geração de gráficos básicos para representar seus serviços e, em seguida, aprimorar progressivamente essas visualizações, incluindo imagens de serviço, redes e portas. Você também descobrirá como personalizar a indentação do gráfico de saída para melhor legibilidade.

Ao final deste laboratório, você será capaz de criar representações visuais claras e informativas de suas configurações Docker Compose, facilitando a compreensão das relações e dependências dentro de suas aplicações multi-container.

Gerar um gráfico básico a partir de um arquivo compose

Nesta etapa, você aprenderá como gerar uma representação gráfica básica do seu arquivo Docker Compose. Isso é útil para visualizar as relações entre seus serviços, redes e volumes.

Primeiro, você precisa instalar o Docker Compose. Como ele não está pré-instalado no ambiente LabEx, você o instalará usando pip.

sudo apt update
sudo apt install -y python3-pip
pip install docker-compose

Após a conclusão da instalação, você pode verificar a instalação verificando a versão do Docker Compose.

docker-compose --version

Você deve ver uma saída semelhante a docker-compose version 1.29.2, build 5becea4c.

Agora, vamos criar um arquivo Docker Compose simples. Navegue até o diretório do seu projeto e crie um arquivo chamado docker-compose.yml.

cd ~/project
nano docker-compose.yml

Adicione o seguinte conteúdo ao arquivo docker-compose.yml:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: ubuntu:latest
    command: sleep infinity

Este arquivo docker-compose.yml define dois serviços: web usando a imagem nginx:latest e app usando a imagem ubuntu:latest. O serviço web mapeia a porta 80 no host para a porta 80 no container. O serviço app simplesmente executa o comando sleep infinity para manter o container em execução.

Para gerar um gráfico básico a partir deste arquivo compose, você usará o comando docker-compose config com a flag --graph. Este comando analisa o arquivo compose e gera uma representação gráfica no formato DOT.

docker-compose config --graph

A saída estará na linguagem DOT, que é uma linguagem de descrição de gráficos. Ele mostrará os serviços e suas conexões básicas. Por exemplo, você pode ver algo como:

digraph {
  compound=true
  "web" [label="web"]
  "app" [label="app"]
  "web" -> "app" [label="depends_on"]
}

Esta saída DOT representa um gráfico direcionado onde web e app são nós, e há uma aresta direcionada de web para app rotulada como "depends_on". Embora este exemplo simples não defina explicitamente dependências, docker-compose config --graph pode inferir algumas relações.

Incluir imagens de serviço no gráfico

Nesta etapa, você aprenderá como incluir as imagens de serviço no gráfico gerado. Por padrão, o gráfico básico mostra apenas os nomes dos serviços. Incluir os nomes das imagens fornece mais contexto sobre o que cada serviço representa.

Você continuará usando o arquivo docker-compose.yml que criou na etapa anterior.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
  app:
    image: ubuntu:latest
    command: sleep infinity

Para incluir as imagens de serviço na saída do gráfico, você precisa usar a flag --images com o comando docker-compose config --graph.

docker-compose config --graph --images

A execução deste comando gerará a saída do gráfico DOT, mas desta vez, os nós que representam os serviços também incluirão os nomes das imagens. A saída será semelhante à etapa anterior, mas com informações adicionais dentro das definições dos nós.

Por exemplo, a saída agora pode se parecer com isto:

digraph {
  compound=true
  "web" [label="web\nnginx:latest"]
  "app" [label="app\nubuntu:latest"]
  "web" -> "app" [label="depends_on"]
}

Observe que o atributo label para cada nó agora inclui o nome do serviço e o nome da imagem, separados por um caractere de nova linha (\n). Isso torna o gráfico mais informativo, mostrando qual imagem Docker é usada para cada serviço.

Esta é uma maneira simples de adicionar mais detalhes à sua visualização do gráfico Docker Compose, ajudando você a entender os componentes de sua aplicação rapidamente.

Incluir redes de serviço no gráfico

Nesta etapa, você aprenderá como incluir as redes às quais seus serviços estão conectados no gráfico gerado. Compreender a topologia da rede é crucial para depurar e visualizar o fluxo de comunicação entre seus containers.

Você modificará o arquivo docker-compose.yml para definir explicitamente uma rede e conectar os serviços a ela.

Abra o arquivo docker-compose.yml no diretório do seu projeto:

nano ~/project/docker-compose.yml

Modifique o conteúdo para incluir uma definição de rede e conectar os serviços a esta rede:

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - my_network
  app:
    image: ubuntu:latest
    command: sleep infinity
    networks:
      - my_network

networks:
  my_network:
    driver: bridge

Neste docker-compose.yml atualizado, adicionamos uma seção networks no nível superior para definir uma rede chamada my_network usando o driver bridge. Também adicionamos uma chave networks sob cada serviço (web e app) para especificar que eles devem ser conectados a my_network.

Agora, para incluir as informações da rede na saída do gráfico, você usará a flag --networks junto com a flag --graph.

docker-compose config --graph --networks

A execução deste comando gerará a saída do gráfico DOT, que agora incluirá nós representando a rede e arestas mostrando quais serviços estão conectados a ela. A saída será mais complexa do que antes, ilustrando as conexões de rede.

Você verá nós para os serviços (web e app) e um nó para a rede (my_network). Haverá arestas conectando os serviços à rede, indicando sua participação nessa rede. Essa visualização ajuda você a ver como seus serviços são isolados ou conectados no nível da rede.

Incluir portas de serviço no gráfico

Nesta etapa, você aprenderá como incluir as portas expostas e publicadas de seus serviços no gráfico gerado. Visualizar as portas ajuda a entender como seus serviços são acessíveis de fora da rede Docker ou de outros serviços.

Você continuará usando o arquivo docker-compose.yml das etapas anteriores.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - my_network
  app:
    image: ubuntu:latest
    command: sleep infinity
    networks:
      - my_network

networks:
  my_network:
    driver: bridge

Para incluir as portas de serviço na saída do gráfico, você usará a flag --ports junto com a flag --graph. Você pode combinar várias flags para incluir diferentes tipos de informações no gráfico. Vamos incluir imagens, redes e portas no gráfico.

docker-compose config --graph --images --networks --ports

A execução deste comando gerará a saída do gráfico DOT, que agora incluirá informações sobre as portas para cada serviço. A saída será ainda mais detalhada, mostrando os nomes dos serviços, nomes das imagens, conexões de rede e mapeamentos de portas.

Para o serviço web, você verá o mapeamento de porta 80:80 incluído em sua definição de nó. Isso indica que a porta 80 no host está mapeada para a porta 80 dentro do container web.

A saída DOT para o nó do serviço web pode se parecer com isto:

"web" [label="web\nnginx:latest\n80:80"]

Ao incluir portas no gráfico, você obtém uma imagem mais clara de como seus serviços são expostos e como o tráfego externo ou o tráfego de outros containers pode alcançá-los. Isso é particularmente útil para depurar problemas de conectividade ou entender a interface externa do serviço.

Personalizar a indentação no gráfico de saída

Nesta etapa, você aprenderá como personalizar a indentação da saída do gráfico DOT gerado. Embora a indentação padrão seja geralmente aceitável, você pode querer ajustá-la para melhor legibilidade ou para se adequar a padrões de formatação específicos, caso planeje processar a saída posteriormente.

Você continuará usando o arquivo docker-compose.yml das etapas anteriores.

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    networks:
      - my_network
  app:
    image: ubuntu:latest
    command: sleep infinity
    networks:
      - my_network

networks:
  my_network:
    driver: bridge

Para personalizar a indentação da saída do gráfico, você pode usar a flag --indent seguida pelo número de espaços que deseja usar para a indentação. Vamos gerar o gráfico com imagens, redes e portas incluídas e definir a indentação para 4 espaços.

docker-compose config --graph --images --networks --ports --indent 4

A execução deste comando produzirá o mesmo conteúdo do gráfico da etapa anterior, mas as linhas na saída DOT serão indentadas com 4 espaços. Compare a saída deste comando com a saída da etapa anterior para ver a diferença na indentação.

Por exemplo, uma seção da saída pode agora se parecer com isto, com 4 espaços de indentação:

digraph {
    compound=true
    "web" [label="web\nnginx:latest\n80:80"]
    "app" [label="app\nubuntu:latest"]
    "my_network" [label="my_network"]
    "web" -> "my_network" [label="network"]
    "app" -> "my_network" [label="network"]
    "web" -> "app" [label="depends_on"]
}

Você pode experimentar com diferentes valores de indentação para ver como isso afeta a formatação da saída. Essa opção é principalmente para fins estéticos ou para ferramentas que exigem um estilo de indentação específico para arquivos DOT.

Resumo

Neste laboratório, você aprendeu como visualizar arquivos Docker Compose usando o comando docker-compose config --graph. Você começou instalando o Docker Compose e criando um arquivo docker-compose.yml básico com dois serviços. Em seguida, você gerou uma representação gráfica básica deste arquivo em formato DOT, que mostra visualmente os serviços e seus relacionamentos.

Com base na visualização básica, você explorou como incluir detalhes adicionais no gráfico. Isso incluiu a incorporação de imagens de serviço, redes e portas na saída visual, fornecendo uma visão mais abrangente da configuração do arquivo compose. Por fim, você aprendeu como personalizar a indentação do gráfico de saída para melhorar a legibilidade.