Лучшие практики безопасности Dockerfile
Реализуйте меры безопасности в Dockerfile, чтобы свести к минимуму уязвимости и уменьшить поверхность атаки.
«Лучшие практики безопасности Dockerfile» — бесплатный урок DevOps Bootcamp на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения DevOps Bootcamp, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс DevOps Bootcamp содержит 4 уроков всего.
Защитите файлы Dockerfile!
Добро пожаловать на урок «Лучшие практики защиты Dockerfile»! Защищённое приложение начинается с защищённой основы.
Ваш файл Dockerfile — это не просто сценарий сборки, а план обеспечения безопасности приложения. Ненадлежащие методы работы с ним могут привести к серьёзным уязвимостям.
На этом уроке Вы изучите основные стратегии усиления защиты образов Docker и уменьшения потенциальной поверхности атаки.

Начните с надёжных базовых образов
Инструкция FROM — Ваша первая линия защиты. Всегда выбирайте официальные базовые образы, которые поддерживаются и обновляются, из надёжных источников, например Docker Hub.
- Официальные образы: они проверены и регулярно обновляются.
- Конкретные теги: избегайте
latest. Используйте теги с конкретными версиями (например,alpine:3.18) для предсказуемости и стабильности. - Минимальные образы: выбирайте версии «slim» или «alpine». Они содержат меньше пакетов, а значит, меньше потенциальных уязвимостей.
Выбор защищённого базового образа
Посмотрите, как выбор минимального базового образа с конкретной версией может повысить безопасность. Он уменьшает количество пакетов и инструментов, которые могут быть использованы для атаки.
FROM alpine:3.18
# This is better than:
# FROM ubuntu:latest
# FROM python:latest
# Alpine is a minimal Linux distribution,
# making the image smaller and more secure.Уменьшайте размер образа
Каждый файл, пакет или зависимость, добавленные в образ, увеличивают его «поверхность атаки». Чем меньше программного обеспечения установлено, тем меньше потенциальных уязвимостей.
Устанавливайте только то, что абсолютно необходимо для работы приложения. Удаляйте инструменты сборки и временные файлы, когда они больше не нужны.
Очищайте систему после установки
При установке пакетов всегда очищайте кэш менеджера пакетов и удаляйте ненужные файлы. Это уменьшает размер итогового образа и устраняет потенциальные утечки информации.
Для образов на основе Debian (например, Ubuntu) используйте apt-get clean и удаляйте /var/lib/apt/lists/* в той же инструкции RUN.
FROM debian:stable-slim
RUN apt-get update && \
apt-get install -y --no-install-recommends \
curl \
git && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# All in one RUN command to leverage Docker's caching and reduce layers.Не запускайте от имени root!
По умолчанию процессы внутри контейнера Docker запускаются от имени пользователя root. Это серьёзный риск для безопасности!
Если злоумышленник получит контроль над контейнером, он получит права root, что потенциально позволит ему выйти из контейнера или скомпрометировать основную систему.
Всегда создавайте отдельного пользователя без прав root и переключайтесь на него с помощью инструкции USER.
Настройка пользователя без прав root
Ниже показано, как создать нового пользователя и указать Docker выполнять последующие команды от его имени. Это значительно ограничивает потенциальный ущерб в случае компрометации контейнера.
FROM alpine:3.18
# Create a non-root user and group
RUN addgroup -S appgroup && adduser -S appuser -G appgroup
# Switch to the non-root user
USER appuser
CMD ["echo", "Hello from non-root user!"]Никаких секретов в Dockerfile!
Никогда не записывайте конфиденциальную информацию, например ключи API, пароли баз данных или закрытые ключи, непосредственно в файл Dockerfile и не добавляйте её в образ.
Любой, у кого есть доступ к образу, может легко извлечь эти секреты, даже если Вы удалите их в одном из последующих слоёв.
Вместо этого используйте защищённые методы, например секреты Docker, переменные среды (для неконфиденциальных данных) или секреты Kubernetes во время выполнения.
Предпочитайте COPY вместо ADD
Обе инструкции COPY и ADD копируют файлы в образ, но для безопасности и ясности обычно предпочтительнее COPY.
COPY: копирует только локальные файлы или каталоги. Эта инструкция проста и предсказуема.ADD: также может загружать файлы по URL и автоматически распаковывать сжатые архивы (tar, gzip). Дополнительные возможности создают потенциальные риски для безопасности, например загрузку ненадёжного содержимого или распаковку вредоносных архивов.
Используйте COPY, если только Вам специально не нужны расширенные возможности ADD и Вы не понимаете связанные с ними риски.
Проверка безопасности!
Какая из следующих практик работы с Dockerfile является важным шагом для уменьшения поверхности атаки и минимизации потенциальных уязвимостей?
Ваш путь к защищённому Dockerfile
Отличная работа! Вы изучили важнейшие лучшие практики защиты Dockerfile, которые составляют основу безопасной контейнеризации:
- Начинайте с надёжных минимальных базовых образов: используйте официальные, конкретные и компактные образы.
- Уменьшайте размер образа: устанавливайте только необходимое и очищайте систему после установки.
- Запускайте от имени пользователя без прав root: ограничивайте привилегии, чтобы уменьшить последствия возможного взлома.
- Избегайте секретов: никогда не записывайте конфиденциальные данные непосредственно в файл Dockerfile.
- Предпочитайте `COPY` вместо `ADD`: выбирайте более предсказуемую и защищённую инструкцию `COPY`.
Применяя эти практики, Вы значительно повышаете уровень защиты контейнеризированных приложений!
Часто задаваемые вопросы
Урок «Лучшие практики безопасности Dockerfile» бесплатный?
Да — полный текст урока «Лучшие практики безопасности Dockerfile» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс DevOps Bootcamp, подпишись на CoddyKit PRO. Курс DevOps Bootcamp содержит 4 уроков всего.
Чему я научусь в уроке «Лучшие практики безопасности Dockerfile»?
Реализуйте меры безопасности в Dockerfile, чтобы свести к минимуму уязвимости и уменьшить поверхность атаки. Ты практикуешь DevOps Bootcamp с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать DevOps Bootcamp?
Предыдущий опыт не требуется. DevOps Bootcamp на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «Лучшие практики безопасности Dockerfile»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке DevOps Bootcamp?
Да. Каждый урок DevOps Bootcamp включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Многоэтапные сборки для повышения эффективности
- Использование кэширования сборки
- Лучшие практики безопасности Dockerfile
- Уменьшение размера образов с помощью Slim и Distroless