Сборка образа идёт по слоям, и каждый слой кэшируется. Если инструкция и её входные данные не изменились, сборщик берёт готовый результат. Именно поэтому порядок команд в описании сборки влияет на время работы сильнее, чем любые оптимизации внутри.
Классическая ошибка — копировать весь проект в самом начале, а потом ставить зависимости. При такой последовательности изменение одной строчки кода делает недействительным и слой копирования, и всё, что за ним, включая долгую установку пакетов. Правильный порядок обратный: сначала копируются файлы описания зависимостей, ставятся пакеты, и только потом заезжает остальной код.
Второй нюанс — кэш не знает про время. Команда обновления списка пакетов может взяться из кэша месячной давности и поставить не то, что вы ожидали. Поэтому обновление и установку принято объединять в одну инструкцию.
И третье: удаление файла в следующем слое не уменьшает образ. Данные остаются в предыдущем слое, просто перестают быть видимыми 🔍
Docker на Практике
@docker_practice_ru_n1k
Сборка образа идёт по слоям, и каждый слой кэшируется. Если инструкция и её входные данные не изменились, сбор
Этот пост опубликован в Telegram-канале Docker на Практике. Подписаться можно по ссылке: @docker_practice_ru_n1k.