Olá! Bem-vindo de volta ao nosso curso.
Introdução
Na lição anterior, você aprendeu a definir uma aplicação multi-contêiner de forma declarativa, integrando redes customizadas e volumes nomeados diretamente no arquivo docker-compose.yml. Isso nos deu uma base sólida para criar aplicações robustas e portáteis.
Agora que temos o "plano" da nossa aplicação, o próximo passo é aprender a gerenciar seu ciclo de vida. Nesta lição, você vai dominar os comandos essenciais que usará no dia a dia para iniciar, parar, monitorar e remover suas aplicações multi-contêiner. Especificamente, vamos nos concentrar nos comandos docker-compose up, down e logs.
Compreender esses comandos é fundamental, pois eles são a interface principal entre você, o desenvolvedor, e a aplicação conteinerizada que você está construindo. Ao final desta lição, você será capaz de orquestrar com confiança o ciclo de vida completo de uma aplicação definida com Docker Compose.
Iniciando a Aplicação: docker-compose up
O comando docker-compose up é o ponto de partida. Ele lê o seu arquivo docker-compose.yml, analisa os serviços, redes e volumes definidos e, em seguida, cria e inicia todos esses componentes para você.
Antes de prosseguirmos, vamos ver uma demonstração prática de como usar o docker-compose up e o que ele faz por baixo dos panos. O vídeo a seguir ilustra a transição de comandos docker run manuais para um único comando docker-compose up, destacando a simplicidade e o poder do Compose.
Ultimate Docker Compose Tutorial
Para entender o fluxo de trabalho do Docker Compose na prática, assista a este segmento do vídeo "Ultimate Docker Compose Tutorial" do canal TechWorld with Nana. Ele demonstra como o comando docker-compose up inicia todos os serviços definidos e como o Compose gerencia a criação de redes e contêineres automaticamente.
Assista do timestamp 16:18 a 20:55. Observe como o comando docker-compose up é executado, a criação automática da rede padrão (projects_default) e como os logs de ambos os serviços são exibidos de forma intercalada no terminal.
Como você viu no vídeo, ao executar docker-compose up, o terminal fica "preso" exibindo os logs combinados de todos os contêineres. Isso é chamado de modo foreground e é muito útil para depurar problemas de inicialização.
No entanto, para o desenvolvimento diário, você geralmente vai querer que seus contêineres rodem em segundo plano. Para isso, usamos a flag -d (de detached).
docker-compose up -d
Este comando inicia todos os serviços e libera seu terminal imediatamente.
Verificando e Monitorando a Aplicação
Depois de iniciar seus serviços em modo detached, como você sabe o que está acontecendo?
docker-compose ps
Para ver o status dos serviços do seu projeto, use o comando docker-compose ps. Ele funciona de forma semelhante ao docker ps que você já conhece, mas filtra a saída para mostrar apenas os contêineres associados ao seu arquivo docker-compose.yml.
docker-compose logs
Este é um dos comandos mais importantes para a depuração. Ele permite visualizar os logs de seus serviços.
docker-compose logs: Mostra uma captura dos logs de todos os serviços.docker-compose logs -f: Segue os logs em tempo real (-fde follow). Isso é extremamente útil para ver o que está acontecendo enquanto você interage com sua aplicação.docker-compose logs <nome_do_servico>: Mostra os logs de um serviço específico. Por exemplo,docker-compose logs webapi.

O artigo a seguir, focado em uma aplicação .NET, demonstra esses comandos em um fluxo de trabalho típico.
Building a Multi-Container .NET App Using Docker Desktop
Este artigo, "Building a Multi-Container .NET App Using Docker Desktop", mostra um exemplo prático de como iniciar e verificar uma aplicação .NET com Docker Compose.
Leia as seções "Start the application" e "Verify application". Foque nos comandos docker-compose up -d, docker-compose ps e docker-compose logs. Observe como eles são usados em sequência para iniciar a aplicação e depois verificar seu estado e saída.
Parando e Removendo a Aplicação: stop vs. down
Tão importante quanto iniciar sua aplicação é saber como pará-la corretamente. O Docker Compose oferece duas maneiras principais de fazer isso: stop e down. A diferença entre elas é crucial e está diretamente relacionada ao seu desejo de entender "como as coisas funcionam".
docker-compose stop
Este comando para os contêineres em execução, mas não os remove. Eles permanecem no seu sistema em um estado "parado".
- Vantagem: É rápido. Como o contêiner ainda existe, você pode reiniciá-lo rapidamente com
docker-compose start. O estado do sistema de arquivos do contêiner (excluindo o que está em volumes) é preservado. - Uso: Ideal para pausas temporárias no desenvolvimento. Por exemplo, se você precisa liberar uma porta ou recursos do sistema por um momento, mas planeja retomar o trabalho em breve.
docker-compose down
Este comando vai um passo além: ele para os contêineres e depois os remove, juntamente com a rede criada pelo Compose.
- Vantagem: Limpeza completa. Garante que você comece do zero na próxima vez que executar
docker-compose up, o que é ótimo para evitar problemas com estados antigos. - Importante: Por padrão,
docker-compose downnão remove volumes nomeados. Isso é uma medida de segurança para proteger seus dados (como os de um banco de dados). Se você quiser remover também os volumes, deve usar a flag-v:docker-compose down -v.
A imagem a seguir do ciclo de vida de um contêiner ajuda a visualizar essa diferença. O comando stop move o contêiner para o estado Stopped, de onde ele pode ser iniciado (start) novamente. O comando down efetivamente executa um stop seguido por um remove, levando o contêiner ao estado Deleted.

Para aprofundar a compreensão sobre quando usar cada comando, o vídeo e o artigo a seguir são excelentes.
Ultimate Docker Compose Tutorial
Para ver a diferença entre down e stop em ação, assista a este segmento do vídeo "Ultimate Docker Compose Tutorial".
Assista do timestamp 23:11 a 26:43. A primeira parte (até 25:10) demonstra o docker-compose down e como ele remove contêineres e redes. A segunda parte (a partir de 25:10) explica e demonstra os comandos stop e start, mostrando como eles preservam o estado do contêiner.
Este artigo, "Docker compose stop VS down", é inteiramente dedicado a explicar as nuances entre os dois comandos, com exemplos práticos de quando cada um é apropriado.
Leia as seções "Stop, down, what does it do?", as subseções "Down" e "Stop", e a "Conclusion". O artigo fornece uma definição clara e um resumo das melhores práticas de uso para cada comando.
Teste seu entendimento!
Imagine que você está desenvolvendo uma aplicação com uma API e um banco de dados PostgreSQL, ambos gerenciados pelo Docker Compose. Você passou a tarde inserindo dados de teste no banco de dados através da sua API. Agora, é o fim do dia e você precisa desligar os contêineres para liberar recursos no seu computador. Você pretende continuar o trabalho amanhã com os mesmos dados de teste.
Qual comando você deve usar para desligar a aplicação: docker-compose stop ou docker-compose down? Por quê? O que aconteceria se você usasse o outro comando (assumindo que o volume do banco de dados é um volume nomeado)?
Show answer
O comando correto a ser usado é docker-compose stop.
Por quê?docker-compose stop apenas para os contêineres, mas não os remove. O volume nomeado (postgres-data, por exemplo) permanece intacto e associado ao contêiner parado do banco de dados. No dia seguinte, ao executar docker-compose start, o mesmo contêiner será reiniciado com o mesmo volume, e todos os seus dados de teste estarão lá.
O que aconteceria se você usasse docker-compose down?
O comando docker-compose down pararia e removeria os contêineres da API e do banco de dados. Como o volume é um volume nomeado, os dados em si não seriam perdidos (a menos que você usasse a flag -v). No entanto, na próxima vez que você executasse docker-compose up, um novo contêiner de banco de dados seria criado. Embora ele se anexe ao volume existente, dependendo da imagem do banco de dados, pode haver processos de inicialização que não ocorrem da mesma forma ou pode haver uma desconexão que exige uma reconfiguração. O uso de stop e start é o fluxo mais seguro e direto para simplesmente pausar e retomar o trabalho.
Conclusão
Parabéns! Você agora domina os comandos fundamentais para gerenciar o ciclo de vida de suas aplicações com Docker Compose. Essa é uma habilidade essencial para o desenvolvimento e a depuração eficientes em um ambiente conteinerizado.
Principais Pontos:
docker-compose up -d: Inicia sua aplicação em segundo plano, criando redes, volumes e contêineres conforme definido nodocker-compose.yml.docker-compose ps: Fornece uma visão rápida do estado dos serviços da sua aplicação.docker-compose logs [-f] [<serviço>]: Sua principal ferramenta para depuração, permitindo inspecionar a saída dos seus serviços.docker-compose stop: Para os contêineres temporariamente sem removê-los. Ideal para pausas curtas. Usedocker-compose startpara retomá-los.docker-compose down: Para e remove os contêineres e redes. Use para uma limpeza completa ou quando as alterações de configuração exigirem a recriação dos contêineres. Lembre-se da flag-vpara remover também os volumes de dados.
Na próxima lição, vamos nos aprofundar na configuração dos nossos serviços. Aprenderemos como fornecer variáveis de ambiente para os contêineres usando a chave environment e arquivos .env, um passo crucial para construir aplicações flexíveis e seguras.