Como atualizar contêineres do Docker para aplicar atualizações de imagem Como visualizar o histórico de commits com Git Log Como fazer SSH em um contêiner do Docker Como verificar se o daemon do Docker ou um contêiner está sendo executado Qual é a diferença entre COPY e ADD em Dockerfiles? Como usar a subárvore Git para gerenciar vários repositórios de projetos Como usar o Docker Cp para copiar arquivos entre o host e os contêineres


0

Ilustração mostrando o logotipo do Docker

Os contêineres Docker devem ser descartáveis ​​e facilmente substituídos. Quando uma nova versão da imagem de base de um contêiner é lançada, você deve extrair a nova imagem e iniciar uma nova instância de contêiner. Veja como gerenciar atualizações de imagens em sua frota de contêineres.

Obtendo novas imagens

A maneira básica de aplicar uma atualização de imagem é extrair a nova imagem, destruir os contêineres em execução com base na versão antiga e, em seguida, iniciar novos contêineres em seus lugares.

Aqui está um exemplo de um contêiner usando o nginx:latest imagem:

# Pull new image
docker pull nginx:latest

# Delete old container by name
docker rm example-nginx

# Start a new container
docker run -d -p 80:80 --name example-nginx nginx:latest

O Docker carece de uma maneira integrada de detectar atualizações de imagem e substituir seus contêineres em execução. O resultado é um processo complicado de substituição manual. Isso pode ser simplificado usando o Docker Compose para iniciar seus contêineres em vez do simples docker run comando.

Substituição de contêineres por Docker Compose

O Docker Compose permite criar representações declarativas de pilhas de contêineres usando um docker-compose.yml Arquivo. A pilha é iniciada com docker-compose up, usando a configuração contida no arquivo. Isso substitui a longa lista de sinalizadores normalmente fornecida a docker run.

Propaganda

O Docker Compose tem um pull comando que irá puxar versões atualizadas de todas as imagens em sua pilha. Ainda é um procedimento de dois estágios, pois você deve executar manualmente docker-compose up novamente depois.

# Pull all images in the stack
docker-compose pull

# Restart the stack
# If a new image version has been pulled, containers 
# using the old tag will be replaced with new instances.
docker-compose up -d

O Docker Compose oferece uma experiência mais simples e memorável, onde você não precisa digitar os nomes das imagens ou lembrar as sinalizações que você passou para docker run. Os dois comandos podem ser rapidamente encurtados para um único alias de shell:

alias composePullUp="docker-compose pull && docker-compose up -d"

Gerenciando tags de imagem

Você precisa fazer referência à tag correta ao extrair as imagens manualmente. O Docker Compose cuidará disso para você e selecionará as tags especificadas em seu docker-compose.yml.

Extrair a nova versão de uma tag não é necessariamente o mesmo que usar a versão mais recente de uma imagem. Se você quiser usar a versão mais recente do software dentro o contêiner, preste atenção às práticas de marcação do autor da imagem.

Por exemplo, puxando uma nova versão de node:14 obterá a versão de patch mais recente do Node.js 14. Pulling node:latest entregará a versão mais recente do Node.js, atualmente 16. Se um contêiner antigo estava usando esta imagem, um processo de puxar e substituir dispararia um aumento de versão principal para o binário do Node dentro do contêiner.

Reconstruindo imagens

Até agora, vimos como lidar com contêineres iniciados com imagens que você está obtendo diretamente do Docker Hub ou de outro registro. As imagens que você está construindo precisam ser reconstruídas quando sua imagem de base muda.

Primeiro reconstrua a imagem:

docker build --pull -t my-image:latest .

Em seguida, substitua seus recipientes:

# Delete old container by name
docker rm my-container

# Start a new container
docker run -d --name my-container my-image:latest
Propaganda

o --pull bandeira dada a docker build instrui o Docker a puxar a imagem de base referenciada em seu Dockerfile. Sem esse sinalizador, o Docker reutilizaria a referência de tag existente se a imagem já estivesse presente no sistema.

Os usuários do Docker Compose podem obter os mesmos resultados com os docker-compose comandos:

docker-compose build --pull

docker-compose up -d

O Compose novamente oferece um processo mais simples, embora ainda em dois estágios. Você pode esquecer nomes e marcas de imagem específicos, em vez de confiar no Compose para extrair imagens de base alteradas, reconstruir suas camadas sobre elas e, em seguida, recriar seus contêineres.

Software Inside Containers

Às vezes, pode ser tentador atualizar o software manualmente dentro seus contêineres. Isso deve ser evitado, pois vai de novo aos princípios de Docker.

Correndo apt-get update && apt get upgrade -y em uma programação (ou nas contrapartes do gerenciador de pacotes) é a prática padrão ao administrar um servidor Linux bare metal. Esses comandos normalmente não são executados em um contêiner do Docker, embora possam ser incluídos como parte de um Dockerfile para obter os patches de segurança mais recentes durante a construção de uma imagem.

Extrair periodicamente a imagem de base e recriar seus contêineres é a maneira preferida de mantê-los atualizados. Isso fornece todas as correções de segurança upstream e encurta a vida útil de contêineres individuais. Os ambientes de contêiner não devem ser modificados após a criação de uma instância; as mudanças no sistema de arquivos devem ser limitadas a gravações em caminhos temporários e volumes Docker dedicados que sobrevivem ao contêiner.

Automatizando atualizações de contêineres

Você pode automatizar o processo de verificação de tags de imagem atualizadas e reiniciar seus contêineres usando projetos de terceiros. Watchtower é uma escolha popular que monitora contêineres em execução e os substitui quando a imagem do Docker Hub muda.

A própria Watchtower é implantada como um contêiner:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
Propaganda

Agora você tem uma instalação da Watchtower em funcionamento. O soquete Docker do seu host é montado no contêiner Watchtower, permitindo que ele execute comandos Docker para criar e excluir contêineres.

A Watchtower detectará automaticamente novos lançamentos de imagens no Docker Hub, os puxará para sua máquina e substituirá os contêineres usando a imagem. Os contêineres existentes serão encerrados e novos recipientes idênticos serão criados em seus lugares. As mesmas bandeiras que você deu para docker run será fornecido aos recipientes de substituição.

Watchtower só funciona com Docker Hub por padrão. Você pode usá-lo com registros de imagem privados, fornecendo credenciais em um arquivo de configuração.

Crie um arquivo JSON com o seguinte conteúdo:

{
    "auths": {
        "example.com": {
            "auth": "credentials"
        }
    }
}

Substituir example.com com o caminho para o seu registro.

Em seguida, gere uma string de credenciais a partir de seu nome de usuário e senha de registro:

echo -n 'username:password' | base64

Cole a string codificada em Base64 resultante no arquivo de configuração, substituindo o credentials texto de espaço reservado.

Propaganda

Monte o arquivo de configuração no contêiner da Watchtower para permitir o acesso ao seu registro:

docker run -d 
    -v config.json:/config.json
    -v /var/run/docker.sock:/var/run/docker.sock 
    containrrr/watchtower

Conclusão

O Docker carece de qualquer mecanismo para detectar e aplicar atualizações de imagem upstream aos contêineres em execução. Você pode usar os comandos Docker CLI em sequência, docker-compose como uma abstração de nível superior ou uma ferramenta de terceiros como a Watchtower para substituir seus contêineres quando novas versões de imagem forem lançadas.

Dependendo das circunstâncias, você pode não sentir necessidade de atualizar os contêineres dessa forma. Se sua equipe usa pipelines de CI para construir uma imagem Docker em cada confirmação, você já pode estar produzindo e implantando imagens atualizadas várias vezes ao dia. Neste caso, certifique-se de usar o --pull bandeira com docker build portanto, as correções do upstream estão incluídas em suas imagens.


Like it? Share with your friends!

0

What's Your Reaction?

hate hate
0
hate
confused confused
0
confused
fail fail
0
fail
fun fun
0
fun
geeky geeky
0
geeky
love love
0
love
lol lol
0
lol
omg omg
0
omg
win win
0
win

0 Comments

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