Гайд по безопасной сборке Docker-образов для продакшена
Всем привет. Сегодня разберем, как перестать тащить гигабайты мусора в свои Docker-образы и сделать их безопасными. А то смотришь иногда на проекты коллег — там в проде крутится настоящий неповоротливый kraken, весящий под три гигабайта и содержащий кучу уязвимостей. Избавиться от этого левиафана не так уж сложно, если следовать базовым правилам гигиены контейнеризации
Вот несколько простых, но рабочих шагов, которые сэкономят вам кучу места на диске и нервов при аудите безопасности:
- Используйте многоэтапную сборку (multi-stage builds). Это вообще база. Собирайте бинарники или компилируйте ассеты в одном тяжелом контейнере со всеми компиляторами, а запускайте в другом — чистом и минималистичном. В итоге в прод улетает только готовый продакшен-код.
- Выбирайте правильные базовые образы. Забудьте про дефолтный ubuntu или node:latest. Берите alpine или distroless образы. Чем меньше пакетов в системе, тем меньше дыр для потенциального взлома.
- Никогда не запускайте контейнеры под root-пользователем. Это критично. Создайте отдельного системного юзера внутри Dockerfile с ограниченными правами и переключитесь на него через команду USER. Если злоумышленник проломит приложение, он хотя бы не получит root на хост-машине
- Чистите кэш пакетных менеджеров. После условного apt-get install обязательно выполняйте очистку кэша в той же инструкции RUN. Иначе эти временные файлы навсегда осядут в слоях вашего образа, раздувая его размер.
Соблюдение этих правил снизит риски взлома на порядок, да и CI/CD пайплайны начнут работать гораздо быстрее. Настройте автоматический скан образов в Trivy или Snyk на этапе сборки, и спите спокойно