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

Как создать эффективные образы Docker Python
Такие читатели, как вы, помогают поддержать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

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





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





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





история дома по адресу

Начинаем с минимального базового образа

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

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



Для приложения калькулятора выберите Python: 3.11-тонкий книжный червь , которое является минимальным изображением, уменьшает размер изображения. Это, в свою очередь, сводит к минимуму потребление ресурсов и ускоряет загрузку и развертывание образов.

# Starting With a Minimal Base Image 
FROM python:3.11-slim-bookworm AS builder

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





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

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

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





# Set non-root user for security 
RUN adduser calculator --system

# Add the user to the calculator group
RUN addgroup calculator && adduser calculator calculator

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

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

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

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

# Set working directory and copy necessary files 
WORKDIR /app
COPY app.py .
COPY requirements.txt .
COPY config.json ./
# Copy config.json from the local directory

# Create a virtual environment and install dependencies
RUN python -m venv /venv
ENV PATH="/venv/bin:$PATH"
RUN /venv/bin/pip install --upgrade pip --no-cache-dir --requirement requirements.txt

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

Минимизация слоев для повышения эффективности

Каждая инструкция в Dockerfile создает новый слой в результирующем изображении. Docker использует механизм копирования при записи для управления этими уровнями. Уменьшение количества слоев в образе Docker значительно увеличивает размер образа и повышает производительность сборки. Один из способов уменьшить количество уровней — объединить несколько команд в одну. БЕГАТЬ инструкция.

# Minimizing Layers for Efficiency 
# Combine commands to reduce the number of layers
RUN echo "Build process goes here" && \
   /venv/bin/python -m compileall . && \
   rm -rf __pycache__

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

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

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

pokemon go советы и хитрости 2020
# Securing Configuration Handling 
RUN mkdir /config && chown calculator:calculator /config

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

# Copy the config.json file into the container 
RUN cp config.json /config/config.json
ENV CONFIG_PATH=/config/config.json

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

Использование многоэтапных сборок

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

# Leveraging Multi-Stage Builds 
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
# Copy the application code

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

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

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

как создать zip-файл в Windows
# Install Trivy for Debian/Ubuntu 
RUN apt-get update && \
   apt-get install -y wget apt-transport-https gnupg lsb-release && \
   wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | apt-key add - && \
   echo "deb https://aquasecurity.github.io/trivy-repo/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 `
 <your image name>

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

  Тривиальный отчет об уязвимостях терминала

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

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

Для повышения безопасности запустите приложение от имени расчет r для ограничения потенциальных уязвимостей.

# Running Applications as Non-Root Users 
WORKDIR /app
USER calculator

# Activate the virtual environment and run the application
CMD ["/bin/bash", "-c", "source /venv/bin/activate && python app.py"]

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

Контейнеризация приложений, отличных от Python

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