CodeGym /Cursos /Docker SELF /Gerenciamento de recursos de contêiner

Gerenciamento de recursos de contêiner

Docker SELF
Nível 12 , Lição 0
Disponível

6.1 Por que limitar os recursos dos containers

O Docker manda muito bem na hora de gerenciar os recursos dos containers, permitindo distribuir a potência do sistema de forma eficiente e evitar conflitos desnecessários entre eles. Isso é especialmente importante pra garantir que um app em um container não "acabe" com todos os recursos, deixando os outros serviços lentos. Limitar recursos como CPU e memória ajuda a evitar sobrecargas, manter a estabilidade do sistema e garantir que todos os apps funcionem de forma previsível. Nessa aula, vamos aprender como definir limites de uso de CPU e memória pra que o sistema continue produtivo mesmo em situações de alta carga.

Por que é importante limitar os recursos dos containers:

  1. estabilidade: evitar que um container consuma todos os recursos, fazendo com que outros containers ou até o próprio sistema fiquem lentos.
  2. eficiência: distribuir melhor os recursos entre os containers pra usar a potência do sistema de forma mais produtiva.
  3. proteção: limitar os recursos ajuda a prevenir problemas com containers que podem, acidentalmente ou intencionalmente, sobrecarregar o sistema.

6.2 Limites no uso de CPU

Docker oferece várias maneiras de limitar o uso de CPU pelos containers.

Importante! Aqui, CPU significa um núcleo do processador, não o processador inteiro. Um processador quad-core terá 4 CPU.

1. Limite de compartilhamento de CPU (--cpu-shares)

O parâmetro --cpu-shares define o valor relativo de prioridade de uso de CPU pelo container. O valor padrão é 1024. Isso é um valor relativo, o que significa que um container com --cpu-shares=512 terá metade da prioridade de um container com --cpu-shares=1024.

Exemplo de uso:

Neste exemplo, o container high_priority_container terá uma prioridade maior na distribuição de CPU em comparação com o low_priority_container.

Terminal

docker run -d --name low_priority_container --cpu-shares=512 nginx

docker run -d --name high_priority_container --cpu-shares=2048 nginx

2. Limite da quantidade de CPU (--cpus)

O parâmetro --cpus define a quantidade exata de CPU disponível para o container. Por exemplo, o valor 1.5 significa que o container pode usar 1.5 CPU.

Exemplo de uso:

Este exemplo limita o container limited_cpu_container a usar no máximo 1.5 CPU.

Terminal


        docker run -d --name limited_cpu_container --cpus="1.5" nginx
    

3. Limite de uso de tempo de CPU (--cpu-quota e --cpu-period)

Os parâmetros --cpu-quota e --cpu-period permitem configurar de forma mais precisa o uso de CPU. --cpu-period define o intervalo de tempo em microssegundos (padrão 100000), e --cpu-quota define o tempo máximo permitido de uso de CPU para esse período.

Exemplo de uso:

Neste exemplo, o container custom_cpu_quota_container usará no máximo 50% de CPU (25000/50000).

Terminal


        docker run -d --name custom_cpu_quota_container --cpu-period=50000 --cpu-quota=25000 nginx

6.3 Limites de uso de memória

Limitar a memória ajuda a controlar quanto de memória RAM um container pode usar. Isso ajuda a evitar situações em que um único container começa a consumir toda a memória, afetando outros processos e containers.

1. Limitação do volume máximo de memória (--memory)

O parâmetro --memory define um limite superior de memória que o container pode usar. Se o container ultrapassar esse limite, o sistema vai finalizá-lo.

Exemplo de uso:

Este exemplo limita o container limited_memory_container ao uso de no máximo 512 MB de memória RAM.

Terminal

docker run -d --name limited_memory_container --memory="512m" nginx

2. Limitação do volume de swap de memória (--memory-swap)

O parâmetro --memory-swap define um limite total para o uso de memória RAM e swap. Por exemplo, se --memory estiver configurado em 512 MB e --memory-swap em 1 GB, o container pode usar até 512 MB de RAM e mais 512 MB de swap.

Exemplo de uso:

Este exemplo limita o container swap_limited_container ao uso de 512 MB de RAM e 512 MB de swap.

Terminal

docker run -d --name swap_limited_container --memory="512m" --memory-swap="1g" nginx

3. Limitação de uso de memória sem swap (--memory-swap=-1)

Para proibir o uso de swap, configure o parâmetro --memory-swap com o valor -1.

Exemplo de uso:

Este exemplo limita o container no_swap_container a 512 MB de memória RAM sem a possibilidade de usar swap.

Terminal

docker run -d --name no_swap_container --memory="512m" --memory-swap="-1" nginx

6.4 Cenários práticos

1. Executando tarefas de alta e baixa prioridade

Se em um servidor estão sendo executadas tanto tarefas críticas quanto secundárias, o parâmetro --cpu-shares ajuda a distribuir os recursos de forma que as tarefas críticas recebam mais CPU.

Terminal

docker run -d --name high_priority_task --cpu-shares=2048 my_high_priority_image
docker run -d --name low_priority_task --cpu-shares=512 my_low_priority_image

2. Limitação de recursos para testes

Para testar aplicativos em condições de recursos limitados, você pode definir limites rígidos para CPU e memória. Isso ajuda a entender como o aplicativo vai se comportar nessas condições.

Terminal

docker run -d --name test_container --cpus="1" --memory="256m" my_test_image

3. Proteção contra esgotamento de recursos

Para evitar uma situação onde um container utilize todos os recursos disponíveis do sistema, você pode configurar limites de memória e CPU para todos os containers.

Terminal

docker run -d --name isolated_container --cpus="2" --memory="1g" my_app_image
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION