senior
Какие практики безопасности следует соблюдать при работе с Docker?
Безопасность Docker — это комплекс мер, направленных на минимизацию поверхности атаки, предотвращение утечки секретов и ограничение привилегий контейнеров.
1. Не запускайте контейнер от root
Пример
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
USER appuser
2. Используйте минимальные базовые образы
alpine— минимальный Linux (~5 МБ)eclipse-temurin:17-jre-alpine— вместо полного JDKdistroless(от Google) — образ без shell и утилит, только среда выполнения:
Пример
FROM gcr.io/distroless/java17-debian12
COPY app.jar /app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
3. Не храните секреты в образе
Пример
# ПЛОХО — секрет останется в истории слоёв
ENV DB_PASSWORD=supersecret
COPY .env /app/.env
# ХОРОШО — передавайте при запуске
# docker run -e DB_PASSWORD=supersecret myapp
4. Используйте конкретные теги образов
Пример
# ПЛОХО — непредсказуемо
FROM eclipse-temurin:latest
# ХОРОШО — воспроизводимо
FROM eclipse-temurin:17.0.9_9-jre-alpine
5. Сканируйте образы на уязвимости
Пример
docker scout cves myapp:1.0
# Или с помощью Trivy
trivy image myapp:1.0
6. Используйте read-only файловую систему
Пример
docker run --read-only --tmpfs /tmp myapp
7. Ограничивайте ресурсы
Пример
docker run --memory=512m --cpus=1.0 myapp
8. Не устанавливайте лишнее в образ
Пример
RUN apt-get update && \
apt-get install -y --no-install-recommends необходимый-пакет && \
rm -rf /var/lib/apt/lists/*
9. Дополнительные меры
- Используйте
.dockerignoreдля исключения конфиденциальных файлов - Обновляйте базовые образы регулярно, чтобы получать исправления безопасности
- Используйте multi-stage builds для исключения инструментов сборки из финального образа
На собеседовании: назовите минимум 5 практик: непривилегированный пользователь, минимальные базовые образы, no secrets in image, конкретные теги, сканирование уязвимостей. Для senior-уровня упомяните distroless-образы, read-only filesystem, ограничение ресурсов и инструменты сканирования (Trivy, Docker Scout).