كيفية إنشاء صور بايثون دوكر فعالة

كيفية إنشاء صور بايثون دوكر فعالة
القراء مثلك يساعدون في دعم MUO. عند إجراء عملية شراء باستخدام الروابط الموجودة على موقعنا، قد نكسب عمولة تابعة. اقرأ أكثر.

Docker هو البرنامج القياسي للصناعة لتعبئة ونشر التطبيقات في الحاويات. تعد صور Docker بمثابة حجر الزاوية الذي يمكنك من خلاله إنشاء تطبيقاتك وتشغيلها.





لفتح إمكانات Docker الكاملة، تحتاج إلى تحسين صورك من أجل كفاءة الموارد والأمان والأداء. سيضمن ذلك عمل تطبيقاتك بسلاسة داخل نظام Docker البيئي.





تعرف على كيفية القيام بذلك من خلال مثال واقعي يوضح كيفية وضع تطبيق الآلة الحاسبة في Python في حاوية.





البدء بالصورة الأساسية البسيطة

أحد العوامل التي تؤثر على كفاءة صورة Docker هو اختيار الصورة الأساسية. يجب أن تبدأ بصورة بسيطة تتضمن فقط المكونات الأساسية المطلوبة لتشغيل التطبيق الخاص بك.

يجب أن تكون الصورة التي تستخدمها أيضًا من مصدر حسن السمعة يوفر تحديثات وتصحيحات أمنية. يجب أن يكون لديها مجتمع نشط وتوثيق جيد. يعد هذا مفيدًا عند استكشاف المشكلات وإصلاحها أو طلب المساعدة.



لتطبيق الآلة الحاسبة، اختيار بيثون:3.11-سليم-دودة الكتب , وهو صورة الحد الأدنى، ويقلل من حجم الصورة. وهذا بدوره يقلل من استهلاك الموارد ويسرع تنزيل الصور ونشرها.

تنزيلات موسيقى مجانية للكمبيوتر بشكل قانوني
# Starting With a Minimal Base Image 
FROM python:3.11-slim-bookworm AS builder

أنت تستطيع استخدم صورة Alpine Linux أصغر حجمًا عن طريق اختيار python:3.11-alpine. ومع ذلك، لا تتضمن هذه الصورة مترجم Python ومدير الحزم ومكتبات Python الشائعة.





تشغيل التطبيقات كمستخدمين غير جذريين

يمكن أن يشكل تشغيل حاويات Docker كمستخدم جذر مخاطر أمنية كبيرة. إذا تمكن أحد العناصر الضارة من الوصول إلى حاوية تعمل كجذر، فقد يستغل نقاط الضعف في برنامج الحاوية لتصعيد امتيازاته. ويمكنهم بعد ذلك استخدام هذه الامتيازات لتنفيذ الأوامر مع التحكم الكامل في النظام المضيف.

الحل هو تشغيل تطبيقاتك كملف مستخدم غير الجذر . يقوم مثال الآلة الحاسبة بإنشاء المستخدم وتكوينه آلة حاسبة .





# 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 المدمجة venv وحدة.

# 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 خطرًا أمنيًا. لتعزيز الأمان، يجب عليك استخدام المتغيرات البيئية وملفات التكوين الخارجية. في مثال تطبيق الآلة الحاسبة، يمكنك إنشاء دليل باسم /التكوين للتخزين ملف التكوين الخاص بك وتعيين الملكية المناسبة.

# Securing Configuration Handling 
RUN mkdir /config && chown calculator:calculator /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 لتطبيق الآلة الحاسبة إجراء فحص الثغرات الأمنية .

# 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 الخاصة بك أمرًا بالغ الأهمية. وذلك لأنه يستخدم قاعدة بيانات الثغرات الأمنية والتعرضات الشائعة (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>

سيستغرق الأمر أعلاه بعض الوقت للتشغيل. بمجرد الانتهاء، سيتم إنشاء تقرير مثل التقرير أدناه.

  تقرير الضعف التافه على المحطة

كلما زادت خطورة المشكلة، يجب عليك معالجة الثغرة الأمنية التي تم تحديدها بشكل أسرع.

تشغيل التطبيقات كمستخدمين غير جذريين

لتعزيز الأمان، قم بتشغيل التطبيق باسم calculato 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"]

يؤدي التبديل إلى مستخدم غير جذري إلى تقليل سطح الهجوم.

حاويات التطبيقات غير بايثون

تختلف حاويات Docker للتطبيقات التي تدعمها لغات أخرى قليلاً. يجب أن تتعرف على كيفية تخزين أنواع مختلفة من التطبيقات. سيساعدك هذا في تحديد أفضل استراتيجية يجب اعتمادها بناءً على نوع اللغة التي يستخدمها تطبيقك.