Docker — Configurando CPU e Memória para os Containers
Olá pessoal, hoje vou apresentar como configurar o consumo de CPU e memória dos containers de acordo com a característica da aplicação.
Imagine que seja necessário subir dois containers para um novo projeto, e essa duas aplicação são, um web servers e outro é um DB PostgreSQL.
São dois serviços diferentes e na maioria dos casos possuem características de consumo de memória e CPU distintos. Especificar a quantidade de recursos que ele irá utilizar garante que os containers não subam sem um controle, evitando que impacte o host onde está sendo executado.
A limitação desses recursos, visam um melhor aproveitamento dos recursos da máquina.
Então, vamos lá!!!
Configurando Memória
Primeiro vamos subir um container para que possamos realizar nossos testes:
[root@instance-estudos emerson]# docker run -ti — name teste debian
Nosso container já está rodando, agora vamos visualizar a quantidade de memória que está configurada para ele:
[root@instance-estudos emerson]# docker inspect teste | grep -i mem
“Memory”: 0,
“CpusetMems”: “”,
“KernelMemory”: 0,
“MemoryReservation”: 0,
“MemorySwap”: 0,
“MemorySwappiness”: null,
Como podemos observar, os campos estão zerados, portanto não existe nenhum limite configurado para memória.
Agora vamos definir um limte para a memória subindo um novo container. Para definir a quantidade de memória, usamos o parâmetro “-m”
[root@instance-estudos emerson]# docker run -it -m 512M — name app01 debian
Vamos inspecionar o limite de mémoria do container:
[root@instance-estudos emerson] # docker inspect app01 | grep -i mem
“Memory”: 536870912,
“CpusetMems”: “”,
“KernelMemory”: 0,
“MemoryReservation”: 0,
“MemorySwap”: 1073741824,
“MemorySwappiness”: null,
O nosso container com o nome app01 está com o limte para memória definido. Ela é exibida em bytes.
Configurando CPU
Para subir um container com um limite de CPU, vamos usar o parâmetro “ — cpus”. Com ele é possivel determinar a quantidade de CPU’s que serão configuradas no containers.
[root@instance-estudos emerson] # docker run -it —- cpus=0.5 —- name app02 debian
Vamos visualizar o limite definido para CPU do nosso container app02:
[root@instance-estudos emerson] # docker inspect app02 | grep -i cpu
“CpuShares”: 0,
“NanoCpus”: 500000000,
“CpuPeriod”: 0,
“CpuQuota”: 0,
“CpuRealtimePeriod”: 0,
“CpuRealtimeRuntime”: 0,
“CpusetCpus”: “”,
“CpusetMems”: “”,
“CpuCount”: 0,
“CpuPercent”: 0,
No campo “NanoCpus” temos a quantidade de CPU’s definidas.
Alterando memória e CPU de um container em execução
O Docker oferece o comando “docker update” que nos permite a alteração de configuração de Memoria, CPU e I/O do container em execução :)
Vamos subir um container já com os limtes de CPU e memória definidos para o nosso exemplo:
[root@instance-estudos emerson] # docker run -it — cpus=4 -m 512M — name app_novo01 nginx
Feito! nosso container com limites de memória já está rodando. Agora vamos visualizar o que definimos na criação dele referente a CPU e memória:
[root@instance-estudos emerson] # docker inspect app_novo01 | grep -i cpu
“CpuShares”: 0,
“NanoCpus”: 400000000,
“CpuPeriod”: 0,
“CpuQuota”: 0,
“CpuRealtimePeriod”: 0,
“CpuRealtimeRuntime”: 0,
“CpusetCpus”: “”,
“CpusetMems”: “”,
“CpuCount”: 0,
“CpuPercent”: 0,[root@instance-estudos emerson] # docker inspect app_novo01 | grep -i mem
“Memory”: 536870912,
“CpusetMems”: “”,
“KernelMemory”: 0,
“MemoryReservation”: 0,
“MemorySwap”: 1073741824,
“MemorySwappiness”: null,
Agora, vamos alterar os valores definidos com o comando update. Para mais informações referente a esse comando execute “docker update — help”.
Alterações realizadas:
[root@instance-estudos emerson] # docker container update -m 256m — cpus=1 app_novo01
Vamos visualizar as alterações feitas:
[root@instance-estudos emerson] # docker inspect app_novo01 | grep -i cpu
“CpuShares”: 0,
“NanoCpus”: 1000000000,
“CpuPeriod”: 0,
“CpuQuota”: 0,
“CpuRealtimePeriod”: 0,
“CpuRealtimeRuntime”: 0,
“CpusetCpus”: “”,
“CpusetMems”: “”,
“CpuCount”: 0,
“CpuPercent”: 0,
Observe que agora o campo “NanoCpus” está assinalando que o nosso container tem agora uma cpu.
[root@instance-estudos emerson] # docker inspect app_novo01 | grep -i mem
“Memory”: 268435456,
“CpusetMems”: “”,
“KernelMemory”: 0,
“MemoryReservation”: 0,
“MemorySwap”: 1073741824,
“MemorySwappiness”: null,
No campo memória, também ocorreu a atualização com sucesso, nosso container agora está com 256 MB de memória.
Alterações feitas com sucesso!!!
Para mais informações referente a esse comando execute “docker update — help”.
Por hoje é só pessoal, com esses comandos conseguimos configurar nossos containers de acordo com a necessidade da aplicação.
Forte abraço
FONTE:
https://docs.docker.com/config/containers/resource_constraints/