29.04.2025

Como trabalhar com recursos de contêiner do Docker?

Os contêineres Docker permitem executar aplicações em um ambiente isolado, mas sem um gerenciamento adequado de recursos, um único contêiner pode consumir CPU, memória ou outros recursos do host em excesso. Neste artigo, vamos abordar como limitar e controlar o uso de recursos pelos contêineres para garantir um funcionamento estável e previsível dos seus serviços.

Por que é importante limitar os recursos?

Por padrão, um contêiner pode utilizar todos os recursos disponíveis do host. Isso pode causar:

O Docker permite definir limites para CPU, memória, disco e I/O, evitando esses problemas.

1. Limite de memória

Exemplo de comando:

docker run -m 512m --memory-swap 1g nginx

Explicação:

Importante: Um contêiner que exceder o limite de memória será encerrado com erro de “Out of Memory”.

2. Limite de CPU

Exemplo de comando:

docker run --cpus="1.5" nginx

Explicação:

Método alternativo:

docker run --cpu-shares=512 nginx

3. Limite de I/O (operações de disco)

Exemplo de comando:

docker run --device-read-bps /dev/sda:1mb nginx

Explicação:

Outras opções disponíveis:

 

 

4. Limite de processos (PIDs)

Essa opção ajuda a prevenir fork bombs e sobrecarga de processos:

docker run --pids-limit=100 nginx

O contêiner não poderá criar mais de 100 processos.

5. Usando limites no docker-compose.yml

É possível definir limites de recursos no docker-compose usando a diretiva deploy.resources.limits, por exemplo:

version: "3.9"
services:
web:
image: nginx
deploy:
resources:
limits:
cpus: '0.50'
memory: 256M
Importante: A seção deploy funciona apenas com Docker Swarm. Para ambientes de desenvolvimento local, utilize opções como mem_limit, cpus, etc.

6. Monitoramento de recursos

Ferramentas úteis para monitorar o uso de recursos dos contêineres incluem:

Conclusão

Limitar os recursos de contêineres é essencial para construir uma infraestrutura confiável e escalável. Utilize esses mecanismos para garantir que os contêineres não interfiram entre si e não sobrecarreguem o host. Isso é especialmente importante em ambientes de produção, onde previsibilidade e isolamento são fundamentais para a operação estável dos serviços.