Введение
В этой лабораторной работе вы научитесь использовать команду docker buildx history logs для просмотра логов сборки Docker. Вы начнёте с создания Docker-образа и анализа его истории, чтобы понять процесс сборки и идентифицировать ссылку на сборку (build reference).
Затем вы используете эту ссылку для получения и просмотра детальных логов конкретной сборки. В завершение вы изучите, как просматривать эти логи сборки с различными типами вывода прогресса, что поможет лучше понять выполнение сборки и устранить возможные проблемы.
Сборка образа и просмотр его истории
На этом шаге вы узнаете, как собрать Docker-образ из Dockerfile и просмотреть его историю. История показывает слои, из которых состоит образ, и команды, использованные для создания каждого слоя.
Сначала создадим простой Dockerfile в вашей директории ~/project. Этот Dockerfile создаст образ на основе образа ubuntu и установит пакет curl.
cd ~/project
nano Dockerfile
Добавьте следующее содержимое в Dockerfile:
FROM ubuntu:latest
RUN apt-get update && apt-get install -y curl
Сохраните файл и выйдите из редактора (Ctrl+X, Y, Enter).
Теперь соберём Docker-образ с помощью команды docker build. Мы присвоим образу имя my-ubuntu-curl и тег latest. Символ . в конце команды указывает, что Dockerfile находится в текущей директории.
docker build -t my-ubuntu-curl:latest .
Вы увидите вывод, показывающий процесс сборки, где отображается выполнение каждого шага, определённого в Dockerfile.
После завершения сборки вы можете просмотреть историю образа с помощью команды docker history.
docker history my-ubuntu-curl:latest
В результате будет выведена таблица с информацией о каждом слое, включая ID слоя, время создания, размер и команду, использованную для его создания. Эта история полезна для понимания процесса сборки образа и отладки.
Найти ссылку на сборку из истории
На предыдущем шаге вы собрали Docker-образ и просмотрели его историю. В выводе истории присутствует колонка "BUILD REFERENCE". Эта ссылка представляет собой уникальный идентификатор процесса сборки, создавшего образ. Она отличается от ID образа и относится именно к процессу сборки, а не к результирующим слоям образа.
Давайте снова посмотрим историю, чтобы определить ссылку на сборку.
docker history my-ubuntu-curl:latest
В выводе найдите строку, соответствующую процессу сборки. Обычно это первая строка (не считая слоёв базового образа), в колонке "BUILD REFERENCE" которой будет указано значение. Это значение представляет собой длинную строку символов.
Например, вывод может выглядеть следующим образом (конкретные значения будут отличаться):
IMAGE CREATED CREATED BY SIZE COMMENT BUILD REFERENCE
a1b2c3d4e5f6 2 hours ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
g7h8i9j0k1l2 2 hours ago /bin/sh -c #(nop) ADD file:abcdef1234567890... 73.9MB
m3n4o5p6q7r8 2 hours ago /bin/sh -c apt-get update && apt-get install... 30MB buildkit.dockerfile.v0 buildkit:abcdef1234567890abcdef1234567890
В этом примере ссылка на сборку - buildkit:abcdef1234567890abcdef1234567890. Обратите внимание, что ссылка на сборку часто начинается с buildkit:, за которым следует уникальный идентификатор.
Эта ссылка понадобится вам на следующем шаге для просмотра логов конкретного процесса сборки. Скопируйте ссылку на сборку из вашего вывода.
Просмотр логов конкретной сборки по её идентификатору
На предыдущем шаге вы определили ссылку на сборку (build reference) из истории образа. Эта ссылка позволяет просмотреть подробные логи конкретного процесса сборки. Это особенно полезно для отладки неудачных сборок или понимания точного вывода, сгенерированного во время сборки.
Для просмотра логов конкретной сборки используйте команду docker buildx logs, за которой следует ссылка на сборку. Не забудьте заменить YOUR_BUILD_REFERENCE на фактическую ссылку, найденную на предыдущем шаге.
docker buildx logs YOUR_BUILD_REFERENCE
Например, если ваша ссылка на сборку была buildkit:abcdef1234567890abcdef1234567890, команда будет выглядеть так:
docker buildx logs buildkit:abcdef1234567890abcdef1234567890
Выполнение этой команды отобразит полный вывод процесса сборки, включая вывод каждой инструкции RUN из вашего Dockerfile. Вы увидите вывод команд apt-get update и apt-get install -y curl, какими они выполнялись во время сборки образа.
Это даёт гораздо более детализированное представление о процессе сборки по сравнению с кратким выводом, который показывается при выполнении команды docker build.
Просмотр логов с различными типами вывода прогресса
На этом шаге вы изучите различные способы отображения прогресса сборки при создании Docker-образа. Команда docker build предоставляет несколько вариантов управления отображением хода выполнения сборки.
По умолчанию docker build использует вывод прогресса, который показывает статус каждого шага по мере его выполнения. Давайте пересоберём образ, чтобы снова увидеть этот стандартный вывод.
docker build -t my-ubuntu-curl:latest .
Вы увидите знакомый вывод с шагами типа "Step 1/2", "Step 2/2" и выводом команды RUN.
Теперь попробуем другой тип вывода прогресса с помощью флага --progress. Тип plain отображает процесс сборки в более подробном, построчном формате, что может быть полезно для просмотра точных выполняемых команд и их вывода без индикатора прогресса.
docker build --progress=plain -t my-ubuntu-curl:latest .
Сравните вывод этой команды со стандартным. Вы увидите более детализированный лог каждого действия во время сборки.
Ещё один полезный тип вывода прогресса - tty. Это стандартный вариант при интерактивной сборке в терминале, который предоставляет динамический индикатор прогресса. Однако его явное указание может быть полезно в некоторых сценариях скриптов.
docker build --progress=tty -t my-ubuntu-curl:latest .
Вы снова увидите интерактивный индикатор прогресса, аналогичный первоначальной сборке.
Понимание этих различных типов вывода прогресса позволяет выбрать оптимальный способ мониторинга Docker-сборок - будь то краткое резюме или детальные логи для отладки.
Резюме
В этой лабораторной работе вы научились создавать Docker-образ из Dockerfile и просматривать его историю с помощью команд docker build и docker history. Вы создали простой Dockerfile, собрали образ с тегом my-ubuntu-curl:latest и изучили вывод истории, чтобы понять слои и команды, участвующие в процессе сборки.
Затем вы узнали, как определить уникальную ссылку на сборку (build reference) из вывода docker history. Эта ссылка важна для доступа к специфической информации, связанной со сборкой, такой как логи сборки, которые вы изучите в последующих шагах.



