Как использовать docker buildx history export для экспорта истории сборки

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

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

Введение

В этой лабораторной работе вы научитесь использовать команду docker buildx history export для управления и экспорта истории сборки Docker. Мы начнём с создания простого Docker-образа и изучения его истории сборки с помощью команды docker history.

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


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL docker(("Docker")) -.-> docker/ImageOperationsGroup(["Image Operations"]) docker(("Docker")) -.-> docker/DockerfileGroup(["Dockerfile"]) docker/ImageOperationsGroup -.-> docker/images("List Images") docker/DockerfileGroup -.-> docker/build("Build Image from Dockerfile") subgraph Lab Skills docker/images -.-> lab-555049{{"Как использовать docker buildx history export для экспорта истории сборки"}} docker/build -.-> lab-555049{{"Как использовать docker buildx history export для экспорта истории сборки"}} end

Создание простого образа и просмотр его истории

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

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

cd ~/project

Теперь создадим простой Dockerfile. Мы создадим файл с именем Dockerfile в директории ~/project.

nano Dockerfile

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

FROM ubuntu:latest
RUN echo "Hello, Docker!" > /app/hello.txt
CMD ["cat", "/app/hello.txt"]

Этот Dockerfile выполняет следующее:

  • FROM ubuntu:latest: Эта строка указывает базовый образ для нашего нового образа. Мы используем последнюю версию образа Ubuntu из Docker Hub.
  • RUN echo "Hello, Docker!" > /app/hello.txt: Эта строка выполняет команду во время сборки образа. Она создаёт директорию /app и записывает текст "Hello, Docker!" в файл hello.txt внутри этой директории.
  • CMD ["cat", "/app/hello.txt"]: Эта строка указывает команду по умолчанию, которая выполняется при запуске контейнера из этого образа. Она выполнит команду cat /app/hello.txt, которая выведет содержимое файла hello.txt.

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

Теперь соберём Docker-образ с помощью команды docker build. Мы присвоим образу имя my-hello-image и тег latest. Символ . в конце команды указывает, что Dockerfile находится в текущей директории.

docker build -t my-hello-image:latest .

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

После сборки образа вы можете просмотреть его историю с помощью команды docker history. Эта команда показывает слои, из которых состоит образ, и команды, использованные для создания каждого слоя.

docker history my-hello-image:latest

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

Экспорт истории сборки в файл

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

Мы можем перенаправить вывод команды docker history в файл с помощью стандартного оператора перенаправления вывода >. Давайте экспортируем историю образа my-hello-image:latest в файл с именем history.txt в директории ~/project.

Убедитесь, что находитесь в директории ~/project:

cd ~/project

Теперь выполните следующую команду для экспорта истории:

docker history my-hello-image:latest > history.txt

Эта команда выполнит docker history my-hello-image:latest и вместо вывода на экран запишет результат в файл history.txt.

Вы можете проверить создание файла и его содержимое с помощью команды cat:

cat history.txt

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

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

Экспорт всех записей сборки для builder'а

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

Для экспорта всех записей сборки мы можем использовать команду docker buildx build с флагом --metadata-file. Этот флаг позволяет указать файл, в который будут записаны метаданные сборки, включая записи сборки, в формате JSON.

Сначала убедитесь, что находитесь в директории ~/project:

cd ~/project

Теперь давайте соберем образ снова, но на этот раз экспортируем метаданные сборки в файл build-records.json. Мы будем использовать тот же Dockerfile, который создали на первом шаге.

docker buildx build --metadata-file build-records.json -t my-hello-image:latest .

Команда docker buildx build является частью плагина Docker Buildx, который предоставляет расширенные возможности сборки. Флаг --metadata-file build-records.json указывает BuildKit записать метаданные сборки в указанный файл.

После завершения сборки в директории ~/project будет создан файл build-records.json. Этот файл содержит подробную информацию о процессе сборки в формате JSON.

Вы можете просмотреть содержимое файла build-records.json с помощью команды cat:

cat build-records.json

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

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

Итоги

В этой лабораторной работе мы научились создавать простой Docker-образ, составив Dockerfile с инструкциями для процесса сборки. Это включало указание базового образа, выполнение команд во время сборки и определение команды по умолчанию для контейнеров. Затем мы использовали команду docker build для создания образа и присвоили ему тег для удобства идентификации.

После сборки образа мы изучили, как просматривать его историю с помощью команды docker history, которая показывает слои и команды, использованные для построения образа. Далее в лабораторной работе мы экспортировали историю сборки конкретного образа в файл с помощью docker buildx history export, а затем экспортировали все записи сборки для текущего builder'а, продемонстрировав способы сохранения и анализа деталей сборки.