Кеш сборки в Docker
Кеш сборки повторно использует шаг, который не менялся, и заново выполняет только с измененной строки. Каждая строка файла шагов даёт отдельную ступень. Служба сравнивает текст и решает, что пересобирать.
Первый рецепт для образа
cache записывает
слово в файл и печатает
его при старте.
Файл шагов в первом виде
такой:
FROM alpine
RUN echo one > /a.txt
CMD ["cat", "/a.txt"]
Первая сборка с меткой
-t cache . выполнит
обе строки с действием.
В файле окажется слово
one, и запуск его покажет.
Выполним первую сборку:
docker build -t cache .
Потом меняют только вторую
строку: вместо one
запишут two.
Первая строка с основой
остаётся прежней.
Файл шагов во втором виде
такой:
FROM alpine
RUN echo two > /a.txt
CMD ["cat", "/a.txt"]
Вторая сборка с тем же именем берёт готовый первый шаг с основой и заново делает только запись в файл. Сообщения в терминале покажут, что верхняя ступень взята из кеша. Выполним повторную сборку:
docker build -t cache .
Запуск после второй сборки
напечатает слово two.
Проверка подтверждает,
что изменился только
затронутый слой.
Откроем вывод так:
docker run --rm cache
Соберите образ step дважды подряд, во второй раз меняя только последнюю команду записи файла.
Напишите, какой шаг при второй сборке можно не повторять.