Как использовать команду docker manifest push для отправки списка манифестов

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

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

Введение

В этом практическом занятии (лабораторной работе) вы научитесь эффективно использовать команду docker manifest push для управления многоархитектурными образами. Сначала мы создадим список манифестов, который позволяет одному имени образа ссылаться на образы, собранные для разных архитектур и операционных систем.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/SystemManagementGroup(["System Management"]) docker/ContainerOperationsGroup -.-> docker/run("Run a Container") docker/ContainerOperationsGroup -.-> docker/stop("Stop Container") docker/ContainerOperationsGroup -.-> docker/rm("Remove Container") docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") docker/ImageOperationsGroup -.-> docker/tag("Tag an Image") docker/ImageOperationsGroup -.-> docker/push("Push Image to Repository") docker/SystemManagementGroup -.-> docker/login("Log into Docker Registry") subgraph Lab Skills docker/run -.-> lab-555171{{"Как использовать команду docker manifest push для отправки списка манифестов"}} docker/stop -.-> lab-555171{{"Как использовать команду docker manifest push для отправки списка манифестов"}} docker/rm -.-> lab-555171{{"Как использовать команду docker manifest push для отправки списка манифестов"}} docker/inspect -.-> lab-555171{{"Как использовать команду docker manifest push для отправки списка манифестов"}} docker/pull -.-> lab-555171{{"Как использовать команду docker manifest push для отправки списка манифестов"}} docker/tag -.-> lab-555171{{"Как использовать команду docker manifest push для отправки списка манифестов"}} docker/push -.-> lab-555171{{"Как использовать команду docker manifest push для отправки списка манифестов"}} docker/login -.-> lab-555171{{"Как использовать команду docker manifest push для отправки списка манифестов"}} end

Создание списка манифестов

На этом этапе мы научимся создавать список манифестов с помощью команды docker manifest create. Список манифестов представляет собой список манифестов образов, который позволяет использовать одно имя для обращения к образам для разных архитектур и операционных систем. Это особенно полезно при создании многоархитектурных образов.

Сначала давайте загрузим два разных образа, которые мы будем использовать для создания нашего списка манифестов. Мы будем использовать образ alpine для архитектур amd64 и arm64.

docker pull alpine:latest
docker pull arm64v8/alpine:latest

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

latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
latest: Pulling from arm64v8/alpine
...
Status: Downloaded newer image for arm64v8/alpine:latest

Теперь мы создадим список манифестов с именем my-alpine:latest, который включает два образа, которые мы только что загрузили. Синтаксис команды: docker manifest create MANIFEST_LIST IMAGE [IMAGE...].

docker manifest create my-alpine:latest alpine:latest arm64v8/alpine:latest

Если команда выполнена успешно, вы не увидите никакого вывода. Эта команда создает локальный список манифестов. Чтобы посмотреть информацию о списке манифестов, вы можете использовать команду docker manifest inspect.

docker manifest inspect my-alpine:latest

Вы должны увидеть вывод, похожий на этот, показывающий детали списка манифестов, включая манифесты для архитектур amd64 и arm64.

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
  "manifests": [
    {
      "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
      "size": 528,
      "digest": "sha256:...",
      "platform": {
        "architecture": "amd64",
        "os": "linux"
      }
    },
    {
      "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
      "size": 528,
      "digest": "sha256:...",
      "platform": {
        "architecture": "arm64",
        "os": "linux"
      }
    }
  ]
}

Это подтверждает, что список манифестов my-alpine:latest успешно создан и включает указанные образы.

Отправка списка манифестов в реестр

На этом этапе мы отправим список манифестов, который мы создали на предыдущем этапе, в Docker-реестр. По умолчанию команда docker push отправляет отдельные образы. Чтобы отправить список манифестов, вам нужно использовать команду docker manifest push.

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

docker login

Вам будет предложено ввести имя пользователя и пароль от Docker Hub. Введите свои учетные данные для входа.

Login with your Docker ID to push and pull images, scan them for vulnerabilities, sign and attest to them, and more.
Username: your_docker_username
Password: your_docker_password
Login Succeeded

Теперь, когда вы вошли в систему, вы можете отправить список манифестов. Формат для отправки в Docker Hub: your_docker_username/manifest_list_name:tag. Предположим, что ваше имя пользователя в Docker Hub - your_docker_username. Замените your_docker_username на ваше реальное имя пользователя в Docker Hub.

docker manifest push your_docker_username/my-alpine:latest

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

Pushed manifest list your_docker_username/my-alpine:latest

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

Отправка списка манифестов в небезопасный реестр

На этом этапе мы узнаем, как отправить список манифестов в небезопасный реестр. Небезопасный реестр - это реестр, который не использует сертификаты TLS/SSL. Использование таких реестров не рекомендуется в производственных средах, но они могут быть полезны для тестирования или внутренних сетей.

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

В рамках этого практического занятия (лабораторной работы) мы имитируем небезопасный реестр, используя локальный реестр, работающий без TLS. Сначала запустим контейнер локального реестра. Мы сопоставим порт 5000 на хосте с портом 5000 в контейнере.

docker run -d -p 5000:5000 --name registry registry:2

Вы должны увидеть вывод, похожий на этот, который указывает, что контейнер запущен:

Unable to find image 'registry:2' locally
2: Pulling from library/registry
...
Status: Downloaded newer image for registry:2
a1b2c3d4e5f6...

Теперь нам нужно настроить демон Docker так, чтобы он доверял этому небезопасному реестру по адресу localhost:5000. Для этого необходимо изменить файл конфигурации демона Docker. Расположение этого файла может различаться, но на большинстве систем Linux он находится по пути /etc/docker/daemon.json.

Мы будем использовать sudo nano для редактирования этого файла.

sudo nano /etc/docker/daemon.json

Если файл не существует, вы можете его создать. Добавьте или измените ключ insecure-registries, чтобы он включал localhost:5000. Содержимое файла должно выглядеть следующим образом:

{
  "insecure-registries": ["localhost:5000"]
}

Сохраните файл и выйдите из редактора (Ctrl+X, Y, Enter в nano).

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

sudo systemctl restart docker

Теперь вы можете пометить список манифестов адресом небезопасного реестра и отправить его. Мы будем использовать список манифестов my-alpine:latest, созданный на первом этапе.

docker manifest create localhost:5000/my-alpine:latest alpine:latest arm64v8/alpine:latest
docker manifest push localhost:5000/my-alpine:latest

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

Pushed manifest list localhost:5000/my-alpine:latest

Это демонстрирует, как отправить список манифестов в небезопасный реестр после настройки демона Docker.

Отправка и удаление локального списка манифестов

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

Команда docker manifest push имеет флаг --purge, который удаляет локальный список манифестов после его успешной отправки в реестр.

Сначала убедимся, что у нас локально есть список манифестов my-alpine:latest. Мы создали его на первом этапе. Вы можете проверить его существование.

docker manifest inspect my-alpine:latest

Вы должны увидеть детали списка манифестов, как и раньше.

Теперь мы снова отправим этот список манифестов в Docker Hub, но на этот раз мы будем использовать флаг --purge. Не забудьте заменить your_docker_username на ваше реальное имя пользователя в Docker Hub.

docker manifest push --purge your_docker_username/my-alpine:latest

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

Pushed manifest list your_docker_username/my-alpine:latest
Purged manifest list your_docker_username/my-alpine:latest

После завершения команды локальный список манифестов my-alpine:latest больше не должен существовать. Вы можете проверить это, попробовав снова проверить его.

docker manifest inspect my-alpine:latest

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

no such manifest: my-alpine:latest

Это подтверждает, что флаг --purge успешно удалил локальный список манифестов после его отправки в реестр.

Наконец, очистим локальный контейнер небезопасного реестра, который мы запустили на предыдущем этапе.

docker stop registry
docker rm registry

Вы должны увидеть вывод, подтверждающий, что контейнер остановлен и удален.

registry
registry

Резюме

В рамках этого практического занятия (лабораторной работы) мы научились использовать команду docker manifest для управления многоархитектурными образами. Мы начали с того, что скачали две версии образа alpine для разных архитектур. Затем мы использовали команду docker manifest create для объединения этих образов в единый список манифестов, что позволяет ссылаться на них одним именем. Мы проверили создание списка манифестов с помощью команды docker manifest inspect.

Затем мы изучили, как отправить этот список манифестов в реестр Docker с использованием команды docker manifest push. Мы также рассмотрели особый случай отправки в небезопасный реестр с помощью добавления флага --insecure. Наконец, мы научились отправлять список манифестов и одновременно удалять локальную копию, используя флаг --purge с командой docker manifest push.