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

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

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

Введение

В этой лабораторной работе вы научитесь использовать команду docker buildx history inspect attachment для проверки вложений (attachments), связанных со сборкой Docker-образов. Вы начнёте с создания Docker-образа и прикрепления файла к нему с помощью флага --attest.

После сборки вы изучите, как просмотреть историю сборки, чтобы идентифицировать ссылку (reference) на сборку, содержащую вложение. Затем вы попрактикуетесь в проверке прикреплённого файла, используя полученную ссылку, а также уточните проверку, указав тип вложения и платформу. Этот практический опыт продемонстрирует, как получать доступ и проверять метаданные, встроенные в ваши Docker-образы.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker(("Docker")) -.-> docker/ContainerOperationsGroup(["Container Operations"]) docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker/ContainerOperationsGroup -.-> docker/inspect("Inspect Container") docker/ImageOperationsGroup -.-> docker/images("List Images") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/inspect -.-> lab-555051{{"Как использовать команду docker buildx history inspect attachment для проверки вложений сборки"}} docker/images -.-> lab-555051{{"Как использовать команду docker buildx history inspect attachment для проверки вложений сборки"}} docker/build -.-> lab-555051{{"Как использовать команду docker buildx history inspect attachment для проверки вложений сборки"}} end

Сборка образа с вложением

На этом шаге мы научимся собирать Docker-образ и прикреплять к нему метаданные. Вложения (attachments) позволяют включать дополнительную информацию в образ, такую как данные о происхождении сборки (build provenance), реестр компонентов программного обеспечения (SBOM) или другие релевантные данные.

Сначала создадим простой Dockerfile. Перейдите в директорию ~/project, если вы ещё не там.

cd ~/project

Теперь создадим файл Dockerfile с помощью редактора nano.

nano Dockerfile

Добавьте следующее содержимое в Dockerfile:

FROM alpine:latest
CMD ["echo", "Hello, Docker Attachments!"]

Этот Dockerfile очень прост. Он использует образ alpine:latest в качестве базового и определяет команду для вывода сообщения при запуске контейнера.

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

Далее нам нужно создать файл, который мы прикрепим к образу. Создадим простой текстовый файл attachment.txt.

nano attachment.txt

Добавьте любое содержимое в attachment.txt, например:

This is an example attachment for the Docker image.
It can contain any relevant metadata.

Сохраните файл и выйдите из nano.

Теперь мы соберём Docker-образ и прикрепим файл attachment.txt. Мы используем команду docker build с флагом --attest. Флаг --attest позволяет указать вложение для включения в сборку образа. Формат: type=type,dest=destination,src=source.

В нашем случае мы используем type=sbom (Software Bill of Materials) в качестве типа, dest=/sbom/attachment.txt как путь назначения внутри вложения и src=attachment.txt как исходный файл в локальной файловой системе. Мы также присвоим образу тег my-attached-image:latest.

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

Соберём образ:

docker build -t my-attached-image:latest --attest type=sbom,dest=/sbom/attachment.txt,src=attachment.txt .

Символ . в конце команды указывает на контекст сборки — текущую директорию (~/project).

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

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

docker images

В списке должен отобразиться образ my-attached-image.

Просмотр истории сборки для поиска ссылки

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

Мы можем использовать команду docker buildx imagetools inspect для просмотра информации об образе и связанных с ним вложениях. Эта команда требует указания ссылки на образ.

Давайте проинспектируем собранный образ my-attached-image:latest:

docker buildx imagetools inspect my-attached-image:latest

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

В разделе attestations вы найдёте записи для каждого вложения. Каждая запись содержит поле ref. Это значение ref и есть нужная нам ссылка для проверки содержимого вложения. Оно выглядит примерно так: sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.

Скопируйте значение поля ref для добавленного вами вложения (того, что с type=sbom). Эта ссылка понадобится нам на следующем шаге.

Например, если вывод содержит:

{
  "manifest": {
    ...
  },
  "attestations": [
    {
      "ref": "sha256:abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890",
      "type": "sbom",
      "platform": {
        "architecture": "amd64",
        "os": "linux"
      }
    }
  ]
}

То нужная вам ссылка - sha256:abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890. Обратите внимание, что ваша фактическая ссылка будет отличаться.

Сохраните эту ссылку для использования на следующем шаге.

Проверка вложения по ссылке

На предыдущем шаге мы нашли ссылку (reference) на вложение, связанное с нашим Docker-образом, используя команду docker buildx imagetools inspect. Теперь мы воспользуемся этой ссылкой для проверки содержимого вложения.

Для просмотра деталей конкретного вложения по его ссылке мы можем использовать команду docker buildx attestation inspect.

Вспомните ссылку, полученную на предыдущем шаге. Она должна быть в формате sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.

Замените <attachment_reference> на фактическую скопированную вами ссылку.

docker buildx attestation inspect <attachment_reference>

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

docker buildx attestation inspect sha256:abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890

Эта команда выведет содержимое вложения. Вы должны увидеть текст, который добавили в файл attachment.txt на Шаге 1.

Вывод, скорее всего, будет содержать метаданные о вложении, за которыми следует само содержимое. Найдите раздел с текстом "This is an example attachment...".

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

Проверка вложений с указанием типа и платформы

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

Мы снова воспользуемся командой docker buildx attestation inspect, но на этот раз укажем ссылку на образ, тип вложения и платформу.

Ссылка на образ: my-attached-image:latest
Использованный тип вложения: sbom
Платформа для нашей сборки в среде LabEx обычно linux/amd64

Формат команды: docker buildx attestation inspect <image_reference> --type <attachment_type> --platform <platform>

Проверим вложение этим способом:

docker buildx attestation inspect my-attached-image:latest --type sbom --platform linux/amd64

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

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

Теперь вы научились:

  1. Собирать Docker-образ с вложением
  2. Проверять это вложение как по прямой ссылке
  3. Проверять вложение, указывая образ, тип и платформу

Итоги

В этой лабораторной работе мы изучили, как собрать Docker-образ с прикреплённым файлом, используя команду docker build с флагом --attest, указывая тип вложения, путь назначения внутри вложения и исходный файл. Затем мы рассмотрели, как просмотреть историю сборки с помощью docker buildx history, чтобы определить ссылку на сборку, содержащую вложение.

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