Multi-stage Dockerfile: перенос готового артефакта — задача
Практическая задача Docker: Многоэтапная сборка. Условие описывает предоставленные файлы, доступный базовый образ и требования к сборке или запуску. Изменяйте только разрешённые файлы. Проверьте пути, рабочую директорию, пользователя и различие настроек сборки и запуска. Задача помогает закрепить поведение Dockerfile на конкретном проекте; объяснения и дальнейшая практика находятся в полном курсе Docker для разработчика.
Перенести только готовый артефакт
В рабочем пространстве находится файл source.txt со строкой release=stable. Допишите Dockerfile так, чтобы подготовка отчёта выполнялась в стадии builder, а финальный образ содержал готовый отчёт без учебных файлов сборки. Меняйте только Dockerfile; контекст сборки — корень выданного рабочего пространства.
Обе стадии используют доступный busybox:1.36. Скачивать пакеты и устанавливать компилятор не требуется: файл /build/compiler-only изображает вспомогательный файл сборки. Это отдельное упражнение на упаковку артефакта; локальная лабораторная урока проверяет работу с другим контекстом.
Требования:
- Первая стадия называется
builder, работает в/buildи получает выданныйsource.txt. - В ней создаются готовый отчёт
/out/report.txtс текстомRELEASE=STABLEи учебный файл/build/compiler-only. - Финальная стадия начинается заново с
busybox:1.36, работает в/appи получает только готовый отчёт черезCOPY --from=builder. - В финальном контейнере существуют
/app/report.txt; отсутствуют/build/compiler-onlyи/app/source.txt. - Стандартная команда читает
/app/report.txt. Новый контейнер печатаетRELEASE=STABLEи завершается с кодом 0.
Команда подготовки отчёта дана, чтобы не превращать упражнение в изучение текстовых утилит:
mkdir -p /out && tr a-z A-Z < source.txt > /out/report.txt && touch /build/compiler-only
Здесь tr a-z A-Z переводит латинские буквы в верхний регистр, < читает исходный файл, > сохраняет результат; touch создаёт учебный вспомогательный файл. Разместите подготовку внутри стадии сборки. Примените изученные FROM … AS builder, независимый второй FROM, WORKDIR, COPY --from и CMD.
Автопроверка собирает Dockerfile и проверяет рабочий каталог, наличие результата, отсутствие двух перечисленных файлов, метаданные команды и вывод отдельного контрольного запуска. Она не анализирует порядок инструкций и не доказывает, что вы создали вспомогательный файл именно в builder, использовали независимый второй FROM или перенесли результат именно через COPY --from. Эти требования дополнительно проверьте в своём Dockerfile. Также запустите образ без переопределения команды: контрольная команда автопроверки не заменяет проверку стандартного CMD.
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
