Введение
В этой лабораторной работе вы научитесь использовать команду docker buildx history export для управления и экспорта истории сборки Docker. Мы начнём с создания простого Docker-образа и изучения его истории сборки с помощью команды docker history.
Затем вы узнаете, как экспортировать историю сборки конкретного образа в файл. В завершение мы рассмотрим, как экспортировать все записи сборки для заданного билдера, что даст вам полный обзор вашей деятельности по сборке. Эта лабораторная работа предоставит вам навыки для эффективного отслеживания и управления процессами сборки Docker-образов.
Создание простого образа и просмотр его истории
На этом шаге мы научимся создавать простой 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'а, продемонстрировав способы сохранения и анализа деталей сборки.



