تاریخچه داکر
در این مقاله قصد داریم درباره تاریخچه داکر، یکی از پلتفرمهای محبوب و پرکاربرد در حوزه مهندسی نرمافزار و رایانش ابری، صحبت کنیم. داکر چیست و چگونه به وجود آمد؟ چه مزایا و کاربردهایی دارد؟ چه چالشها و رقبایی با آن روبرو بوده است؟ این سوالات را در ادامه به ترتیب پاسخ خواهیم داد.
داکر چیست؟
داکر یک پلتفرم نرمافزاری است که امکان ساخت، اجرا و مدیریت کانتینرها را فراهم میکند. کانتینرها به طور خلاصه، بستههای نرمافزاری هستند که شامل برنامه، کتابخانهها، تنظیمات و وابستگیهای لازم برای اجرای آن برنامه روی هر سیستمعامل یا محیطی هستند. کانتینرها با استفاده از فناوریهای موجود در هسته لینوکس، مانند namespaces و cgroups، از هم جدا شده و به صورت ایزوله و مجزا عمل میکنند. این باعث میشود که برنامههای کانتینربندی شده، سبکتر، قابل حملتر و قابل مقیاسپذیرتر از برنامههای سنتی باشند.
تاریخچه داکر چیست و چگونه داکر به وجود آمد؟
داکر در اصل یک پروژه فرعی شرکت DotCloud بود که در سال ۲۰۰۸ توسط سالامان هایکس (Solomon Hykes) و همکارانش در پاریس تاسیس شده بود. DotCloud یک پلتفرم به عنوان سرویس (PaaS) بود که به توسعهدهندگان اجازه میداد تا برنامههای خود را روی سرویسهای مختلف ابری (cloud services) اجرا کنند.
هایکس به دنبال راه حلی بود که بتواند برنامههای خود را به صورت مستقل از زیرساخت (infrastructure) و پلتفرم (platform) در دسترس قرار دهد. او با الگوگیری از فناوری LXC (Linux Containers)، کانتینر داکر را به عنوان یک رابط کاربری ساده و قابل استفاده برای ساخت و اجرای کانتینرهای لینوکس طراحی کرد. داکر در مارس ۲۰۱۳ به عنوان یک پروژه متن باز منتشر شد و به سرعت مورد توجه توسعه دهندگان قرار گرفت.
چه مزایا و کاربردهایی داکر دارد؟
داکر با ارائه یک روش استاندارد و یکنواخت برای ساخت و اجرای کانتینرها، مزایای زیادی را برای توسعهدهندگان، مهندسان و مدیران نرمافزار فراهم میکند. برخی از این مزایا عبارتند از:
- سبکتر بودن: کانتینرها تنها بخشهای لازم برای اجرای یک برنامه را شامل میشوند و نیازی به سیستمعامل کامل ندارند. این باعث میشود که کانتینرها حجم کمتر، راهاندازی سریعتر و استفاده بهینهتر از منابع سختافزاری را داشته باشند.
- قابل حملتر بودن: کانتینرها به راحتی قابل جابجایی بین محیطهای مختلف هستند، چه آنها روی لپتاپ، سرور یا ابر باشند. این به توسعهدهندگان امکان میدهد که برنامههای خود را در هر جایی که دوست دارند تست و اجرا کنند و به مشتریان خود تحویل دهند.
- قابل مقیاسپذیرتر بودن: کانتینرها به راحتی قابل توزیع و تقسیم بین چندین نود (node) هستند، که باعث افزایش عملکرد و قابلیت اطمینان برنامهها میشود. همچنین، با استفاده از ابزارهای مدیریت کانتینر مانند Kubernetes یا Docker Swarm، میتوان به صورت خودکار تعداد کانتینرها را بسته به نیاز و تقاضای کاربران تغییر داد.
- امنتر بودن: کانتینرها با ایجاد فضای ایزوله و جداسازی بین برنامهها، امکان نفوذ و تأثیرگذاری روی یکدیگر را کم میکنند. همچنین، با استفاده از قابلیتهای دسترسی (access control) و سطح دسترسی (permission) در داکر، میتوان دسترسی به کانتینرها را محدود و کنترل کرد.
چه چالشها و رقبایی با داکر روبرو بوده است؟
با وجود تمام مزایایی که در تاریخچه داکر مشاهده کردیم، همچنان چالشهای پیرامون آن وجود دارد. بعضی از این چالشها عبارتند از:
- پیچیدگی مدیریت کانتینرها: با افزایش تعداد کانتینرها و نودهایی که آنها را اجرا میکنند، مدیریت و نظارت بر آنها دشوارتر میشود. برای حل این مشکل، نیاز به استفاده از ابزارهای ارکستراسیون (orchestration) و مانیتورینگ (monitoring) کانتینرها است که خود نیاز به یادگیری و پیکربندی دارند.
- عدم سازگاری با برخی سیستمعاملها: داکر به طور مستقیم بر روی هسته لینوکس کار میکند و برای سیستمعاملهای دیگر مانند ویندوز یا مک، نیاز به استفاده از یک لایه مجازیسازی (virtualization layer) دارد. این باعث میشود که عملکرد و قابلیت اطمینان کانتینرها روی این سیستمعاملها کمتر باشد.
- مسائل امنیتی: با وجود اینکه داکر قابلیتهای امنیتی خوبی را فراهم میکند، همچنان ریسکهای امنیتی در سطح کانتینر، نود، شبکه و رجیستری (registry) وجود دارد. برای جلوگیری از این ریسکها، نیاز به رعایت بهترین شیوههای امنیت کانتینر (container security best practices) است.
در تاریخچه داکر بد نیست به رقیبان آن هم کمی بپردازیم. داکر با رقبای قدرتمند دیگر در حوزه کانتینر سازی روبرو بوده است. بعضی از این رقبا عبارتند از:
- Podman: Podman یک پروژه متن باز است که به عنوان گزینهای جایگزین برای داکر طراحی شده است. Podman قابلیت ساخت، اجرا و مدیریت کانتینرها را بدون نیاز به دیمون (daemon) داکر فراهم میکند. Podman از استانداردهای مشترک با داکر، مانند OCI (Open Container Initiative) و CRI-O (Container Runtime Interface for Kubernetes) پشتیبانی میکند و امکان اجرای کانتینرهای داکر را نیز دارد. Podman مزایایی مانند عدم نیاز به سطح دسترسی روت (root)، امکان اجرای کانتینرهای خودکار (auto-update containers) و پشتیبانی از پادها (pods) را نسبت به داکر دارد.
- Buildah: Buildah یک پروژه متن باز است که تمرکز خود را بر روی ساخت و تغییر کانتینرها قرار داده است. Buildah از استانداردهای OCI و CRI-O پشتیبانی میکند و قابلیت ساخت تصاویر کانتینر (container images) را بدون نیاز به دیمون داکر فراهم میکند. Buildah همچنین امکان اجرای تصاویر کانتینر را با استفاده از Podman یا CRI-O میدهد. Buildah مزایایی مانند سادگی، سبکبودن، قابل اعتماد بودن و قابل توسعه بودن را نسبت به داکر دارد.
- rkt: rkt یک پروژه متن باز است که توسط شرکت CoreOS در سال ۲۰۱۴ راهاندازی شده است. rkt یک ابزار برای اجرای کانتینرها است که با تأکید بر امنیت و قابل حمل بودن طراحی شده است. rkt از چندین فرمت کانتینر، مانند Docker، OCI و ACI (App Container Image) پشتیبانی میکند و قابلیت اجرای کانتینرهای خود را نیز دارد. rkt مزایایی مانند عدم نیاز به دستورات sudo یا root، عدم نگهداری حالات (stateless)، قابل اعتماد بودن و تطابق با استانداردهای صنعت را نسبت به داکر دارد.
خلاصه تاریخچه داکر
در این مطلب، به تاریخچه داکر پرداختیم. داکر یک پلتفرم نرمافزاری است که امکان ساخت، اجرا و مدیریت کانتینرها را فراهم میکند. کانتینرها بستههای نرمافزاری هستند که برنامه، کتابخانهها، تنظیمات و وابستگیهای لازم برای اجرای آن برنامه روی هر سیستمعامل یا محیطی را شامل میشوند.
داکر در سال ۲۰۱۳ به عنوان یک پروژه فرعی شرکت DotCloud توسط سالامان هایکس و همکارانش تاسیس شد و به سرعت مورد توجه توسعهدهندگان، مهندسان و مدیران نرمافزار قرار گرفت. داکر مزایای زیادی را برای سبکتر، قابل حملتر، قابل مقیاسپذیرتر و امنتر بودن برنامههای کانتینربندی شده فراهم میکند. داکر همچنین با چالشهای پیرامون پیچیدگی مدیریت، عدم سازگاری با برخی سیستمعاملها و مسائل امنیتی روبرو بوده است.
داکر نیز با رقبای قدرتمند دیگر در حوزه کانتینر سازی، مانند Podman، Buildah و rkt رقابت کرده است. داکر امروزه یکی از پلتفرمهای پرطرفدار و پرکاربرد در حوزه مهندسی نرمافزار و رایانش ابری است که به توسعهدهندگان اجازه میدهد تا برنامههای خود را به صورت استاندارد و یکنواخت در هر جایی که دوست دارند تولید و اج