Como usar o comando docker container update para modificar recursos do container

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como modificar dinamicamente os limites de recursos e a política de reinício de um container Docker em execução usando o comando docker container update. Você começará criando um container com limites iniciais de CPU e memória.

Após a criação do container, você explorará como atualizar as CPU shares (compartilhamentos de CPU) e o limite de memória do container para ajustar sua alocação de recursos. Finalmente, você aprenderá como modificar a política de reinício do container, controlando como o Docker lida com as reinicializações do container em diferentes cenários. Esta experiência prática demonstrará a flexibilidade e o poder de gerenciar recursos de container no Docker.

Criar um container com limites de recursos iniciais

Nesta etapa, você aprenderá como criar um container Docker e definir limites de recursos iniciais para CPU e memória. Os limites de recursos são importantes para evitar que um único container consuma todos os recursos disponíveis na máquina host, o que pode impactar o desempenho de outros containers e do próprio host.

Primeiro, vamos baixar a imagem ubuntu do Docker Hub. Esta imagem será usada como base para nosso container.

docker pull ubuntu:latest

Você deve ver uma saída indicando que a imagem está sendo baixada e extraída.

Agora, vamos criar um container chamado my-limited-container com limites de recursos específicos. Usaremos o comando docker run com as flags --cpus e --memory.

A flag --cpus limita a quantidade de recursos de CPU que o container pode usar. O valor é um número de ponto flutuante que representa o número de núcleos de CPU. Por exemplo, --cpus 0.5 significa que o container pode usar no máximo metade de um núcleo de CPU.

A flag --memory limita a quantidade de memória que o container pode usar. O valor pode ser especificado em bytes, kilobytes (k), megabytes (m) ou gigabytes (g). Por exemplo, --memory 512m limita o container a 512 megabytes de memória.

Neste exemplo, criaremos um container que executa o comando sleep infinity, que mantém o container em execução indefinidamente. Limitaremos seu uso de CPU a 0,5 núcleos e memória a 256 megabytes.

docker run -d --name my-limited-container --cpus 0.5 --memory 256m ubuntu:latest sleep infinity

Vamos detalhar o comando:

  • docker run: Este comando é usado para criar e iniciar um novo container.
  • -d: Esta flag executa o container em modo detached (destacado), o que significa que ele é executado em segundo plano.
  • --name my-limited-container: Isso atribui o nome my-limited-container ao container.
  • --cpus 0.5: Isso limita o uso de CPU do container a 0,5 núcleos.
  • --memory 256m: Isso limita o uso de memória do container a 256 megabytes.
  • ubuntu:latest: Isso especifica a imagem Docker a ser usada (a versão mais recente do Ubuntu).
  • sleep infinity: Este é o comando que será executado dentro do container. Ele mantém o container em execução.

Após executar o comando, o Docker exibirá o ID do container.

Para verificar se o container está em execução e os limites de recursos foram aplicados, você pode usar o comando docker inspect. Este comando fornece informações detalhadas sobre um container.

docker inspect my-limited-container

A saída de docker inspect é um grande objeto JSON. Você pode procurar os campos CpuShares e Memory dentro da seção HostConfig para ver os limites aplicados. Observe que --cpus 0.5 é traduzido para um valor de CpuShares de 512 (por padrão, 1 CPU tem 1024 shares). O valor de Memory estará em bytes.

Atualizar as CPU shares do container

Nesta etapa, você aprenderá como atualizar as CPU shares (compartilhamentos de CPU) de um container em execução usando o comando docker update. As CPU shares são uma forma de priorizar o acesso do container aos ciclos da CPU quando o sistema está sob carga. Um valor de share (compartilhamento) mais alto significa que o container recebe uma proporção maior de tempo de CPU em comparação com containers com shares mais baixos.

Na etapa anterior, criamos um container chamado my-limited-container com um limite de CPU de 0,5 núcleos, o que corresponde a 512 CPU shares. Agora, vamos atualizar suas CPU shares para 768. Isso lhe dará uma prioridade mais alta para recursos de CPU em comparação com outros containers com shares padrão (1024) ou shares mais baixos.

Para atualizar as CPU shares, usamos o comando docker update com a flag --cpu-shares, seguido pelo nome do container e o novo valor de share.

docker update --cpu-shares 768 my-limited-container

Você deve ver o nome do container impresso como saída, indicando que a atualização foi bem-sucedida.

Para verificar se as CPU shares foram atualizadas, você pode novamente usar o comando docker inspect e verificar o campo CpuShares na seção HostConfig.

docker inspect my-limited-container

Procure o campo CpuShares na saída. Seu valor agora deve ser 768.

É importante notar que a atualização das CPU shares não requer a reinicialização do container. As alterações são aplicadas dinamicamente ao container em execução.

Atualizar o limite de memória do container

Nesta etapa, você aprenderá como atualizar o limite de memória de um container em execução usando o comando docker update. Limitar o uso de memória é crucial para evitar que os containers consumam quantidades excessivas de RAM, o que pode levar a problemas de desempenho ou até mesmo instabilidade do sistema no host.

Na primeira etapa, criamos o my-limited-container com um limite de memória de 256 megabytes. Agora, vamos aumentar seu limite de memória para 512 megabytes.

Para atualizar o limite de memória, usamos o comando docker update com a flag --memory, seguido pelo nome do container e o novo valor do limite de memória.

docker update --memory 512m my-limited-container

Você deve ver o nome do container impresso como saída, indicando que a atualização foi bem-sucedida.

Para verificar se o limite de memória foi atualizado, você pode usar o comando docker inspect e verificar o campo Memory na seção HostConfig.

docker inspect my-limited-container

Procure o campo Memory na saída. Seu valor agora deve ser 536870912 (que corresponde a 512 megabytes em bytes).

Semelhante à atualização das CPU shares, a atualização do limite de memória de um container em execução não requer a reinicialização do container. As alterações são aplicadas dinamicamente.

Atualizar a política de reinício do container

Nesta etapa, você aprenderá como atualizar a política de reinicialização de um container usando o comando docker update. Uma política de reinicialização determina como um container deve se comportar quando ele sai ou quando o daemon do Docker reinicia. Isso é importante para garantir a disponibilidade de seus aplicativos em execução em containers.

Por padrão, os containers têm uma política de reinicialização de no, o que significa que eles não serão reiniciados automaticamente após a saída. Vamos atualizar o my-limited-container para ter uma política de reinicialização de on-failure. Essa política reiniciará o container somente se ele sair com um código de saída diferente de zero (indicando um erro).

Para atualizar a política de reinicialização, usamos o comando docker update com a flag --restart, seguido pelo nome do container e a política desejada.

docker update --restart on-failure my-limited-container

Você deve ver o nome do container impresso como saída, indicando que a atualização foi bem-sucedida.

Para verificar se a política de reinicialização foi atualizada, você pode usar o comando docker inspect e verificar o campo RestartPolicy dentro da seção HostConfig.

docker inspect my-limited-container

Procure o campo RestartPolicy na saída. O campo Name dentro de RestartPolicy agora deve ser on-failure.

Outras políticas de reinicialização comuns incluem:

  • no: Não reinicie o container automaticamente.
  • on-failure[:max-retries]: Reinicie o container somente se ele sair com um código de saída diferente de zero. Opcionalmente, limite o número de tentativas de reinicialização.
  • always: Sempre reinicie o container se ele parar.
  • unless-stopped: Sempre reinicie o container, a menos que ele seja explicitamente parado.

A atualização da política de reinicialização também não requer a reinicialização do container. A alteração é aplicada dinamicamente.

Finalmente, vamos limpar o container que criamos.

docker stop my-limited-container
docker rm my-limited-container

Isso para e remove o container.

Resumo

Neste laboratório, você aprendeu como gerenciar os recursos de containers Docker usando o comando docker update. Você começou criando um container com limites iniciais de CPU e memória usando docker run com as flags --cpus e --memory. Isso demonstrou como definir restrições de recursos durante a criação do container para evitar a falta de recursos (resource starvation) no host.

Posteriormente, você explorou como modificar dinamicamente esses limites de recursos em um container em execução. Você aprendeu a atualizar as CPU shares do container usando docker update --cpu-shares e ajustar o limite de memória com docker update --memory. Finalmente, você praticou a alteração da política de reinicialização do container usando docker update --restart, ilustrando como controlar o comportamento do container em caso de falhas. Essas etapas forneceram experiência prática no uso do comando docker update para ajustar a alocação de recursos e o comportamento do container após a criação.