Как использовать команду docker scout repo disable для отключения репозиториев

DockerDockerBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом практическом занятии (лабораторной работе) вы научитесь управлять источниками образов, эффективно "отключая" репозитории с помощью команды docker scout repo disable. Вы узнаете, как отключить определенный репозиторий, отключить все репозитории в рамках организации, отключить репозитории на основе фильтров и отключить репозиторий из определенного реестра.

Путем выполнения практических упражнений вы поймете, как контроль доступа к репозиториям может повысить безопасность и упростить процесс управления образами.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image 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{{"Как использовать команду docker scout repo disable для отключения репозиториев"}} docker/pull -.-> lab-555212{{"Как использовать команду docker scout repo disable для отключения репозиториев"}} docker/images -.-> lab-555212{{"Как использовать команду docker scout repo disable для отключения репозиториев"}} docker/search -.-> lab-555212{{"Как использовать команду docker scout repo disable для отключения репозиториев"}} end

Отключение определенного репозитория

На этом этапе вы научитесь отключать определенный репозиторий с помощью командной строки Docker. Отключение репозитория означает, что Docker больше не будет загружать образы из этого конкретного источника при использовании команд, таких как docker pull или docker run, без указания полного имени образа с реестром. Это может быть полезно по соображениям безопасности или для контроля источников ваших образов.

Сначала давайте смоделируем ситуацию, когда репозиторий включен. Хотя Docker не имеет явной команды "включить/отключить" для отдельных репозиториев, как это делают некоторые менеджеры пакетов, мы можем достичь аналогичного эффекта, понимая, как Docker загружает образы. По умолчанию Docker загружает образы из Docker Hub. Если вы укажете другой реестр, Docker загрузит образы оттуда. Чтобы "отключить" определенный репозиторий из определенного реестра, вы просто не указываете этот реестр при загрузке образов или настраиваете демон Docker так, чтобы он его исключал (это более сложный вариант, который здесь не рассматривается).

На этом этапе мы сосредоточимся на концепции управления источниками образов. Представим, что у нас есть собственный реестр по адресу myregistry.example.com и мы хотим убедиться, что не случайно загрузим образ ubuntu оттуда, а только из Docker Hub.

Для демонстрации сначала попробуем загрузить образ из Docker Hub. Это поведение по умолчанию.

docker pull ubuntu:latest

Вы должны увидеть вывод, указывающий, что Docker загружает образ ubuntu:latest из Docker Hub.

Теперь давайте смоделируем попытку загрузки из гипотетически отключенного репозитория. Поскольку у нас не настроен собственный реестр, мы используем команду, которая была бы попыткой загрузки из определенного места, если бы он был настроен. Основная идея заключается в том, что указание полного имени образа с префиксом реестра (registry/repository:tag) сообщает Docker, где именно искать. Если вы не хотите загружать из myregistry.example.com/ubuntu, вы просто не используете это полное имя.

Для закрепления концепции загрузки из определенного места давайте загрузим другой образ, hello-world, который очень маленький и быстро загружается. Мы по-прежнему будем загружать его из Docker Hub, но структура команды показывает, как можно указать реестр при необходимости.

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

В этой команде docker.io - это реестр по умолчанию (Docker Hub), library - это пространство имен по умолчанию для официальных образов, а hello-world - это имя репозитория. Явно указав docker.io/library/hello-world, мы сообщаем Docker загружать из Docker Hub. Чтобы "отключить" загрузку ubuntu из гипотетического myregistry.example.com, вы просто не используете myregistry.example.com/ubuntu в командах docker pull или docker run.

Основная концепция здесь заключается в том, что Docker загружает образы на основе предоставленного имени образа. Если вы предоставите простое имя, такое как ubuntu, Docker будет искать в своих настроенных реестрах (по умолчанию только в Docker Hub). Если вы предоставите полное имя, такое как myregistry.example.com/ubuntu, Docker попытается загрузить из myregistry.example.com. Чтобы "отключить" определенный репозиторий из определенного реестра, вы просто убеждаетесь, что ваши команды не ссылаются на этот репозиторий с префиксом этого реестра.

Для проверки этого этапа мы проверим, был ли успешно загружен образ hello-world, что означает, что вы успешно выполнили команду docker pull.

Отключение всех репозиториев организации

На этом этапе мы рассмотрим концепцию управления доступом ко всем репозиториям в рамках определенной организации или пространства имен в реестре Docker. Подобно отключению одного репозитория, "отключение" всех репозиториев организации в Docker обычно связано с настройкой или политикой, а не с одной командой. Однако мы можем смоделировать это, понимая, как Docker взаимодействует с реестрами и как избегать загрузки образов из пространства имен определенной организации.

Образы Docker часто организованы в пространствах имен, которые могут представлять организации или отдельных пользователей. Например, ubuntu находится в пространстве имен library (для официальных образов на Docker Hub), а образы компании могут находиться в пространстве имен, например, mycompany/myimage. Чтобы эффективно "отключить" все репозитории организации, такой как mycompany, вам нужно убедиться, что Docker не настроен на загрузку образов из пространства имен этой организации в любом реестре.

Поскольку мы работаем с стандартной средой Docker, в основном подключенной к Docker Hub, у нас нет настроенной собственной организации для отключения. Однако мы можем продемонстрировать принцип, попробовав загрузить образ из несуществующей организации или показав, как перечислить образы из определенной организации, если у вас есть доступ.

Сначала выведем список образов, которые у нас в настоящее время есть. Вы должны увидеть образы ubuntu и hello-world из предыдущего этапа.

docker images

Теперь представим, что мы хотим "отключить" загрузку любых образов из гипотетической организации с именем nonexistentorg на Docker Hub. Если мы попытаемся загрузить образ из этой организации, Docker не сможет этого сделать, так как организация или образ не существуют. Неудача загрузки - это практический эффект "отключения" или недоступности репозитория.

Попробуем загрузить образ из несуществующей организации, чтобы увидеть ожидаемое поведение, когда репозиторий недоступен.

docker pull nonexistentorg/someimage:latest

Вы увидите сообщение об ошибке, указывающее, что образ или репозиторий не найдены. Это демонстрирует, что без действительной организации и репозитория Docker не может загрузить образ.

Чтобы действительно "отключить" доступ к репозиториям организации в производственной среде, вы обычно настраиваете демон Docker или используете прокси-сервер для блокировки доступа к определенному пространству имен в реестре. Однако в рамках этой лабораторной работы ключевым моментом является понимание того, что Docker требует действительных имен организации и репозитория для загрузки образов. Избегая использования пространства имен организации в командах docker pull или docker run, вы эффективно "отключаете" загрузку из этой организации.

Для проверки этого этапа мы проверим, привела ли попытка загрузки из несуществующей организации к ошибке, что подтверждает, что Docker не смог получить доступ к гипотетическому репозиторию. Мы можем проверить историю команд для команды docker pull nonexistentorg/someimage:latest.

Отключение репозиториев на основе фильтра

На этом этапе мы рассмотрим, как можно использовать фильтрацию для управления теми репозиториями, с которыми вы взаимодействуете. Хотя Docker не имеет встроенной команды для "отключения" репозиториев на основе произвольных фильтров, как вы можете фильтровать файлы, вы можете достичь аналогичного результата, используя фильтрацию при перечислении или поиске образов и точными командами docker pull.

Фильтрация - это мощная функция в Docker, которая позволяет сузить результаты команд, таких как docker images, docker ps и docker search. Вы можете фильтровать по различным критериям, таким как имя образа, тег, время создания и т.д. Используя фильтры, вы можете эффективно игнорировать или исключить репозитории, соответствующие определенным шаблонам, тем самым "отключая" их от текущего вида или операций.

Начнем с перечисления всех образов, которые у нас в настоящее время есть, включая образы ubuntu и hello-world.

docker images

Теперь предположим, что мы хотим увидеть только образы, принадлежащие пространству имен library (которое включает официальные образы, такие как ubuntu и hello-world). Мы можем использовать флаг --filter с критерием reference. Фильтр reference соответствует имени образа, включая необязательный реестр и тег.

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

Эта команда выведет список образов, в которых ссылка содержит /library/. Вы должны увидеть перечисленные образы ubuntu и hello-world. Это демонстрирует, как можно фильтровать, чтобы включить определенные репозитории.

Для имитации "отключения" репозиториев на основе фильтра вы, по сути, должны сделать противоположное: отфильтровать, чтобы исключить репозитории, которые вы не хотите видеть или с которыми не хотите взаимодействовать. Например, если вы хотите вывести список всех образов, кроме тех, которые находятся в пространстве имен library, вам понадобится более сложный подход, возможно, с использованием скриптинга для перечисления всех образов и последующей фильтрации их на основе шаблона.

Более практическое применение фильтрации в контексте "отключения" - это поиск образов. Вы можете фильтровать результаты поиска, чтобы найти образы, соответствующие определенным критериям, и игнорировать остальные.

Давайте поищем образы, содержащие слово "ubuntu" на Docker Hub.

docker search ubuntu

Это покажет список репозиториев, связанных с Ubuntu. Теперь предположим, что мы хотим видеть только официальные образы Ubuntu. Мы можем использовать флаг --filter с критерием is-official=true.

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

Эта команда фильтрует результаты поиска, чтобы показать только официальные образы. Используя этот фильтр, вы фактически "отключаете" или игнорируете все неофициальные репозитории Ubuntu в результатах поиска.

Основная мысль заключается в том, что хотя нет прямой команды "отключить по фильтру" для загрузки образов, вы можете использовать фильтрацию в командах, таких как docker images и docker search, чтобы управлять списком доступных репозиториев и избегать взаимодействия с теми, которые вы хотите "отключить".

Для проверки этого этапа мы проверим, успешно ли вы использовали команду docker search с фильтром is-official=true.

Отключение репозитория из определенного реестра

На этом последнем этапе мы сосредоточимся на том, как контролировать загрузку образов из определенного реестра. Docker может взаимодействовать с несколькими реестрами, такими как Docker Hub (по умолчанию), Google Container Registry, Amazon Elastic Container Registry или ваш собственный частный реестр. "Отключить" репозиторий из определенного реестра означает убедиться, что Docker не пытается загрузить определенный образ из этого конкретного источника.

Как мы узнали на предыдущих этапах, Docker загружает образы на основе указанного имени образа. Если вы укажете полное имя образа, такое как myregistry.example.com/myimage:latest, Docker попытается загрузить его из myregistry.example.com. Если вы укажете простое имя, такое как myimage, Docker будет искать в своих настроенных реестрах, начиная по умолчанию с Docker Hub.

Для эффективного "отключения" репозитория, такого как myimage, из определенного реестра, такого как myregistry.example.com, самым простым методом является просто избегать использования полного имени myregistry.example.com/myimage:latest в командах docker pull или docker run. Вместо этого вы можете загрузить образ из другого реестра или использовать другое имя образа.

Поскольку в этой лабораторной среде у нас нет настроенного собственного реестра, мы продемонстрируем концепцию, попробовав загрузить образ из гипотетического реестра, который не существует. Это покажет вам поведение Docker, когда он не может получить доступ к репозиторию в указанном реестре.

Попробуем загрузить образ с именем testimage из гипотетического реестра nonexistentregistry.example.com.

docker pull nonexistentregistry.example.com/testimage:latest

Вы получите сообщение об ошибке, указывающее, что Docker не смог подключиться к реестру или найти образ. Это демонстрирует, что, указав реестр, который недоступен или не содержит репозиторий, вы фактически "отключаете" загрузку этого репозитория из этого конкретного источника.

В реальной ситуации, если у вас настроено несколько реестров, вы будете контролировать, из какого реестра Docker загружает образы, используя соответствующее полное имя образа. Чтобы "отключить" репозиторий из определенного реестра, вы должны убедиться, что ваши рабочие процессы и команды настроены на загрузку этого образа из другого реестра или вообще не загружать его.

Для более продвинутой настройки, такой как настройка демона Docker для исключения определенных реестров или использование прокси-сервера, также можно использовать для применения политик, которые определяют, какие реестры разрешены. Однако основной принцип остается тем же: контроль имени образа, используемого в командах docker pull и docker run, определяет, какой реестр Docker будет пытаться использовать.

Для проверки этого этапа мы проверим, пытались ли вы загрузить образ, указав гипотетическое имя реестра. Мы можем проверить историю команд для команды docker pull nonexistentregistry.example.com/testimage:latest.

Резюме

В этой лабораторной работе мы рассмотрели концепцию управления источниками образов в Docker, сосредоточившись на том, как эффективно "отключить" определенные репозитории для загрузки образов. Мы узнали, что хотя Docker не имеет прямой команды disable для отдельных репозиториев в традиционном смысле, мы можем достичь этого, понимая и контролируя, как мы указываем имена образов во время операций docker pull или docker run. По умолчанию Docker загружает образы из Docker Hub, и указание полного имени образа с префиксом реестра направляет Docker на загрузку из этого конкретного места. Поэтому, чтобы избежать загрузки из определенного репозитория в определенном реестре, мы просто не используем полное имя образа, которое включает этот реестр.

Мы практиковали загрузку образов из стандартного Docker Hub и обсудили, как указание другого реестра изменит источник. Основная мысль заключается в том, что управление теми репозиториями, которые Docker использует для загрузки образов, в основном достигается путем явного указания имен образов с префиксами реестров, а не с помощью глобальной команды отключения. Это позволяет осуществлять детальный контроль над источниками образов по соображениям безопасности и эксплуатации.