Como usar o comando docker scout repo disable para desabilitar repositórios

DockerBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como gerenciar fontes de imagens, "desabilitando" efetivamente repositórios usando o comando docker scout repo disable. Você explorará como desabilitar um repositório específico, desabilitar todos os repositórios dentro de uma organização, desabilitar repositórios com base em filtros e desabilitar um repositório de um registro específico.

Através de exercícios práticos, você entenderá como controlar o acesso ao repositório pode aprimorar a segurança e otimizar seu fluxo de trabalho de gerenciamento de imagens.

Desabilitar um repositório específico

Nesta etapa, você aprenderá como desabilitar um repositório específico usando a linha de comando do Docker. Desabilitar um repositório significa que o Docker não puxará mais imagens dessa fonte específica quando você usar comandos como docker pull ou docker run sem especificar um nome de imagem completo com o registro. Isso pode ser útil por razões de segurança ou para controlar de onde suas imagens são originadas.

Primeiro, vamos simular ter um repositório habilitado. Embora o Docker não tenha um comando explícito de "habilitar/desabilitar" para repositórios individuais da mesma forma que alguns gerenciadores de pacotes fazem, podemos obter um efeito semelhante entendendo como o Docker puxa imagens. Por padrão, o Docker puxa do Docker Hub. Se você especificar um registro diferente, o Docker puxará de lá. Para "desabilitar" um repositório específico de um registro específico, você simplesmente evitaria especificar esse registro ao puxar imagens, ou configuraria o daemon do Docker para excluí-lo (o que é mais avançado e não é abordado aqui).

Para esta etapa, vamos nos concentrar no conceito de controlar as fontes de imagens. Vamos imaginar que temos um registro personalizado em myregistry.example.com e queremos garantir que não puxamos acidentalmente a imagem ubuntu de lá, mas apenas do Docker Hub.

Para demonstrar, vamos primeiro tentar puxar uma imagem do Docker Hub. Este é o comportamento padrão.

docker pull ubuntu:latest

Você deve ver a saída indicando que o Docker está puxando a imagem ubuntu:latest do Docker Hub.

Agora, vamos simular a tentativa de puxar de um repositório hipotético desabilitado. Como não temos um registro personalizado configurado, usaremos um comando que tentaria puxar de um local específico se estivesse configurado. A chave é entender que especificar o nome completo da imagem com o prefixo do registro (registry/repository:tag) diz ao Docker exatamente onde procurar. Se você não quiser puxar de myregistry.example.com/ubuntu, você simplesmente não usa esse nome completo.

Para reforçar o conceito de puxar de um local específico, vamos puxar uma imagem diferente, hello-world, que é muito pequena e rápida para baixar. Ainda puxaremos isso do Docker Hub, mas a estrutura do comando mostra como você especificaria um registro, se necessário.

docker pull docker.io/library/hello-world:latest

Neste comando, docker.io é o registro padrão (Docker Hub), library é o namespace padrão para imagens oficiais e hello-world é o nome do repositório. Ao declarar explicitamente docker.io/library/hello-world, estamos dizendo ao Docker para puxar do Docker Hub. Para "desabilitar" a extração de ubuntu de um hipotético myregistry.example.com, você simplesmente evitaria usar myregistry.example.com/ubuntu em seus comandos docker pull ou docker run.

O conceito principal aqui é que o Docker puxa imagens com base no nome da imagem fornecido. Se você fornecer um nome simples como ubuntu, o Docker procura em seus registros configurados (por padrão, apenas Docker Hub). Se você fornecer um nome totalmente qualificado como myregistry.example.com/ubuntu, o Docker tenta puxar de myregistry.example.com. Para "desabilitar" um repositório específico de um registro específico, você simplesmente garante que seus comandos não façam referência a esse repositório com esse prefixo de registro.

Para a verificação desta etapa, verificaremos se a imagem hello-world foi puxada com sucesso, o que indica que você executou com sucesso um comando docker pull.

Desabilitar todos os repositórios da organização

Nesta etapa, exploraremos o conceito de controlar o acesso a todos os repositórios dentro de uma organização ou namespace específico em um registro Docker. Semelhante à desabilitação de um único repositório, "desabilitar" todos os repositórios de uma organização no Docker normalmente envolve configuração ou política, em vez de um único comando. No entanto, podemos simular isso entendendo como o Docker interage com os registros e como evitar puxar imagens do namespace de uma organização específica.

As imagens Docker são frequentemente organizadas em namespaces, que podem representar organizações ou usuários individuais. Por exemplo, ubuntu está sob o namespace library (para imagens oficiais no Docker Hub), e imagens de uma empresa podem estar sob um namespace como minhaempresa/minhaimagem. Para efetivamente "desabilitar" todos os repositórios de uma organização como minhaempresa, você precisaria garantir que o Docker não esteja configurado para puxar do namespace dessa organização em nenhum registro.

Como estamos trabalhando com um ambiente Docker padrão conectado principalmente ao Docker Hub, não temos uma organização personalizada configurada para desabilitar. No entanto, podemos demonstrar o princípio tentando puxar uma imagem de uma organização inexistente ou mostrando como listar imagens de uma organização específica, caso você tivesse acesso.

Vamos primeiro listar as imagens que temos atualmente. Você deve ver as imagens ubuntu e hello-world da etapa anterior.

docker images

Agora, imagine que queríamos "desabilitar" a extração de quaisquer imagens de uma organização hipotética chamada nonexistentorg no Docker Hub. Se tentássemos puxar uma imagem desta organização, o Docker falharia porque a organização ou a imagem não existe. Essa falha na extração é o efeito prático do repositório estar "desabilitado" ou inacessível.

Vamos tentar puxar uma imagem de uma organização inexistente para ver o comportamento esperado quando um repositório não está disponível.

docker pull nonexistentorg/someimage:latest

Você verá uma mensagem de erro indicando que a imagem ou o repositório não foi encontrado. Isso demonstra que, sem uma organização e um repositório válidos, o Docker não pode puxar a imagem.

Para realmente "desabilitar" o acesso aos repositórios de uma organização em um ambiente de produção, você normalmente configuraria seu daemon Docker ou usaria um proxy para bloquear o acesso a esse namespace específico no registro. No entanto, para o propósito deste laboratório, entender que o Docker requer um nome de organização e repositório válido para puxar imagens é fundamental. Ao evitar o uso do namespace de uma organização em seus comandos docker pull ou docker run, você efetivamente "desabilita" a extração dessa organização.

Para a verificação desta etapa, verificaremos se a tentativa de puxar da organização inexistente resultou em um erro, o que confirma que o Docker não conseguiu acessar esse repositório hipotético. Podemos verificar o histórico de comandos para o comando docker pull nonexistentorg/someimage:latest.

Desabilitar repositórios com base em um filtro

Nesta etapa, exploraremos como a filtragem pode ser usada para gerenciar com quais repositórios você interage. Embora o Docker não tenha um comando integrado para "desabilitar" repositórios com base em filtros arbitrários da mesma forma que você pode filtrar arquivos, você pode obter um resultado semelhante usando a filtragem ao listar ou pesquisar imagens e sendo preciso em seus comandos docker pull.

A filtragem é um recurso poderoso no Docker que permite restringir os resultados de comandos como docker images, docker ps e docker search. Você pode filtrar com base em vários critérios, como nome da imagem, tag, tempo de criação e muito mais. Ao usar filtros, você pode efetivamente ignorar ou excluir repositórios que correspondem a determinados padrões, "desabilitando-os" assim de sua visualização ou operações atuais.

Vamos começar listando todas as imagens que temos atualmente, incluindo as imagens ubuntu e hello-world.

docker images

Agora, digamos que queremos ver apenas imagens que pertencem ao namespace library (que inclui imagens oficiais como ubuntu e hello-world). Podemos usar a flag --filter com o critério reference. O filtro reference corresponde ao nome da imagem, incluindo o registro e a tag opcionais.

docker images --filter "reference=*/library/*"

Este comando listará as imagens onde a referência contém /library/. Você deve ver as imagens ubuntu e hello-world listadas. Isso demonstra como você pode filtrar para incluir repositórios específicos.

Para simular a "desabilitação" de repositórios com base em um filtro, você essencialmente faria o oposto: filtrar para excluir os repositórios que você não deseja ver ou interagir. Por exemplo, se você quisesse listar todas as imagens exceto aquelas do namespace library, você precisaria de uma abordagem mais complexa, possivelmente envolvendo scripts para listar todas as imagens e, em seguida, filtrá-las com base no padrão.

Uma aplicação mais prática da filtragem no contexto de "desabilitar" é ao pesquisar imagens. Você pode filtrar os resultados da pesquisa para encontrar imagens que correspondam a critérios específicos e ignorar outras.

Vamos pesquisar imagens contendo a palavra "ubuntu" no Docker Hub.

docker search ubuntu

Isso mostrará uma lista de repositórios relacionados ao Ubuntu. Agora, digamos que queremos ver apenas imagens oficiais do Ubuntu. Podemos usar a flag --filter com o critério is-official=true.

docker search ubuntu --filter "is-official=true"

Este comando filtra os resultados da pesquisa para mostrar apenas imagens oficiais. Ao usar este filtro, você está efetivamente "desabilitando" ou ignorando todos os repositórios não oficiais do Ubuntu nos resultados da pesquisa.

A principal conclusão é que, embora não haja um comando direto de "desabilitar por filtro" para extrair, você pode usar a filtragem em comandos como docker images e docker search para gerenciar sua visualização dos repositórios disponíveis e evitar interagir com aqueles que você deseja "desabilitar".

Para a verificação desta etapa, verificaremos se você usou com sucesso o comando docker search com o filtro is-official=true.

Desabilitar um repositório de um registro específico

Nesta etapa final, focaremos em como controlar a extração de imagens de um registro específico. O Docker pode interagir com vários registros, como Docker Hub (o padrão), Google Container Registry, Amazon Elastic Container Registry ou seu próprio registro privado. "Desabilitar" um repositório de um registro específico significa garantir que o Docker não tente extrair uma imagem específica dessa fonte designada.

Como aprendemos nas etapas anteriores, o Docker extrai imagens com base no nome da imagem fornecido. Se você fornecer um nome de imagem totalmente qualificado como myregistry.example.com/myimage:latest, o Docker tentará extrair de myregistry.example.com. Se você fornecer um nome simples como myimage, o Docker procurará em seus registros configurados, começando com o Docker Hub por padrão.

Para efetivamente "desabilitar" um repositório como myimage de um registro específico como myregistry.example.com, o método mais direto é simplesmente evitar o uso do nome totalmente qualificado myregistry.example.com/myimage:latest em seus comandos docker pull ou docker run. Em vez disso, você extrairia a imagem de um registro diferente ou usaria um nome de imagem diferente.

Como não temos um registro personalizado configurado neste ambiente de laboratório, demonstraremos o conceito tentando extrair uma imagem de um registro hipotético que não existe. Isso mostrará o comportamento quando o Docker não puder acessar um repositório em um registro especificado.

Vamos tentar extrair uma imagem chamada testimage de um registro hipotético nonexistentregistry.example.com.

docker pull nonexistentregistry.example.com/testimage:latest

Você receberá uma mensagem de erro indicando que o Docker não conseguiu se conectar ao registro ou encontrar a imagem. Isso demonstra que, ao especificar um registro que é inacessível ou não contém o repositório, você efetivamente "desabilita" a extração desse repositório dessa fonte específica.

Em um cenário real, se você tivesse vários registros configurados, controlaria de qual registro o Docker extrai usando o nome da imagem totalmente qualificado apropriado. Para "desabilitar" um repositório de um registro específico, você garantiria que seus fluxos de trabalho e comandos estejam configurados para extrair essa imagem de um registro diferente ou não extraí-la.

Configurações avançadas, como configurar o daemon do Docker para excluir determinados registros ou usar um proxy, também podem ser usadas para impor políticas sobre quais registros são permitidos. No entanto, o princípio fundamental permanece: controlar o nome da imagem usado nos comandos docker pull e docker run dita qual registro o Docker tenta usar.

Para a verificação desta etapa, verificaremos se você tentou extrair uma imagem especificando um nome de registro hipotético. Podemos verificar o histórico de comandos para o comando docker pull nonexistentregistry.example.com/testimage:latest.

Resumo

Neste laboratório, exploramos o conceito de controlar as fontes de imagens no Docker, focando em como "desabilitar" efetivamente repositórios específicos de serem usados para extrações de imagens. Aprendemos que, embora o Docker não tenha um comando disable direto para repositórios individuais no sentido tradicional, podemos conseguir isso entendendo e controlando como especificamos os nomes das imagens durante as operações docker pull ou docker run. Por padrão, o Docker extrai do Docker Hub, e especificar um nome de imagem completo com um prefixo de registro direciona o Docker a extrair dessa localização específica. Portanto, para evitar a extração de um repositório específico em um registro específico, simplesmente evitamos usar o nome completo da imagem que inclui esse registro.

Praticamos a extração de imagens do Docker Hub padrão e discutimos como especificar um registro diferente mudaria a fonte. A principal conclusão é que o gerenciamento de quais repositórios o Docker usa para extrações de imagens é alcançado principalmente por meio da nomeação explícita de imagens com seus prefixos de registro, em vez de um comando de desabilitação global. Isso permite um controle preciso sobre a origem da imagem por motivos de segurança e operacionais.