Сильнее второй вариант: сначала файл зависимостей и их установка, затем исходники; приложение запускается непривилегированным пользователем. Он решает обе обозначенные проблемы.
Dockerfile: кеш зависимостей и непривилегированный запуск
Сильнее второй вариант: сначала файл зависимостей и их установка, затем исходники; приложение запускается непривилегированным пользователем. Он решает обе обозначенные проблемы.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Практическое задание
Искусственный интеллект предлагает Dockerfile с COPY . . до установки зависимостей и запуском приложения от root. Какой вариант ревью сильнее?
- Оставить root, но добавить EXPOSE.
- Сначала скопировать файл зависимостей, установить их, затем код; добавить непривилегированного пользователя.
- Только переставить COPY файла зависимостей.
- Добавить ещё один порт для отладки.
- Ничего не менять: контейнер изолирован.
- Добавить непривилегированного пользователя и оставить порядок слоёв.
Ответ
Сильнее второй вариант: сначала файл зависимостей и их установка, затем исходники; приложение запускается непривилегированным пользователем. Он решает обе обозначенные проблемы.
Разделение слоёв позволяет повторно использовать кеш установки зависимостей, пока их описание не изменилось. Непривилегированный пользователь уменьшает последствия компрометации процесса; контейнерная изоляция не делает root автоматически безопасным.
В ревью также проверьте lock-файл, права на рабочие каталоги и .dockerignore, чтобы секреты и лишние файлы не попадали в образ. EXPOSE лишь описывает порт и не заменяет ограничения привилегий. Перестановка только одного слоя или изменение только пользователя оставляет вторую проблему нерешённой.