Каждое выполнение команды RUN
создает временный контейнер из последнего полученного изображения, выполняет ваши команды и сохраняет результат как новый слой. Минимизация команд RUN
уменьшает количество накладных расходов из этих промежуточных контейнеров, но также может значительно уменьшить размер полученного изображения.
Если, например, вы выполняете две команды запуска, которые загружают 1 гигабайт данных, а вторую, которая удаляет этот гид данных, получившееся изображение будет превышать один концерт, даже если он не отображается в запущенном контейнере.
Поэтому при выполнении больших загрузок кешированных файлов для установки или сборки приложения и очистки по завершении сборки, это хорошая практика сделать это как один шаг, поэтому удаленные файлы никогда не превращают его в любую часть изображения.
Последняя причина для кеша. Если вам нужно вытащить новую версию приложения из репозитория пакета, вы также хотите обновить свою информацию в этом удаленном репозитории (например, apt-get update
), прежде чем выполнять установку, чтобы вытащить последнюю версию. Если вы отделите apt-get update
от apt-get install
, команда обновления может быть кэширована из старой сборки, и установка попытается вытащить старые или несуществующие файлы.
См. [Рекомендации по написанию докеров] (https://docs.docker.com/engine/userguide/eng-image/dockerfile_best-practices/) – jwodder