DEV Community

Natália Granato
Natália Granato

Posted on

1

Parâmetros avançados no Docker Compose

O que é o Docker Compose?

O Docker Compose é uma ferramenta exclusiva para a plataforma Docker, projetada especificamente para gerenciar containers. Ele não é compatível com outras plataformas de containers.

Icone do Docker Compose

Para ilustrar as funcionalidades do Docker Compose, vamos analisar o seguinte exemplo de um arquivo docker-compose.yml:

version: '3.9'

services:
  giropops-senhas:
    build: .
    ports:
      - "5000:5000"
    networks:
      - giropops-senhas
    environment:
      - REDIS_HOST=redis
    volumes:
      - natalia:/granato
    deploy:
      replicas: 1
      resources:
        reservations:
          cpus: '0.25'
          memory: 128M
        limits:
          cpus: '0.50'
          memory: 256M

  redis:
    image: redis
    command: redis-server --appendonly yes
    networks:
      - giropops-senhas
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5000"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 10s
networks:
  giropops-senhas:
    driver: bridge

volumes:
  natalia:
Enter fullscreen mode Exit fullscreen mode

Neste exemplo, temos dois serviços definidos: giropops-senhas e redis. O serviço giropops-senhas é construído a partir do Dockerfile no diretório atual (indicado pelo ponto), expõe a porta 5000 e usa a rede giropops-senhas. Além disso, ele define uma variável de ambiente REDIS_HOST e utiliza um volume chamado natalia.

Já o serviço redis utiliza a imagem oficial do Redis do Docker Hub, executa o servidor Redis em modo append-only e também usa a rede giropops-senhas. Além disso, ele possui um healthcheck que verifica a saúde do serviço a cada 30 segundos.

A rede giropops-senhas é definida como uma rede do tipo bridge, e o volume natalia é criado sem qualquer configuração adicional.

Este exemplo demonstra a flexibilidade e o poder do Docker Compose na definição e gerenciamento de múltiplos containers e suas interações.

Alguns comandos para facilitar o seu dia a dia

O Docker Compose é uma ferramenta que permite definir e gerenciar aplicativos multi-container. Ele utiliza um arquivo de configuração chamado docker-compose.yml para especificar os serviços, redes e volumes necessários para a execução desses contêineres.

Aqui estão algumas das instruções que você mencionou e o que elas fazem:

  • docker compose up -d: Inicia os serviços definidos no arquivo docker-compose.yml em segundo plano (-d). Isso cria e inicia os contêineres conforme as configurações especificadas.
  • docker compose ps: Exibe o status dos serviços definidos no arquivo docker-compose.yml. Mostra quais contêineres estão em execução, parados ou com erro.
  • docker compose down: Encerra todos os serviços e contêineres definidos no arquivo docker-compose.yml. Isso também remove as redes e volumes associados.
  • docker compose pause: Pausa a execução dos serviços e contêineres definidos no arquivo docker-compose.yml. Isso pode ser útil para depurar ou realizar manutenção.
  • docker compose unpause: Retoma a execução dos serviços e contêineres pausados.
  • docker compose logs -f: Exibe os logs dos serviços em tempo real (-f). Isso é útil para depurar problemas ou monitorar a saída dos contêineres.

Docker compose build, replicas e resources

Funcionalidade build

A funcionalidade build é utilizada no arquivo docker-compose.yml para construir a imagem de um serviço a partir de um Dockerfile localizado no diretório atual. Isso permite personalizar a imagem do serviço antes de executá-lo.

Exemplo:

services:
  giropops-senhas:
    build: .
Enter fullscreen mode Exit fullscreen mode

Neste exemplo, o serviço giropops-senhas está sendo construído a partir do Dockerfile localizado no diretório atual (.).

Funcionalidade replicas

A funcionalidade replicas define o número de réplicas de um serviço que serão criadas e executadas. Ela permite dimensionar horizontalmente os serviços, distribuindo a carga entre várias instâncias do mesmo serviço.

Exemplo:

```yaml
Enter fullscreen mode Exit fullscreen mode

services:
giropops-senhas:
...
deploy:
replicas: 3




Neste exemplo, o serviço `giropops-senhas` terá três réplicas em execução.

### Funcionalidade resources

A funcionalidade resources permite definir limites e reservas de recursos para um serviço. Isso inclui especificações de CPU e memória para garantir que os recursos sejam alocados de forma eficiente e equitativa entre os serviços.

Exemplo:



      ```yaml
services:
  giropops-senhas:
    ...
    deploy:
      resources:
        reservations:
          cpus: '0.25'
          memory: 128M
        limits:
          cpus: '0.50'
          memory: 256M
Enter fullscreen mode Exit fullscreen mode

Neste exemplo, o serviço giropops-senhas tem uma reserva de 0,25 CPUs e 128MB de memória por réplica, com um limite máximo de 0,50 CPUs e 256MB de memória por réplica.

Comandos úteis do Docker Compose

Essas funcionalidades fornecem flexibilidade e controle sobre a construção, replicação e alocação de recursos dos serviços definidos no arquivo docker-compose.yml.

  • docker compose -f docker-compose.yml up -d: Inicia os serviços definidos no arquivo docker-compose.yml em segundo plano (-d). Isso cria e inicia os contêineres conforme as configurações especificadas.

  • docker compose -f docker-compose.yml up -d --scale redis=3: Inicia os serviços definidos no arquivo docker-compose.yml em segundo plano (-d) e escala o serviço redis para 3 réplicas. Isso cria e inicia múltiplos contêineres do serviço redis.

  • docker compose -f docker-compose.yml build: Constrói as imagens dos serviços definidos no arquivo docker-compose.yml. Isso é útil quando você fez alterações nos Dockerfiles ou nas configurações dos serviços.

Esses comandos são úteis para gerenciar e monitorar os serviços definidos no arquivo docker-compose.yml de forma eficiente e eficaz.

Qual é a diferença entre Docker e Docker Compose?

  • Docker:

O Docker é uma plataforma de virtualização de contêineres que permite empacotar, distribuir e executar aplicativos em ambientes isolados chamados contêineres. Ele fornece uma maneira consistente de empacotar aplicativos, suas dependências e configurações em um único pacote. Cada contêiner é uma instância isolada de um aplicativo, com seu próprio sistema de arquivos, bibliotecas e recursos. O Docker usa imagens para criar contêineres. As imagens são como modelos que contêm todas as instruções para criar um contêiner. É amplamente utilizado para desenvolvimento, teste e implantação de aplicativos.

  • Docker Compose:

O Docker Compose é uma ferramenta que simplifica a orquestração de vários contêineres. Ele permite definir e gerenciar aplicativos multi-container usando um arquivo de configuração chamado docker-compose.yml. No arquivo docker-compose.yml, você pode especificar serviços, redes, volumes e outras configurações necessárias para seus contêineres. Com o Docker Compose, você pode iniciar, parar, escalar e gerenciar todos os contêineres de um aplicativo com um único comando. É útil para cenários em que você precisa executar vários contêineres juntos, como aplicativos que dependem de bancos de dados, cache, servidores web, etc.

Em resumo, o Docker é a base para criar e executar contêineres individuais, enquanto o Docker Compose é usado para definir e gerenciar aplicativos compostos por vários contêineres interconectados. Ambos são essenciais para o desenvolvimento e implantação eficiente de aplicativos baseados em contêineres. 🐳

Espero que essas informações sejam úteis para você! Se tiver mais dúvidas ou precisar de mais informações, não hesite em perguntar.

Image of Docusign

🛠️ Bring your solution into Docusign. Reach over 1.6M customers.

Docusign is now extensible. Overcome challenges with disconnected products and inaccessible data by bringing your solutions into Docusign and publishing to 1.6M customers in the App Center.

Learn more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs