Docker — Configurando CPU e Memória para os Containers

Emerson Silva
3 min readJul 15, 2019

--

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/

--

--

Emerson Silva
Emerson Silva

Written by Emerson Silva

Apaixonado por tecnologia, livros e café

Responses (2)