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

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

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

Введение

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

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


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-555058{{"Как использовать команду docker buildx imagetools inspect для проверки деталей образов"}} docker/pull -.-> lab-555058{{"Как использовать команду docker buildx imagetools inspect для проверки деталей образов"}} end

Проверка одноплатформенного образа

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

Сначала загрузим простой одноплатформенный образ. Для примера будем использовать образ hello-world.

docker pull hello-world

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

Using default tag: latest
latest: Pulling from library/hello-world
...
Status: Downloaded newer image for hello-world:latest
docker.io/library/hello-world:latest

Теперь, когда образ загружен, мы можем его проверить. Используйте команду docker image inspect с указанием имени образа.

docker image inspect hello-world

Эта команда выведет большой JSON-объект, содержащий различные детали об образе hello-world. Вы увидите такую информацию, как ID образа, дата создания, архитектура, операционная система и конфигурация.

[
    {
        "Id": "sha256:...",
        "RepoTags": [
            "hello-world:latest"
        ],
        "RepoDigests": [
            "hello-world@sha256:..."
        ],
        "Parent": "",
        "Comment": "",
        "Created": "...",
        "Container": "...",
        "ContainerConfig": {
            ...
        },
        "DockerVersion": "...",
        "Author": "",
        "Config": {
            ...
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": ...,
        "VirtualSize": ...,
        "GraphDriver": {
            ...
        },
        "RootFS": {
            ...
        },
        "Metadata": {
            ...
        }
    }
]

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

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

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

Давайте загрузим мультиплатформенный образ. В качестве примера используем образ alpine — легковесный дистрибутив Linux.

docker pull alpine

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

Using default tag: latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

Теперь проверим образ alpine с помощью команды docker image inspect.

docker image inspect alpine

Результатом снова будет JSON-объект. Обратите внимание на поля Architecture и Os — они отражают архитектуру и операционную систему образа, который был загружен для вашего окружения.

[
    {
        "Id": "sha256:...",
        "RepoTags": [
            "alpine:latest"
        ],
        "RepoDigests": [
            "alpine@sha256:..."
        ],
        "Parent": "",
        "Comment": "",
        "Created": "...",
        "Container": "...",
        "ContainerConfig": {
            ...
        },
        "DockerVersion": "...",
        "Author": "",
        "Config": {
            ...
        },
        "Architecture": "amd64",
        "Os": "linux",
        "Size": ...,
        "VirtualSize": ...,
        "GraphDriver": {
            ...
        },
        "RootFS": {
            ...
        },
        "Metadata": {
            ...
        }
    }
]

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

Форматирование вывода с использованием Go-шаблонов

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

Команда docker image inspect поддерживает флаг --format, который принимает строку Go-шаблона в качестве аргумента. Go-шаблоны позволяют обращаться к полям JSON-вывода с использованием точечной нотации.

Давайте снова проверим образ alpine, но на этот раз отформатируем вывод, чтобы показать только ID образа и архитектуру.

docker image inspect --format 'ID: {{.Id}}, Architecture: {{.Architecture}}' alpine

В этой команде {{.Id}} обращается к полю Id, а {{.Architecture}} — к полю Architecture из JSON-вывода.

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

ID: sha256:..., Architecture: amd64

Вы также можете обращаться к вложенным полям. Например, чтобы получить операционную систему, которая находится в основном объекте, вы бы использовали {{.Os}}. Давайте попробуем отобразить ID, архитектуру и операционную систему.

docker image inspect --format 'ID: {{.Id}}, Architecture: {{.Architecture}}, OS: {{.Os}}' alpine

Теперь вывод будет включать операционную систему:

ID: sha256:..., Architecture: amd64, OS: linux

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

Просмотр raw JSON манифеста

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

Для просмотра raw манифеста можно использовать команду docker manifest inspect. Эта команда особенно полезна для анализа мультиплатформенных образов.

Давайте проверим манифест образа alpine, который мы загрузили ранее.

docker manifest inspect alpine

Эта команда выведет JSON-объект, представляющий манифест образа. Для мультиплатформенного образа, такого как alpine, этот манифест будет представлять собой "список манифестов" (также известный как "индекс"). Этот список содержит записи для каждой поддерживаемой архитектуры, указывая на конкретный манифест образа для данной архитектуры.

Вы увидите вывод, похожий на этот (точное содержимое может незначительно отличаться в зависимости от версии образа и вашей Docker-установки):

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

Обратите внимание на массив manifests. Каждый объект в этом массиве представляет конкретный образ для определенной платформы (архитектуры и ОС). Поле platform указывает архитектуру и операционную систему для каждой записи. Поле digest является уникальным идентификатором манифеста образа для конкретной платформы.

Этот raw манифест дает более глубокое понимание структуры мультиплатформенных образов и позволяет увидеть все доступные варианты под одним тегом.

Итоги

В этой лабораторной работе вы научились использовать команду docker image inspect для изучения деталей Docker-образов. Вы начали с проверки одноплатформенного образа, в частности hello-world, и увидели, как команда предоставляет полный JSON-вывод, содержащий такую информацию, как ID образа, архитектура, ОС и конфигурация.

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