Como modificar a configuração dos contêineres do Docker em execução


0

Os contêineres do Docker geralmente são tratados como imutáveis ​​quando começam a ser executados. Você pode atualizar alguns parâmetros de configuração dinamicamente, como o nome do contêiner e seus limites de recursos de hardware.

Neste guia, mostraremos como usar comandos internos do Docker para modificar parâmetros selecionados de contêineres em execução. Também veremos o que você não deve alterar e uma solução alternativa que você pode usar se achar que deve.

Renomeando um Contêiner

A modificação mais simples é renomear um contêiner criado. Os nomes são atribuídos através do --name bandeira para docker run. Quando nenhum nome é fornecido, o daemon do Docker atribui um nome aleatório. Você pode usar nomes para fazer referência a contêineres em comandos da CLI do Docker; escolher um memorável apropriado evita correr docker ps para encontrar o nome ou ID atribuído automaticamente a um contêiner.

O docker rename O comando é usado para alterar os nomes dos contêineres após a criação. São necessários dois argumentos, o ID do contêiner de destino ou o nome atual e o novo nome para atribuir:

# docker rename <target ID or name> <new name>
docker rename old_name new_name

Alterando a política de reinicialização

As políticas de reinicialização determinam se os contêineres devem ser iniciados automaticamente após a reinicialização do host ou a inicialização do daemon do Docker. As quatro políticas disponíveis permitem forçar a inicialização do contêiner, mantê-lo parado ou iniciar condicionalmente com base no código de saída anterior do contêiner ou no estado de execução.

Propaganda

O Docker dá suporte à alteração das políticas de reinicialização dinamicamente. Isso é útil se você planeja reinicializar seu host ou o daemon do Docker e deseja que um determinado contêiner permaneça parado – ou seja iniciado automaticamente – após o evento específico.

docker update --restart unless-stopped demo_container

O exemplo acima altera a política de reinicialização de demo_container para unless-stopped. Essa política faz com que o contêiner seja iniciado com o daemon, a menos que tenha sido interrompido manualmente antes da última saída do daemon.

Alterando os Limites de Recursos de Hardware

O docker update O comando também pode ser usado para alterar os limites de recursos aplicados aos contêineres. Você deve passar um ou mais IDs ou nomes de contêineres, juntamente com uma lista de sinalizadores que definem os limites a serem definidos nesses contêineres.

Os sinalizadores estão disponíveis para todos os limites de recursos suportados por docker run. Aqui está uma lista condensada das opções que você pode usar:

  • --blkio-weight – Altere o peso relativo do Block IO do contêiner.
  • --cpus – Defina o número de CPUs disponíveis para o contêiner.
  • --cpu-shares – Defina o peso relativo do compartilhamento de CPU.
  • --memory – Alterar o limite de memória do container (ex. 1024M).
  • --memory-swap – Configure a quantidade de memória que o container pode trocar para o disco; use um tamanho como 1024M para definir um limite específico, ou -1 para troca ilimitada.
  • --kernel-memory – Altere o limite de memória do kernel do contêiner. Os contêineres sem memória do kernel podem afetar negativamente outras cargas de trabalho na máquina host.
  • --pids-limit – Configure o número máximo de IDs de processo permitidos dentro do contêiner, restringindo o número de processos que podem ser iniciados.

Aqui está um exemplo de uso docker update para alterar o limite de memória e a contagem de CPU para dois de seus contêineres:

docker update --cpus 4 --memory 1024M first_container second_container

Todos os sinalizadores disponíveis, exceto --kernel-memory pode ser usado com contêineres Linux em execução. Para alterar o limite de memória do kernel, você deve parar o contêiner com docker stop primeiro.

Propaganda

Esteja ciente de que nenhum desses sinalizadores tem suporte atualmente para contêineres baseados no Windows. Eles funcionarão com contêineres Linux executados em uma máquina host Windows.

Quando não usar esses comandos?

O docker update e docker rename comandos devem ser usados ​​com contêineres que você criou manualmente via docker run. Tenha cuidado ao usá-los com contêineres que se originam de outras ferramentas, como docker-compose.

Alterar o nome de um contêiner pode deixá-lo indetectável pela ferramenta de origem, potencialmente quebrando outros componentes de sua pilha. Além disso, se você estiver definindo declarativamente os limites de recursos em um docker-compose.yml arquivo, executando o docker-compose up command novamente irá reaplicar esses limites originais ao seu contêiner.

Portanto, você deve manter sua solução de gerenciamento de contêiner existente se estiver usando uma. Para o Compose, isso significa alterar os nomes dos contêineres e os limites de recursos em seu docker-compose.yml arquivo, em seguida, executando docker-compose up -d para aplicar automaticamente a alteração. Isso garante que você não deixará contêineres órfãos involuntariamente ou causará efeitos colaterais não intencionais.

E quanto a outras propriedades (Imagem/Portas/Volumes)?

Limites de hardware, políticas de recursos e nomes de contêiner são os únicos parâmetros de configuração que a CLI do Docker permite alterar. Você não pode modificar a imagem de um contêiner em execução; nem você pode alterar facilmente outras opções, como ligações de portas e volumes.

Você deve criar outro contêiner se esses valores ficarem desatualizados. Destrua sua instância atual e use docker run para iniciar uma substituição com sua nova imagem e configurações corrigidas.

Propaganda

Como os contêineres devem ser sem estado e efêmeros, você deve poder substituí-los a qualquer momento. Use volumes para armazenar dados de contêiner persistentes; esse mecanismo permite reanexar arquivos com estado ao novo contêiner repetindo o -v bandeiras passadas para o original docker run comando:

docker run -v config-volume:/usr/lib/config --name demo example-image:v1

docker rm demo

# Existing data in /usr/lib/config retained
docker run -v config-volume:/usr/lib/config --name demo2 example-image:v2

Zona de perigo: alterando outras propriedades do contêiner

Embora você deva procurar substituir os contêineres sempre que possível, é possível modificar as propriedades dos existentes editando diretamente os arquivos de configuração do Docker. Tome cuidado ao usar esse método: ele não tem suporte e uma alteração mal feita pode quebrar seu contêiner.

Embora essa opção forneça uma maneira de editar arbitrariamente os contêineres existentes, ela não funcionará enquanto eles estiverem em execução. Use o docker stop my-container comando para parar o contêiner que você deseja editar e continue a fazer suas alterações.

Os arquivos de configuração do contêiner têm o seguinte caminho em seu host:

/var/lib/docker/containers/<container id>/config.v2.json

Você precisa saber o ID completo do contêiner, não a versão truncada mostrada por docker ps. Você pode usar o docker inspect comando para obter isso:

docker inspect <short id or name> | jq | grep Id

Uma vez que você chegou a um contêiner config.v2.json, você pode abri-lo em um editor de texto para fazer as alterações necessárias. O JSON armazena a configuração do contêiner criada quando você executou docker run. Você pode modificar o conteúdo para alterar propriedades como ligações de porta, variáveis ​​de ambiente, volumes e o ponto de entrada e comando do contêiner.

Propaganda

Para adicionar uma ligação de porta, encontre o PortBindings key no arquivo e insira um novo item no objeto:

{
    "PortBindings": {
        "80/tcp": {
            "HostIp": "",
            "HostPort": "8080"
        }
    }
}

Aqui, a porta 80 no contêiner está vinculada à porta 8080 no host. É igualmente simples adicionar variáveis ​​de ambiente – encontre o Env key e insira novos itens no array:

{
    "Env": [
        "FOO=bar",
        "CUSTOM_VARIABLE=example"
    ]
}

Quando terminar de editar, reinicie o serviço Docker e seu contêiner:

sudo service docker restart

docker start my-container

O contêiner agora será executado com sua configuração atualizada.

Conclusão

Os contêineres do Docker devem ser unidades efêmeras que você substitui quando sua configuração fica desatualizada. Apesar dessa intenção, existem cenários em que é necessário modificar um container existente. O Docker lida com os casos de uso mais comuns – alterações de nome e ajustes de limite de recursos em tempo real – por meio de comandos integrados da CLI, como docker update.

Quando você quiser alterar outra propriedade, sempre tente substituir o contêiner como seu primeiro curso de ação. Isso minimiza o risco de quebrar coisas e está de acordo com o modelo de imutabilidade do Docker. Se você acabar em uma situação em que um contêiner existente precisa ser editado, poderá alterar manualmente os arquivos de configuração internos do Docker conforme descrito acima.

Por fim, lembre-se de que os contêineres gerenciados por outras ferramentas do ecossistema, como o Docker Compose, devem ser modificados usando esses mecanismos. Caso contrário, você pode descobrir que os contêineres estão inesperadamente órfãos ou substituídos se a ferramenta não estiver ciente das alterações feitas.


Like it? Share with your friends!

0

0 Comments

Your email address will not be published. Required fields are marked *