مقدمة إلى Docker وSwift: لماذا هذا مهم؟
في تطوير البرمجيات الحديثة، أصبحت الحاويات (Containerization) المعيار الفعلي لضمان قابلية التكرار، وقابلية التوسع، وسهولة نشر التطبيقات. إذا كنت تطور باستخدام Swift لنظامي iOS أو macOS، فمن المحتمل أنك معتاد على نظام Xcode البيئي وPackage Manager. ومع ذلك، عندما يتعلق الأمر بالجانب الخادمي (Swift on Server) أو إنشاء بيئات معزولة للبناء والاختبار، يصبح Docker أداة لا غنى عنها.
في هذه المقالة، سنشرح كيفية حاوينة (Containerize) تطبيقات Swift باستخدام Docker. ستتعلم كيفية إنشاء Dockerfile لـ Swift، وإعداد البيئة لإطار العمل الخادمي Vapor، بالإضافة إلى تحسين عملية البناء. ستكون المادة مفيدة لمطوري iOS الذين يتعلمون الباك إند (Backend)، وكذلك لمهندسي DevOps الذين يعملون مع Swift.
أساسيات Docker لمطور Swift
يسمح Docker بتغليف التطبيق مع جميع تبعياته في حاوية خفيفة الوزن. بالنسبة لـ Swift، هذا مهم بشكل خاص، حيث قد يختلف المترجم (Compiler) والمكتبات (Libraries) حسب إصدار نظام التشغيل. بدلاً من إعداد الخادم يدويًا، يمكنك ببساطة تشغيل حاوية.
تثبيت Docker وSwift SDK
أولاً، تأكد من تثبيت Docker لديك. بعد ذلك، ستحتاج إلى صورة (Image) Swift. الصورة الرسمية من Apple متاحة على Docker Hub:
docker pull swift:5.9تحتوي هذه الصورة على مترجم Swift، وPackage Manager، والأدوات الأساسية. يمكنك استخدامها إما للبناء أو لتشغيل التطبيقات.
إنشاء تطبيق Swift بسيط
لنقم بإنشاء تطبيق وحدة تحكم (Console) بسيط:
// main.swiftprint("Hello, Docker with Swift!")نقوم بتهيئة المشروع:
mkdir MySwiftApp && cd MySwiftAppswift package init --type executableكتابة Dockerfile لـ Swift
الآن سنقوم بإنشاء Dockerfile في جذر المشروع. من المهم استخدام البناء متعدد المراحل (multi-stage build) لجعل الصورة النهائية أصغر حجمًا.
# المرحلة الأولى: البناءFROM swift:5.9 AS buildWORKDIR /appCOPY Package.swift Package.resolved ./RUN swift package resolveCOPY . .RUN swift build -c release --static-swift-stdlib
# المرحلة الثانية: التشغيلFROM ubuntu:22.04WORKDIR /appCOPY --from=build /app/.build/release/MySwiftApp .CMD ["./MySwiftApp"]الشرح:
- --static-swift-stdlib — الربط الثابت (Static linking) للمكتبة القياسية لـ Swift، لتجنب تضمين libswift.so في الصورة.
- COPY Package.swift بشكل منفصل — لتخزين التبعيات (Dependencies) مؤقتًا بواسطة Docker.
- Ubuntu 22.04 — قاعدة خفيفة الوزن لوقت التشغيل (Runtime).
قم ببناء وتشغيل:
docker build -t my-swift-app .docker run --rm my-swift-appحاوينة تطبيق Vapor
إطار العمل Vapor هو الخيار الأكثر شيوعًا لـ Swift على الخادم. دعنا نلقي نظرة على Dockerfile لمشروع Vapor نموذجي.
هيكل مشروع Vapor
لنفترض أن لديك مشروعًا تم إنشاؤه عبر vapor new MyVaporApp. سيكون Dockerfile أكثر تعقيدًا، حيث يجب مراعاة العمل مع الشبكة وقاعدة البيانات.
# مرحلة البناءFROM swift:5.9 AS buildRUN apt-get update && apt-get install -y libsqlite3-devWORKDIR /appCOPY Package.swift Package.resolved ./RUN swift package resolveCOPY . .RUN swift build -c release
# مرحلة التشغيلFROM swift:5.9-slimWORKDIR /appCOPY --from=build /app/.build/release/MyVaporApp .COPY --from=build /app/Public ./PublicCOPY --from=build /app/Resources ./ResourcesEXPOSE 8080CMD ["./MyVaporApp", "serve", "--hostname", "0.0.0.0", "--port", "8080"]نقاط مهمة:
- libsqlite3-dev — ```