Guia para Iniciantes na Instalação e Uso do Docker Compose

DockerBeginner
Pratique Agora

Introdução

Este guia para iniciantes irá guiá-lo pelo processo de instalação do Docker e do Docker Compose, e ensiná-lo a usar o Compose para definir, implantar e gerenciar suas aplicações. Você aprenderá sobre os recursos-chave e as opções de configuração disponíveis no Docker Compose, bem como as melhores práticas para escalar e balancear a carga de suas aplicações Compose.

O que é o Docker Compose?

O Docker Compose é uma ferramenta que permite definir e executar aplicações Docker multi-contêiner. Simplifica o processo de gerenciamento e orquestração de múltiplos contêineres Docker, fornecendo uma maneira declarativa de definir os serviços, redes e volumes da aplicação.

Com o Docker Compose, você pode:

Definir os Serviços da Sua Aplicação

Você pode definir os diferentes serviços que compõem sua aplicação, como um servidor web, um banco de dados e uma fila de mensagens, em um único arquivo YAML. Este arquivo, chamado de "arquivo Compose", descreve a configuração de cada serviço, incluindo a imagem Docker a ser usada, as portas de rede a serem expostas e quaisquer variáveis de ambiente ou volumes a serem montados.

Gerenciar o Ciclo de Vida da Sua Aplicação

O Docker Compose fornece comandos para iniciar, parar e gerenciar o ciclo de vida de toda a sua aplicação. Você pode usar docker-compose up para criar e iniciar todos os serviços definidos em seu arquivo Compose, e docker-compose down para pará-los e removê-los.

Simplificar o Desenvolvimento e os Testes

O Docker Compose é particularmente útil durante as fases de desenvolvimento e testes da sua aplicação. Permite criar facilmente um ambiente de desenvolvimento completo com todos os serviços necessários, facilitando a verificação da sua aplicação de forma consistente e repetível.

graph TD A[Desenvolvedor] --> B[Docker Compose] B --> C[Servidor Web] B --> D[Banco de Dados] B --> E[Fila de Mensagens]

Usando o Docker Compose, você pode garantir que sua aplicação funcione da mesma forma em diferentes ambientes, desde o desenvolvimento até a produção, reduzindo o risco de problemas específicos do ambiente.

Serviço Imagem Portas Ambiente
Servidor Web nginx:latest 80:80 -
Banco de Dados mysql:5.7 3306:3306 MYSQL_ROOT_PASSWORD=password
Fila de Mensagens rabbitmq:3-management 5672:5672, 15672:15672 -

Em resumo, o Docker Compose é uma ferramenta poderosa que simplifica o gerenciamento e a implantação de aplicações Docker multi-contêiner, tornando mais fácil desenvolver, testar e executar aplicações complexas de forma consistente e repetível.

Instalando o Docker e o Docker Compose

Antes de começar a usar o Docker Compose, você precisará ter o Docker e o Docker Compose instalados em seu sistema. Nesta seção, guiaremos você pelo processo de instalação em um sistema Ubuntu 22.04.

Instalando o Docker

  1. Atualize o índice de pacotes:
sudo apt-get update
  1. Instale os pacotes necessários para permitir que o APT utilize um repositório via HTTPS:
sudo apt-get install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release
  1. Adicione a chave GPG oficial do Docker:
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
  1. Configure o repositório do Docker:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
  1. Instale o Docker Engine:
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
  1. Verifique a instalação executando o seguinte comando:
sudo docker run hello-world

Instalando o Docker Compose

O Docker Compose é instalado como parte do processo de instalação do Docker Engine no Ubuntu 22.04. No entanto, se você precisar instalar uma versão específica do Docker Compose, siga estas etapas:

  1. Baixe a versão mais recente do Docker Compose:
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  1. Aplique permissões executáveis ao binário do Docker Compose:
sudo chmod +x /usr/local/bin/docker-compose
  1. Verifique a instalação executando o seguinte comando:
docker-compose --version

Agora que você tem o Docker e o Docker Compose instalados, está pronto para começar a definir e implantar suas aplicações multi-contêiner usando o Docker Compose.

Definindo Serviços em um Arquivo Compose

O coração de uma aplicação Docker Compose é o arquivo Compose, escrito em formato YAML. Nesse arquivo, você define os diferentes serviços que compõem sua aplicação, juntamente com suas configurações.

Definição de Serviço

Cada serviço em seu arquivo Compose é definido como uma chave de nível superior, como web, db ou redis. Sob cada serviço, você pode especificar diversas opções de configuração, como a imagem Docker a ser usada, as portas de rede a serem expostas, variáveis de ambiente e muito mais.

Aqui está um exemplo de um arquivo Compose simples com três serviços:

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

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - db-data:/var/lib/mysql

  redis:
    image: redis:latest
    ports:
      - 6379:6379

volumes:
  db-data:

Neste exemplo, temos três serviços:

  1. web: Executa a versão mais recente do servidor web Nginx, mapeia a porta 80 no host para a porta 80 no contêiner e monta o diretório ./app no host para o diretório /usr/share/nginx/html no contêiner.

  2. db: Executa o banco de dados MySQL 5.7, define a variável de ambiente MYSQL_ROOT_PASSWORD e monta um volume nomeado db-data para armazenar os dados do banco de dados.

  3. redis: Executa a versão mais recente do armazenamento de dados em memória Redis, mapeando a porta 6379 no host para a porta 6379 no contêiner.

Volumes e Redes

Além de definir os serviços, o arquivo Compose também permite definir volumes e redes compartilhados que podem ser usados pelos serviços.

No exemplo acima, definimos um volume nomeado db-data para armazenar os dados do banco de dados MySQL. Este volume pode ser compartilhado entre vários serviços, garantindo que os dados persistam mesmo que os contêineres sejam interrompidos ou recriados.

Você também pode definir redes personalizadas para controlar a conectividade entre seus serviços. Isso é útil quando você deseja isolar certos serviços ou criar uma topologia de rede mais complexa.

Usando um arquivo Compose, você pode definir e gerenciar facilmente os diferentes componentes de sua aplicação, tornando mais fácil implantar, escalar e manter suas aplicações Docker multi-contêiner.

Implantando e Gerenciando Aplicações Compose

Depois de definir seus serviços em um arquivo Compose, você pode usar os comandos Docker Compose para implantar e gerenciar sua aplicação.

Implantando a Aplicação

Para implantar sua aplicação, navegue até o diretório contendo seu arquivo Compose e execute o seguinte comando:

docker-compose up -d

O sinalizador -d executa os contêineres em modo desacoplado, o que significa que eles serão executados em segundo plano.

O Docker Compose lerá o arquivo Compose, criará a rede e os volumes Docker necessários e iniciará todos os serviços definidos.

Gerenciando o Ciclo de Vida da Aplicação

Após implantar sua aplicação, você pode usar os seguintes comandos Docker Compose para gerenciar seu ciclo de vida:

  • docker-compose stop: Para interromper todos os serviços em execução.
  • docker-compose start: Para iniciar os serviços interrompidos.
  • docker-compose restart: Para reiniciar todos os serviços em execução.
  • docker-compose down: Para interromper e remover todos os serviços, redes e volumes.

Por exemplo, para interromper a aplicação, você pode executar:

docker-compose stop

E para iniciá-la novamente, você pode executar:

docker-compose start

Escalando Serviços

O Docker Compose facilita a escala de seus serviços para cima ou para baixo. Para escalar um serviço específico, você pode usar o comando scale:

docker-compose scale web=3 db=2

Isso escalará o serviço web para 3 instâncias e o serviço db para 2 instâncias.

Você também pode usar o comando up com o sinalizador --scale para escalar serviços ao implantar a aplicação:

docker-compose up --scale web=3 --scale db=2 -d

Visualizando Logs

Para visualizar os logs de sua aplicação, você pode usar o comando logs:

docker-compose logs

Isso exibirá os logs de todos os serviços. Você também pode visualizar os logs de um serviço específico especificando o nome do serviço:

docker-compose logs web

Usando esses comandos Docker Compose, você pode implantar, gerenciar e escalar facilmente suas aplicações multi-contêiner, tornando mais fácil desenvolver, testar e executar aplicações complexas de forma consistente e repetível.

Recursos e Configuração Avançada do Compose

Embora a estrutura básica do arquivo Compose e os comandos sejam poderosos, o Docker Compose também oferece uma série de recursos e opções de configuração avançadas para ajudá-lo a construir aplicações mais complexas e robustas.

Variáveis de Ambiente e Segredos

Você pode usar variáveis de ambiente para passar configurações para seus serviços. O Docker Compose suporta variáveis de ambiente em tempo de compilação e em tempo de execução, que podem ser definidas no nível do serviço ou global.

Além disso, você pode usar Segredos Docker para armazenar informações confidenciais, como senhas de banco de dados ou chaves API, de forma segura e torná-las disponíveis para seus serviços.

version: "3"
services:
  web:
    image: myapp/web
    environment:
      - DATABASE_URL=mysql://root:${DB_PASSWORD}@db/myapp
    secrets:
      - db-password

secrets:
  db-password:
    file: ./db-password.txt

Gerenciamento de Dependências e Verificações de Saúde

O Docker Compose permite definir dependências de serviço, garantindo que os serviços sejam iniciados na ordem correta e que os serviços dependentes estejam saudáveis antes de iniciar outros serviços.

Você também pode configurar verificações de saúde para seus serviços, que permitem que o Compose monitore a saúde de seus contêineres e tome as ações apropriadas, como reiniciar contêineres não saudáveis.

version: "3"
services:
  web:
    image: myapp/web
    depends_on:
      db:
        condition: service_healthy
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost"]
      interval: 30s
      timeout: 10s
      retries: 5

  db:
    image: mysql:5.7
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 30s
      timeout: 10s
      retries: 5

Rede e Descoberta de Serviços

O Docker Compose cria automaticamente uma rede padrão para sua aplicação, mas você também pode definir redes personalizadas e controlar a configuração de rede para seus serviços.

Além disso, o Compose fornece descoberta de serviço embutida, permitindo que seus serviços encontrem e se comuniquem uns com os outros usando os nomes de serviço definidos no arquivo Compose.

version: "3"
services:
  web:
    image: myapp/web
    networks:
      - frontend
    environment:
      - DB_HOST=db

  db:
    image: mysql:5.7
    networks:
      - backend

networks:
  frontend:
  backend:

Ao aproveitar esses recursos avançados, você pode construir aplicações Docker Compose mais complexas, resilientes e escaláveis que atendam às necessidades da sua organização.

Escalonamento e Balanceamento de Carga com Compose

Um dos principais benefícios do uso do Docker Compose é a capacidade de escalonar facilmente seus serviços e implementar balanceamento de carga. Nesta seção, exploraremos como alcançar essas capacidades.

Escalonamento de Serviços

Como mencionado anteriormente, você pode escalonar seus serviços para cima ou para baixo usando o comando scale. Isso é particularmente útil quando você precisa lidar com tráfego ou demandas de recursos aumentados.

Por exemplo, digamos que você tenha um serviço web definido em seu arquivo Compose:

version: "3"
services:
  web:
    image: myapp/web
    ports:
      - 80:80

Para escalonar o serviço web para 3 instâncias, você pode executar o seguinte comando:

docker-compose scale web=3

Isso criará duas instâncias adicionais do serviço web, permitindo que você distribua a carga entre vários contêineres.

Balanceamento de Carga

O Docker Compose também fornece recursos embutidos de balanceamento de carga. Quando você define várias instâncias de um serviço, o Compose balanceará automaticamente as solicitações de entrada entre os contêineres disponíveis.

version: "3"
services:
  web:
    image: myapp/web
    ports:
      - 80:80
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure

Neste exemplo, definimos o serviço web com 3 réplicas. Quando você executa docker-compose up, o Compose criará três instâncias do serviço web e balanceará as solicitações de entrada entre elas.

Você também pode configurar opções adicionais de balanceamento de carga, como a política de reinicialização, para garantir que sua aplicação permaneça altamente disponível.

graph TD A[Cliente] --> B[Balanceador de Carga] B --> C[Serviço Web 1] B --> D[Serviço Web 2] B --> E[Serviço Web 3]

Ao aproveitar os recursos de escalonamento e balanceamento de carga do Docker Compose, você pode construir aplicações altamente escaláveis e resilientes que podem lidar com tráfego e demandas de recursos aumentados.

Solução de Problemas e Melhores Práticas

Assim como qualquer tecnologia, você pode encontrar problemas ou desafios ao trabalhar com o Docker Compose. Nesta seção, abordaremos algumas etapas comuns de solução de problemas e melhores práticas para ajudá-lo a gerenciar eficazmente suas aplicações baseadas em Compose.

Solução de Problemas

  1. Verificando Logs: Se você encontrar problemas com sua aplicação Compose, o primeiro passo é verificar os logs usando o comando docker-compose logs. Isso ajudará você a identificar quaisquer erros ou problemas com seus serviços.

  2. Inspecionando Contêineres: Você pode usar o comando docker-compose ps para listar os contêineres em execução e seus status. Isso pode ajudá-lo a identificar quaisquer contêineres que não estejam funcionando como esperado.

  3. Depurando Serviços: Se um serviço específico não estiver se comportando como esperado, você pode usar o comando docker-compose exec para acessar o contêiner e depurar o problema. Por exemplo, docker-compose exec web bash fornecerá um shell dentro do contêiner do serviço web.

  4. Verificando a Configuração: Verifique duas vezes seu arquivo Compose para garantir que as definições de serviço, configurações de rede e configurações de volume estejam corretas. Você pode usar o comando docker-compose config para validar a sintaxe e a estrutura do seu arquivo Compose.

Melhores Práticas

  1. Usando Variáveis de Ambiente: Utilize variáveis de ambiente para armazenar configurações, como credenciais de banco de dados ou chaves API. Isso facilita a gestão de informações confidenciais e a adaptação da sua aplicação a diferentes ambientes.

  2. Separação de Preocupações: Considere separar sua aplicação em serviços menores e mais gerenciáveis. Isso facilitará o escalonamento, a manutenção e os testes de componentes individuais da sua aplicação.

  3. Implementando Verificações de Saúde: Configure verificações de saúde para seus serviços para garantir que os contêineres estejam funcionando corretamente. Isso ajudará o Compose a monitorar a saúde da sua aplicação e tomar as ações apropriadas, como reiniciar contêineres não saudáveis.

  4. Controle de Versão do Arquivo Compose: Armazene seu arquivo Compose em um sistema de controle de versão, como o Git. Isso ajudará você a rastrear alterações, colaborar com membros da equipe e garantir implantações consistentes em diferentes ambientes.

  5. Uso Consciente de Redes: Utilize redes personalizadas para isolar e controlar a conectividade entre seus serviços. Isso pode melhorar a segurança e o desempenho da sua aplicação.

  6. Aproveitando o LabEx: Considere usar o LabEx, uma plataforma poderosa que fornece recursos e ferramentas adicionais para aprimorar sua experiência com o Docker Compose. O LabEx pode ajudá-lo a otimizar a implantação, monitoramento e gerenciamento de suas aplicações baseadas em Compose.

Seguindo essas etapas de solução de problemas e melhores práticas, você pode gerenciar e manter eficazmente suas aplicações Docker Compose, garantindo que elas funcionem sem problemas e de forma confiável em vários ambientes.

Resumo

Ao final deste tutorial, você terá um bom entendimento de como instalar e usar o Docker Compose para otimizar a implantação e gerenciamento de sua aplicação. Você será capaz de definir seus serviços, implantar e gerenciar suas aplicações Compose e solucionar quaisquer problemas que possam surgir. Se você é novo no Docker ou está procurando aprimorar suas habilidades com Compose, este guia fornecerá o conhecimento e as ferramentas necessárias para começar a usar o Docker Compose.