Безопасность контейнера начинается не в Kubernetes и не в runtime, а в самом Docker-образе. Если образ собран без базовой защиты, уязвимости, лишние пакеты и root-доступ становятся точкой входа для атак. Ниже — практики, которые реально снижают риски.
Выбирайте минимальный базовый образ
Чем меньше компонентов внутри, тем меньше поверхность атаки.
Подходящие варианты:
alpine— компактный, но требует внимания к совместимостиdebian-slim/ubuntu-minimal— баланс удобства и размераdistroless— отличный выбор для production, если shell не нужен
Фиксируйте версию образа
Плохая практика:
FROM node:latestЛучше:
FROM node:20.12.2-alpineТак сборка будет предсказуемой, а неожиданные изменения не попадут в прод.
Не запускайте контейнер от root
Root внутри контейнера — частая ошибка. Создавайте отдельного пользователя:
RUN addgroup -S app && adduser -S app -G app
USER appЭто ограничивает последствия компрометации.
Используйте multi-stage build
Сборочные зависимости не должны попадать в финальный образ.
Пример: компиляция в одном слое, запуск бинаря — в другом. Результат:
- меньше размер образа
- меньше CVE
- чище production-окружение
Удаляйте лишние пакеты и кэш
Не храните в образе curl, git, компиляторы и package cache, если они не нужны приложению на runtime. Чем “чище” образ, тем лучше.
Не кладите секреты в образ
Нельзя:
ENV PASSWORD=...- копировать
.envв image - хранить ключи в слоях
Секреты должны приходить через Secret Manager, Kubernetes Secrets, Vault или переменные окружения на этапе запуска.
Сканируйте уязвимости
Проверяйте образ до публикации:
- Trivy
- Grype
- Docker Scout
Это помогает находить CVE в зависимостях и базовом образе до релиза.
Подписывайте и проверяйте образы
Используйте Cosign, Notary или встроенные механизмы registry. Подпись образа помогает убедиться, что в production разворачивается именно доверенный артефакт.
Настройте .dockerignore
Исключите из контекста сборки:
.gitnode_modules- логи
- локальные конфиги
- секреты
Это ускоряет build и снижает риск утечки файлов в image.
Следите за обновлениями базового образа
Даже если приложение не менялось, базовый образ может получить критические исправления. Регулярный rebuild — обязательная часть container security ♻️
Короткий чек-лист безопасного Docker-образа:
- ✅ минимальный base image
- ✅ фиксированные теги
- ✅ non-root user
- ✅ multi-stage build
- ✅ без секретов внутри
- ✅ сканирование CVE
- ✅ подпись артефактов
- ✅ регулярное обновление
Безопасный Docker-образ — это не “дополнительная опция”, а базовый стандарт DevSecOps. Чем раньше hardening встроен в CI/CD, тем дешевле и проще защита в production ⚙️🛡️
Подборка каналов про IT — хороший способ следить за практиками DevOps, Docker и кибербезопасности в одном месте 📚