Как создать эффективный образ Docker для проекта Python

Образы Docker — это мощные инструменты для распространения проектов Python, но важно сохранять их как можно более чистыми.

Как создать эффективный образ Docker для проекта Python. Рисунок 1.

Docker — это стандартное программное обеспечение для упаковки и развертывания приложений в контейнерах. Образы Docker — это платформа, на которой вы можете создавать и запускать приложения.

Чтобы полностью раскрыть потенциал Docker, вам необходимо оптимизировать образы для повышения эффективности, безопасности и производительности. Это гарантирует бесперебойную работу ваших приложений в экосистеме Docker.

Вот подробное руководство о том, как это сделать, на реальном примере, показывающее, как поместить в контейнер настольное приложение, разработанное с помощью Python.

Начните с самого простого изображения

Одним из факторов, влияющих на эффективность образов Docker, является выбор базового образа. Вам следует начать с минимального образа, включающего только компоненты, необходимые для запуска приложения.

Используемые вами изображения также должны быть получены из надежного источника, который предоставляет обновления и исправления безопасности. У него также есть активное сообщество и хорошая документация. Это полезно при устранении неполадок или поиске помощи.

Для вычислительных приложений выберите python:3.11-slim-bookworm, который представляет собой минимальный образ, уменьшающий его размер. В свою очередь, это снижает потребление ресурсов и ускоряет загрузку и развертывание образов.

# Создайте изображение, которое можно использовать FROM python:3.11-slim-bookworm AS builder

Вы даже можете использовать меньший образ Alpine Linux, выбрав python:3.11-alpine. Однако этот образ не включает компилятор Python, инструмент управления пакетами и популярные библиотеки Python.

Запустите приложение от имени пользователя без полномочий root

Запуск контейнеров Docker от имени пользователя root может столкнуться со значительными рисками безопасности. Если злоумышленник получит доступ к контейнеру, работающему под root-правами, он сможет использовать уязвимости в программном обеспечении контейнера для повышения своих привилегий. Затем они используют эти разрешения для выполнения команд с полным контролем над системой хранения.

Решение состоит в том, чтобы запустить ваше приложение от имени пользователя без полномочий root. В этом примере настольного приложения создаются и настраиваются рабочие столы пользователей.

# Đặt người dùng không root để đảm bảo an toàn RUN adduser Calculator –system # Это может быть сделано RUN addgroup Calculator && adduser Calculator

Создание выделенных пользователей для вашего приложения ограничивает разрешения, доступные потенциальным хакерам. Это усложняет эксплуатацию уязвимости.

Скопируйте необходимые файлы и создайте виртуальную среду.

Создайте виртуальную среду в контейнере Docker, которая изолирует зависимости. Это предотвращает конфликты с другими пакетами и приложениями в масштабе всей системы. Это также обеспечивает совместимость версий, поскольку вы можете установить именно ту версию зависимостей, которая необходима приложению, не затрагивая остальную часть системы.

Скопируйте необходимые файлы в контейнер. Затем создайте виртуальную среду для настольного приложения, используя встроенный модуль Python venv.

# Это не значит, что вам нужно сохранить файл в WORKDIR /app COPY app.py . КОПИРУЙТЕ файл require.txt. COPY config.json ./ # Sao chép config.json từ thư mục cục bộ # Tạo môi trường ảo và các phần phụ thuộc RUN python -m venv /venv ENV PATH=”/venv/bin:$PATH” RUN /venv/ bin/pip install –upgrade pip –no-cache-dir –requirement require.txt

Виртуальные среды легки и эффективны, поскольку они не дублируют пакеты в системе. Это помогает уменьшить размеры образов Docker и снижает потребление ресурсов при запуске контейнеров.

Минимизируйте слои для повышения эффективности

Каждая инструкция в Dockerfile создает новый слой в результирующем изображении. Docker использует копирование при записи для управления этими слоями. Уменьшение количества образов Docker значительно увеличивает размер образа и повышает эффективность сборки. Другой способ уменьшить количество уровней — объединить несколько команд в одну команду RUN.

# Получить этот слой и добавить его # Kết hợp lệnh để giảm số lượng Layer RUN echo “Процесс сборки идет здесь” && /venv/bin/python -m compileall . && rm -rf __pycache__

Сочетание приведенных выше команд уменьшает количество промежуточных слоев, создаваемых при построении изображения.

Безопасная обработка конфигурации

Обработка конфиденциальной информации в образах Docker может быть рискованной. Для повышения безопасности следует использовать переменные внешней среды и файлы конфигурации. В этом примере вы можете создать каталог с именем /config, содержащий файл конфигурации, и установить соответствующее право собственности.

# Bảo mật xử lý cấu hình RUN mkdir /config && chown Calculator:calculator /config

Затем скопируйте файл config.json в эту папку, убедившись, что он отделен от кода приложения.

# Выбираем файл config.json и контейнер RUN cp config.json /config/config.json ENV CONFIG_PATH=/config/config.json

Отделение данных конфигурации от кода и применение соответствующих разрешений повысят общую безопасность вашего образа Docker. Это гарантирует, что только авторизованным процессам или пользователям разрешен доступ к критически важным данным конфигурации.

Используйте многофазные сборки

Многоэтапные сборки позволяют отделить среду сборки от окончательного образа. В результате изображения продукта становятся меньшими и более целенаправленными. Это также повышает безопасность за счет исключения инструментов и файлов, связанных со сборкой, из окончательного образа. Кроме того, это снижает потенциальные атаки и риски безопасности, связанные с ненужными компонентами.

# Nâng cấp bản build nhiều giai đoạn FROM python:3.11-slim-bookworm COPY –from=builder /etc/passwd /etc/passwd COPY –from=builder /etc/group /etc/group COPY –from=builder /venv /venv COPY –from=builder /config /config COPY –from=builder /app /app # Код изменения кода ứng dụng

Приведенный выше код только копирует необходимые элементы из этапа компоновщика в окончательное изображение. Это уменьшает размер изображения за счет исключения связанных инструментов и файлов, которые не нужны приложению.

Повысьте безопасность с помощью инструментов сканирования изображений

Вы можете использовать инструменты сканирования, такие как Trivy или Clair. Они предназначены для выявления уязвимостей в слое изображения и его зависимостях. Используйте Trivy для расчетных приложений и сканирования уязвимостей.

# Это простая задача для Debian/Ubuntu RUN apt-get update && apt-get install -y wget apt-transport-https gnupg lsb-release && wget -qO – | apt-key add – && echo “deb bookworm main” | tee -a /etc/apt/sources.list.d/trivy.list && apt-get update && apt-get install -y trivy

Важно добавить инструмент сканирования уязвимостей Trivy в образы Docker. Это связано с тем, что он использует базу данных Common Vulnerabilities and Exposures (CVE), которая регулярно обновляется информацией об известных уязвимостях. Это поможет вам постоянно обновлять образы с помощью новейших исправлений безопасности, а также защищать приложения от известных эксплойтов.

Чтобы получать отчеты об уязвимостях изображений, используйте следующую команду:

docker run –rm ` -v /var/run/docker.sock:/var/run/docker.sock ` -v $HOME/Library/Caches:/root/.cache/ ` aquasec/trivy:0.18.3 `

Выполнение приведенной выше команды займет некоторое время. По завершении вы получите отчет, как показано ниже.

Как создать эффективный образ Docker для проекта Python. Рисунок 2.

Чем выше серьезность, тем раньше следует устранить уязвимость.

Запустите приложение от имени пользователя без полномочий root

Для повышения безопасности при запуске приложения от имени обычного пользователя запустите:

# Chạy ứng dụng trong vai trò người dùng không root WORKDIR /app USER Calculator # Kích hoạt môi trường ảo và chạy ứng dụng này CMD (“/bin/bash”, “-c”, “source /venv/bin/activate &&” приложение Python.py”)

Переключение в режим пользователя без полномочий root значительно снизит риск взлома.

Надеюсь, эта статья будет вам полезна!

В приведенной выше статье вы познакомились с «Как создать эффективный образ Docker для проекта Python». СоветыНадейтесь, что эта статья вам поможет! Если эта статья кажется вам интересной и полезной, не забудьте поделиться ею. Спасибо!

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *