Cómo usar el comando docker scout repo disable para deshabilitar repositorios

DockerDockerBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

En este laboratorio, aprenderás cómo gestionar las fuentes de imágenes deshabilitando eficazmente los repositorios utilizando el comando docker scout repo disable. Explorarás cómo deshabilitar un repositorio específico, deshabilitar todos los repositorios dentro de una organización, deshabilitar repositorios basados en filtros y deshabilitar un repositorio de un registro específico.

A través de ejercicios prácticos, entenderás cómo controlar el acceso a los repositorios puede mejorar la seguridad y optimizar tu flujo de trabajo de gestión de imágenes.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/ImageOperationsGroup -.-> docker/search("Search Images in Repository") subgraph Lab Skills docker/run -.-> lab-555212{{"Cómo usar el comando docker scout repo disable para deshabilitar repositorios"}} docker/pull -.-> lab-555212{{"Cómo usar el comando docker scout repo disable para deshabilitar repositorios"}} docker/images -.-> lab-555212{{"Cómo usar el comando docker scout repo disable para deshabilitar repositorios"}} docker/search -.-> lab-555212{{"Cómo usar el comando docker scout repo disable para deshabilitar repositorios"}} end

Deshabilitar un repositorio específico

En este paso, aprenderás cómo deshabilitar un repositorio específico utilizando la línea de comandos de Docker. Deshabilitar un repositorio significa que Docker ya no extraerá imágenes de esa fuente específica cuando uses comandos como docker pull o docker run sin especificar un nombre completo de imagen con el registro. Esto puede ser útil por razones de seguridad o para controlar de dónde se obtienen tus imágenes.

Primero, simulemos tener un repositorio habilitado. Si bien Docker no tiene un comando explícito de "habilitar/deshabilitar" para repositorios individuales de la misma manera que algunos gestores de paquetes, podemos lograr un efecto similar entendiendo cómo Docker extrae imágenes. Por defecto, Docker extrae de Docker Hub. Si especificas un registro diferente, Docker extraerá de allí. Para "deshabilitar" un repositorio específico de un registro específico, simplemente evitarías especificar ese registro al extraer imágenes o configurarías el demonio de Docker para excluirlo (lo cual es más avanzado y no se cubre aquí).

Para este paso, nos centraremos en el concepto de controlar las fuentes de imágenes. Imagina que tenemos un registro personalizado en myregistry.example.com y queremos asegurarnos de no extraer accidentalmente la imagen ubuntu de allí, sino solo de Docker Hub.

Para demostrarlo, primero intentemos extraer una imagen de Docker Hub. Este es el comportamiento predeterminado.

docker pull ubuntu:latest

Deberías ver una salida que indique que Docker está extrayendo la imagen ubuntu:latest de Docker Hub.

Ahora, simulemos intentar extraer de un hipotético repositorio deshabilitado. Dado que no tenemos un registro personalizado configurado, usaremos un comando que intentaría extraer de una ubicación específica si estuviera configurado. La clave es entender que especificar el nombre completo de la imagen con el prefijo del registro (registro/repositorio:etiqueta) le dice a Docker exactamente dónde buscar. Si no quieres extraer de myregistry.example.com/ubuntu, simplemente no uses ese nombre completo.

Para reforzar el concepto de extraer de una ubicación específica, extraigamos una imagen diferente, hello-world, que es muy pequeña y se descarga rápidamente. Todavía la extraeremos de Docker Hub, pero la estructura del comando muestra cómo se especificaría un registro si fuera necesario.

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

En este comando, docker.io es el registro predeterminado (Docker Hub), library es el espacio de nombres predeterminado para imágenes oficiales y hello-world es el nombre del repositorio. Al indicar explícitamente docker.io/library/hello-world, le estamos diciendo a Docker que extraiga de Docker Hub. Para "deshabilitar" la extracción de ubuntu de un hipotético myregistry.example.com, simplemente evitarías usar myregistry.example.com/ubuntu en tus comandos docker pull o docker run.

El concepto central aquí es que Docker extrae imágenes en función del nombre de imagen proporcionado. Si proporcionas un nombre simple como ubuntu, Docker busca en sus registros configurados (por defecto, solo Docker Hub). Si proporcionas un nombre completamente calificado como myregistry.example.com/ubuntu, Docker intenta extraer de myregistry.example.com. Para "deshabilitar" un repositorio específico de un registro específico, simplemente asegúrate de que tus comandos no hagan referencia a ese repositorio con ese prefijo de registro.

Para la verificación de este paso, comprobaremos si la imagen hello-world se ha extraído correctamente, lo que indica que has ejecutado con éxito un comando docker pull.

Deshabilitar todos los repositorios de la organización

En este paso, exploraremos el concepto de controlar el acceso a todos los repositorios dentro de una organización o espacio de nombres específico en un registro de Docker. Similar a deshabilitar un solo repositorio, "deshabilitar" todos los repositorios de una organización en Docker generalmente implica configuración o políticas en lugar de un solo comando. Sin embargo, podemos simular esto entendiendo cómo Docker interactúa con los registros y cómo evitar extraer imágenes del espacio de nombres de una organización específica.

Las imágenes de Docker a menudo se organizan bajo espacios de nombres, que pueden representar organizaciones o usuarios individuales. Por ejemplo, ubuntu está bajo el espacio de nombres library (para imágenes oficiales en Docker Hub), y las imágenes de una empresa podrían estar bajo un espacio de nombres como mycompany/myimage. Para deshabilitar efectivamente todos los repositorios de una organización como mycompany, deberías asegurarte de que Docker no esté configurado para extraer del espacio de nombres de esa organización en ningún registro.

Dado que estamos trabajando con un entorno estándar de Docker conectado principalmente a Docker Hub, no tenemos una organización personalizada configurada para deshabilitar. Sin embargo, podemos demostrar el principio intentando extraer una imagen de una organización inexistente o mostrando cómo listar imágenes de una organización específica si tuvieras acceso.

Primero, listemos las imágenes que actualmente tenemos. Deberías ver las imágenes ubuntu y hello-world del paso anterior.

docker images

Ahora, imagina que queremos "deshabilitar" la extracción de cualquier imagen de una hipotética organización llamada nonexistentorg en Docker Hub. Si intentáramos extraer una imagen de esta organización, Docker fallaría porque la organización o la imagen no existen. Este fallo en la extracción es el efecto práctico de que el repositorio esté "deshabilitado" o inaccesible.

Intentemos extraer una imagen de una organización inexistente para ver el comportamiento esperado cuando un repositorio no está disponible.

docker pull nonexistentorg/someimage:latest

Verás un mensaje de error que indica que la imagen o el repositorio no se encontró. Esto demuestra que sin una organización y un repositorio válidos, Docker no puede extraer la imagen.

Para realmente "deshabilitar" el acceso a los repositorios de una organización en un entorno de producción, normalmente configurarías el demonio de Docker o usarías un proxy para bloquear el acceso a ese espacio de nombres específico en el registro. Sin embargo, para los fines de este laboratorio, entender que Docker requiere un nombre de organización y repositorio válidos para extraer imágenes es fundamental. Al evitar el uso del espacio de nombres de una organización en tus comandos docker pull o docker run, efectivamente "deshabilitas" la extracción de esa organización.

Para la verificación de este paso, comprobaremos si el intento de extraer de la organización inexistente resultó en un error, lo que confirma que Docker no pudo acceder a ese hipotético repositorio. Podemos verificar el historial de comandos para el comando docker pull nonexistentorg/someimage:latest.

Deshabilitar repositorios basados en un filtro

En este paso, exploraremos cómo se puede utilizar el filtrado para gestionar con qué repositorios interactúas. Si bien Docker no tiene un comando incorporado para "deshabilitar" repositorios basados en filtros arbitrarios de la misma manera que se pueden filtrar archivos, se puede lograr un resultado similar utilizando filtros al listar o buscar imágenes y siendo preciso en los comandos docker pull.

El filtrado es una función poderosa en Docker que te permite reducir los resultados de comandos como docker images, docker ps y docker search. Puedes filtrar basándote en varios criterios, como el nombre de la imagen, la etiqueta, la fecha de creación, etc. Al utilizar filtros, puedes ignorar o excluir efectivamente los repositorios que coincidan con ciertos patrones, "deshabilitándolos" de tu vista o operaciones actuales.

Comencemos por listar todas las imágenes que actualmente tenemos, incluyendo las imágenes ubuntu y hello-world.

docker images

Ahora, supongamos que queremos ver solo las imágenes que pertenecen al espacio de nombres library (que incluye imágenes oficiales como ubuntu y hello-world). Podemos utilizar la bandera --filter con el criterio reference. El filtro reference coincide con el nombre de la imagen, incluyendo el registro opcional y la etiqueta.

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

Este comando listará las imágenes donde la referencia contiene /library/. Deberías ver las imágenes ubuntu y hello-world en la lista. Esto demuestra cómo se puede filtrar para incluir repositorios específicos.

Para simular "deshabilitar" repositorios basados en un filtro, básicamente se haría lo contrario: filtrar para excluir los repositorios que no quieres ver o con los que no quieres interactuar. Por ejemplo, si quieres listar todas las imágenes excepto las del espacio de nombres library, necesitarías un enfoque más complejo, posiblemente involucrando scripting para listar todas las imágenes y luego filtrarlas según el patrón.

Una aplicación más práctica del filtrado en el contexto de "deshabilitar" es cuando se buscan imágenes. Puedes filtrar los resultados de la búsqueda para encontrar imágenes que coincidan con criterios específicos e ignorar otras.

Busquemos imágenes que contengan la palabra "ubuntu" en Docker Hub.

docker search ubuntu

Esto mostrará una lista de repositorios relacionados con Ubuntu. Ahora, supongamos que solo queremos ver las imágenes oficiales de Ubuntu. Podemos utilizar la bandera --filter con el criterio is-official=true.

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

Este comando filtra los resultados de la búsqueda para mostrar solo las imágenes oficiales. Al utilizar este filtro, estás efectivamente "deshabilitando" o ignorando todos los repositorios de Ubuntu no oficiales en los resultados de la búsqueda.

La idea principal es que, aunque no hay un comando directo de "deshabilitar por filtro" para la extracción, se puede utilizar el filtrado en comandos como docker images y docker search para gestionar tu vista de los repositorios disponibles y evitar interactuar con aquellos que deseas "deshabilitar".

Para la verificación de este paso, comprobaremos si has utilizado con éxito el comando docker search con el filtro is-official=true.

Deshabilitar un repositorio de un registro específico

En este último paso, nos centraremos en cómo controlar la extracción de imágenes de un registro específico. Docker puede interactuar con múltiples registros, como Docker Hub (el predeterminado), Google Container Registry, Amazon Elastic Container Registry o tu propio registro privado. "Deshabilitar" un repositorio de un registro específico significa asegurarse de que Docker no intente extraer una imagen en particular de esa fuente designada.

Como aprendimos en los pasos anteriores, Docker extrae imágenes basadas en el nombre de la imagen proporcionado. Si proporcionas un nombre de imagen completamente calificado como myregistry.example.com/myimage:latest, Docker intentará extraer de myregistry.example.com. Si proporcionas un nombre simple como myimage, Docker buscará en sus registros configurados, comenzando por Docker Hub por defecto.

Para deshabilitar efectivamente un repositorio como myimage de un registro específico como myregistry.example.com, el método más sencillo es simplemente evitar usar el nombre completamente calificado myregistry.example.com/myimage:latest en tus comandos docker pull o docker run. En su lugar, extraerías la imagen de un registro diferente o usarías un nombre de imagen diferente.

Dado que no tenemos un registro personalizado configurado en este entorno de laboratorio, demostraremos el concepto intentando extraer una imagen de un registro hipotético que no existe. Esto te mostrará el comportamiento cuando Docker no puede acceder a un repositorio en un registro especificado.

Intentemos extraer una imagen llamada testimage de un registro hipotético nonexistentregistry.example.com.

docker pull nonexistentregistry.example.com/testimage:latest

Recibirás un mensaje de error que indica que Docker no pudo conectarse al registro o encontrar la imagen. Esto demuestra que al especificar un registro que es inaccesible o que no contiene el repositorio, efectivamente "deshabilitas" la extracción de ese repositorio de esa fuente específica.

En un escenario del mundo real, si tuvieras múltiples registros configurados, controlarías de qué registro Docker extrae utilizando el nombre de imagen completamente calificado adecuado. Para "deshabilitar" un repositorio de un registro específico, asegurarte de que tus flujos de trabajo y comandos estén configurados para extraer esa imagen de un registro diferente o no extraerla en absoluto.

Configuraciones avanzadas, como configurar el demonio de Docker para excluir ciertos registros o usar un proxy, también se pueden utilizar para aplicar políticas sobre qué registros se permiten. Sin embargo, el principio fundamental sigue siendo el mismo: controlar el nombre de imagen utilizado en los comandos docker pull y docker run dicta de qué registro Docker intentará extraer.

Para la verificación de este paso, comprobaremos si has intentado extraer una imagen especificando un nombre de registro hipotético. Podemos verificar el historial de comandos para el comando docker pull nonexistentregistry.example.com/testimage:latest.

Resumen

En este laboratorio, exploramos el concepto de controlar las fuentes de imágenes en Docker, centrándonos en cómo deshabilitar efectivamente repositorios específicos para la extracción de imágenes. Aprendimos que, si bien Docker no tiene un comando disable directo para repositorios individuales en el sentido tradicional, podemos lograr esto comprendiendo y controlando cómo especificamos los nombres de las imágenes durante las operaciones docker pull o docker run. Por defecto, Docker extrae imágenes de Docker Hub, y especificar un nombre de imagen completo con un prefijo de registro dirige a Docker a extraer de esa ubicación específica. Por lo tanto, para evitar extraer de un repositorio en particular de un registro específico, simplemente evitamos usar el nombre de imagen completo que incluye ese registro.

Practicamos la extracción de imágenes del Docker Hub predeterminado y discutimos cómo especificar un registro diferente cambiaría la fuente. La principal lección es que la gestión de los repositorios que Docker utiliza para la extracción de imágenes se logra principalmente a través de la nomenclatura explícita de las imágenes con sus prefijos de registro, en lugar de un comando global de deshabilitación. Esto permite un control detallado de la fuente de las imágenes por razones de seguridad y operativas.