Василий Банников, да, но даже если смотреть на node_modules, а на слой с кодом. Хоть он и меньше по размеру, но тоже зря загружается целиком. Интересно, можно ли изменить реализацию docker push/pull, чтобы всё сильно ускорить
Но если хотя бы один файл изменится в node_modules, будет создан новый слой и весь его нужно будет грузить на registry, чтобы потом деплоить.
В поведении слоёв никакой проблемы нет, всё правильно и ваш способ даже поможет не создавать лишний раз новый слой. Меня не устраивает поведение команд docker push/pull.
Представьте, что мы можем изменить реализацию этих команд.
Альтернативный docker push берёт нужный образ и помещает его через docker save в архив. Этот архив нужно разархивировать вместе со всеми слоями внутри и запушить в специальный git-репозиторий.
Альтернативный docker pull скачивает нужный образ из определённой ветки или тега в гите, собирает обратно из него архив и через docker load загружает образ в докер.
По времени должно работать быстрее, потому что будут догружены только те файлы, которые изменились.
Минусы в таком подходе тоже есть: каждый git fetch вынужден грузить абсолютно все изменения (все версии).
Можно думать над велосипедами в эту сторону (может быть rsync вместо git), но вдруг уже есть готовое решение...