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

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

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

Введение

В этом лабораторном занятии вы узнаете, как использовать команду docker manifest inspect для просмотра манифестов образов. Мы начнем с загрузки многоархитектурного Docker-образа, а именно образа alpine, чтобы понять, как Docker обрабатывает образы для разных архитектур.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/pull("Pull Image from Repository") subgraph Lab Skills docker/inspect -.-> lab-555170{{"Как использовать команду docker manifest inspect для просмотра манифестов образов"}} docker/pull -.-> lab-555170{{"Как использовать команду docker manifest inspect для просмотра манифестов образов"}} end

Загрузка многоархитектурного образа

На этом этапе мы узнаем, как загрузить многоархитектурный Docker-образ. Многоархитектурный образ - это один тег образа, который можно использовать на разных архитектурах (например, amd64, arm64 и т.д.). Когда вы загружаете многоархитектурный образ, Docker автоматически выбирает правильный слой образа для архитектуры вашей системы.

Мы загрузим образ alpine, который представляет собой легковесное дистрибутив Linux, часто используемое в Docker-контейнерах. Образ alpine доступен как многоархитектурный образ.

Чтобы загрузить образ alpine, откройте терминал и выполните следующую команду:

docker pull alpine

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

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

Using default tag: latest
latest: Pulling from library/alpine
... (output showing download progress)
Digest: sha256:...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

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

После завершения выполнения команды образ alpine будет доступен на вашей виртуальной машине LabEx и готов к использованию для запуска контейнеров.

Просмотр списка манифестов многоархитектурного образа

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

Чтобы посмотреть список манифестов для образа alpine:latest, мы можем использовать команду docker manifest inspect. Эта команда позволяет просматривать детали манифеста образа или списка манифестов.

Выполните следующую команду в терминале:

docker manifest inspect alpine:latest

Эта команда выведет JSON-документ, представляющий список манифестов для образа alpine:latest. В выводе будет показан список manifests, каждый из которых соответствует другой архитектуре (например, amd64, arm64, arm/v7 и т.д.). Каждый манифест в списке будет содержать такие детали, как platform (архитектура и операционная система) и digest (уникальный идентификатор манифеста образа для конкретной архитектуры).

Вы увидите вывод, похожий на следующий (точные значения digest и количество манифестов могут отличаться):

{
   "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": "arm",
            "os": "linux",
            "variant": "v6"
         }
      },
      ...
   ]
}

Этот вывод подтверждает, что alpine:latest действительно представляет собой список манифестов, содержащий манифесты для различных архитектур. Именно так Docker знает, какой конкретный образ загружать для вашей системы, когда вы используете многоархитектурный тег.

Просмотр конкретного манифеста образа в списке

На предыдущем этапе мы просмотрели список манифестов для образа alpine:latest. Этот список содержал несколько записей, каждая из которых указывала на конкретный манифест образа для другой архитектуры. Теперь давайте рассмотрим один из этих конкретных манифестов образа.

Для просмотра конкретного манифеста нам нужен его digest (хэш-сумма). Из вывода команды docker manifest inspect alpine:latest найдите digest для архитектуры, соответствующей вашей виртуальной машине LabEx (это amd64). Digest будет выглядеть как sha256:....

После того, как у вас будет digest для манифеста amd64, вы можете просмотреть его, используя команду docker manifest inspect, за которой следует имя образа и digest, разделенные символом @.

Замените YOUR_AMD64_DIGEST на фактический digest, который вы нашли для платформы amd64 в выводе предыдущего шага.

docker manifest inspect alpine@YOUR_AMD64_DIGEST

Например, если digest для amd64 был sha256:f70734b6a266dcb51c52a820c34f3204cc6897445f6510b7a5be74d30a72f227, команда будет выглядеть так:

docker manifest inspect alpine@sha256:f70734b6a266dcb51c52a820c34f3204cc6897445f6510b7a5be74d30a72f227

Эта команда выведет JSON-документ, представляющий конкретный манифест образа для архитектуры amd64. Этот манифест содержит сведения о слоях образа (идентифицируемых по их digest) и конфигурации образа (также идентифицируемой по digest).

Вы увидите вывод, похожий на следующий:

{
  "schemaVersion": 2,
  "mediaType": "application/vnd.docker.distribution.manifest.v2+json",
  "config": {
    "mediaType": "application/vnd.docker.container.image.v1+json",
    "size": 1510,
    "digest": "sha256:..."
  },
  "layers": [
    {
      "mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
      "size": 2803897,
      "digest": "sha256:..."
    }
  ]
}

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

Просмотр манифеста с расширенным выводом

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

Давайте снова просмотрим список манифестов для образа alpine:latest, но на этот раз с флагом --verbose. Это покажет список манифестов и для каждого манифеста в списке также покажет полные детали конфигурации.

Выполните следующую команду в терминале:

docker manifest inspect --verbose alpine:latest

Эта команда выведет более обширный JSON-документ. Для каждой записи в списке manifests теперь вы увидите дополнительное поле с именем Config. Это поле Config содержит полную конфигурацию образа для конкретной архитектуры, включая такие детали, как точка входа (entrypoint), команда (command), переменные окружения, рабочая директория и т.д.

Вы увидите вывод, похожий на следующий (точные детали в разделе Config могут отличаться):

{
   "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"
         },
         "Config": {
            "Env": [
               "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Entrypoint": [
               "/bin/sh"
            ],
            "Cmd": null,
            "WorkingDir": "/",
            ...
         }
      },
      ...
   ]
}

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

Резюме

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

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