Выбор ответа Middle Docker для разработчика обновлено

Удаление файла в следующем слое

Вопрос

Уменьшится ли образ после второй строки?

RUN curl -o /tmp/sdk.tar.gz https://example.com/sdk.tar.gz && tar -xzf /tmp/sdk.tar.gz -C /opt
RUN rm /tmp/sdk.tar.gz

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Нет: архив остался в предыдущем слое. Слои неизменяемы.

Варианты ответа

  1. Да, архив удалён, и образ стал меньше на его размер
  2. Нет, потому что /tmp не удаляется в контейнерах
  3. Да, но только после docker image prune
  4. Нет: архив остался в предыдущем слоеправильный ответ

Разбор

Слои неизменяемы. Удаление в следующем слое скрывает файл, но байты остаются в слое, где его создали, и образ не уменьшается. Удалять нужно в той же инструкции: ... && tar ... && rm /tmp/sdk.tar.gz. Ещё лучше вынести загрузку в отдельную стадию multi-stage сборки.

  • prune удаляет неиспользуемые образы, а не слои внутри используемого.
  • /tmp удаляется как любая папка, дело в слоях.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.