Como atualizar automaticamente os contêineres do Docker do seu registro de imagens
O Docker é uma ferramenta que facilita a execução de aplicativos em contêineres portáteis. Um dos principais benefícios da conteinerização são as atualizações facilmente gerenciadas – tudo o que você precisa fazer é reiniciar com um novo contêiner, e existem ferramentas que podem automatizar todo esse processo.
RELACIONADO: Como atualizar contêineres do Docker para aplicar atualizações de imagem
Como implantar contêineres do Docker automaticamente
O Docker é uma ótima opção para pipelines de integração contínua/implantação contínua (CI/CD), pois ajuda a automatizar as duas etapas do processo. Os próprios Dockerfiles fornecem uma maneira de criar a imagem do seu aplicativo e é muito fácil configurar compilações automatizadas de contêineres da fonte em serviços como o Github. Uma vez construído e enviado para um “registro de imagem”, ele pode ser baixado e executado por qualquer servidor que execute o Docker.
Isso é ótimo, mas ainda envolve a execução de comandos no servidor toda vez que você deseja atualizar. Se você gostaria que fosse realmente automático, então você pode estar interessado em uma ferramenta chamada Torre de Vigia.
Watchtower é um utilitário que é executado em seu host do Docker e verifica periodicamente se há atualizações nos contêineres. Se detectar uma nova versão de uma imagem do registro de contêiner, ele matará automaticamente o contêiner e o reiniciará imediatamente.
Este é um recurso muito atraente, mas antes de instalá-lo, é importante discutir as desvantagens. Fazer atualizações de forma totalmente automática significa que você terá menos controle sobre o pace e os testes anteriores da implantação, pois sempre que o dedicate em seu repositório passar e acionar uma compilação, os contêineres em execução serão atualizados. Se você não for o proprietário da imagem que está sendo executada, ela poderá ser atualizada inesperadamente se você não as excluir da Torre de Vigia.
Se você não estiver fazendo atualizações todos os dias, talvez seja melhor usar uma GUI do Docker como o Portainer, que permite navegar em contêineres em execução em seus servidores e clicar em um botão para atualizá-los automaticamente. Isso lhe dá mais controle sobre o processo e pode ajudar a evitar atualizações inesperadas.
Se você quiser começar a usar o Portainer, leia nosso guia para configurá-lo para saber mais.
RELACIONADO: Como começar com o Portainer, uma interface de usuário da Internet para Docker
Usando a Torre de Vigia
O Watchtower é empacotado como um contêiner do Docker, por isso é muito fácil de instalar – apenas um comando o colocará em funcionamento:
docker run -d --name watchtower -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
Isso inicia um contêiner Torre de Vigia e também cria uma ligação montando o docker.sock
do host para que ele possa interagir com a API do Docker. Por padrão, isso verifica todos os contêineres em execução em busca de atualizações a cada 24 horas, que podem ser alteradas com o --interval
bandeira.
Você também pode criar um docker-compose.yml
arquivo para iniciar a Torre de Vigia como um serviço:
model: "3" services and products: watchtower: symbol: containrrr/watchtower restart: at all times volumes: - /var/run/docker.sock:/var/run/docker.sock - /root/.docker/config.json:/config.json command: --interval 300
“Todos os contêineres em execução” provavelmente incluem algumas coisas que você prefere não atualizar inesperadamente, incluindo imagens do Docker Hub sobre as quais você não tem controle. Você pode excluir contêineres das atualizações, mas apenas definindo um rótulo no contêiner que está sendo verificado.
Você precisará definir este sinalizador na linha de comando durante docker run
ou especifique-o no processo de compilação do contêiner usando o LABEL
diretiva.
docker run -d --label=com.centurylinklabs.watchtower.allow=false nginx LABEL com.centurylinklabs.watchtower.allow="false"
Você também pode fazer o inverso, passando o --label-enable
sinalizar ao iniciar a Torre de Vigia e definir os contêineres como “true”.
Executando o Watchtower como um serviço de composição do Docker
Um método melhor, especialmente quando você só precisa executar o Watchtower para um único contêiner, é empacotá-lo em um docker-compose.yml
arquivo e crie um escopo para a Torre de Vigia verificar. Neste exemplo, a imagem NGINX recebe o escopo “nginx” e a Torre de Vigia está configurada para atualizar apenas contêineres com esse rótulo de escopo.
model: '3' services and products: nginx: symbol: nginx labels: - "com.centurylinklabs.watchtower.scope=nginx" watchtower: symbol: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock command: --interval 300 --scope nginx labels: - "com.centurylinklabs.watchtower.scope=nginx"
Se você usar o Watchtower dessa maneira – empacotado em um arquivo de composição com um escopo – ele permitirá que você execute várias instâncias. Se você executar o Watchtower sem um escopo no mesmo sistema, ele substituirá essas instâncias.
Usando registros de terceiros
Por padrão, o Watchtower só funciona com o Docker Hub e qualquer outro registro público. Isso exclui certos serviços como o Container Registry do Github, que requer um nome de usuário e um Non-public Get right of entry to Token (PAT) para extrair imagens.
Você pode adicionar configuração para registros privados criando um config.json
arquivo com o seguinte conteúdo:
"auths": "ghcr.io": "auth": "credentials"
O valor “credentials” deve ser definido como uma string codificada em base64 do seu username:password
combo ou token de acesso pessoal no caso do Github.
echo -n 'username:password' | base64
Então, quando você executar a Torre de Vigia, passe uma montaria adicional para este config.json
Arquivo.
docker run -d -v config.json:/config.json -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower
Fonte da Notícia: www.howtogeek.com