توسعه برنامهها اغلب شامل مدیریت پایگاههای داده پیچیده، زبانهای برنامهنویسی، فریمورکها، وابستگیها و موارد دیگر است. به علاوه، ممکن است هنگام کار با سیستم عاملهای مختلف با مشکلات سازگاری مواجه شوید. هر یک از این متغیرها می تواند روی گردش کار تاثیر منفی بگذارد.
برای حل این مشکلات می توان از Docker استفاده کنید. این ابزار شما را قادر می سازد تا اپلیکیشنها را در محیطهای کانتینری ساخته و مدیریت کنید.Docker می تواند بسیاری از وظایف پیکربندی پیچیده را حذف و توسعه را سادهتر و کارآمدتر کند.
در این مقاله بررسی میکنیم که Docker چیست و نحوه عملکرد آن را توضیح خواهیم داد همچنین برخی از موارد استفاده اصلی آن و نحوه شروع به کار را به عنوان یک مبتدی به شما نشان میدهیم.
Docker چیست؟
Docker یک پلتفرم متنباز برای توسعه اپلیکیشن در sandbox است. محیط های مجازی سبک وزن آن به عنوان کانتینر (container) شناخته می شوند:
در حالی که کانتینرها از سال 1979 وجود داشتهاند، داکر آنها را در دسترستر کرده است. با استفاده از Docker، توسعهدهندگان میتوانند برنامههای خود را به صورت لوکال یا روی یک سرور پروداکشن ساخته، آزمایش و دیپلوی کنند.
از زمان انتشار Docker 1.0 در سال 2014، استفاده از کانتینرها را برای توسعه دهندگان و شرکتها را استاندارد کرده است. اکنون بیش از 13 میلیون کاربر از جمله شرکتهای بزرگی مانند Netflix، Targetو Adobe دارد.
مقایسه داکر(Docker) با ماشینهای مجازی
در داکر، می توانید یک اپلیکیشن را در یک واحد استاندارد بسته بندی کنید، که می تواند برای توسعه نرم افزار استفاده شود. این واحد یا کانتینر شامل کدگذاری و وابستگی های برنامه است تا بتواند به راحتی در هر محیط محاسباتی اجرا شود.
قبل از Docker، شرکت ها اغلب از ماشین های مجازی (VM) برای اجرای برنامهها استفاده می کردند. ماشین مجازی می تواند مانند کامپیوترهای فیزیکی عمل کند و به توسعه دهندگان این امکان را می دهند که یک سرور را به چندین سرور تبدیل کنند. با این حال، این رویکرد می تواند با برخی از معایب همراه باشد.
هر ماشین مجازی شامل یک نسخه کامل از سیستم عامل و برنامه کاربردی و همچنین باینریها و کتابخانه های لازم است. این فایل ها می توانند ده ها گیگابایت را در کامپیوتر اشغال کنند. همچنین مجازیسازی سختافزار برای سیستمعامل مهمان میتواند به هزینههای سربار قابل توجهی نیاز داشته باشد.
کانتینرها به جای مجازی سازی سخت افزار، سیستم عامل را مجازی می کنند. در Docker، کانتینرها انتزاعیهایی در لایه برنامه هستند که میتوانند هم کد و هم وابستگیها را داشته باشند. در یک ماشین، چندین کانتینر می توانند به عنوان فرآیندهای ایزوله اجرا شوند:
در نتیجه کانتینرهای Docker معمولا فضای کمتری را اشغال می کنند. آنها همچنین می توانند برنامه های بیشتری را بدون تعداد زیادی ماشین مجازی و سیستم عامل داشته باشند.
Docker چگونه کار می کند؟
تصور کنید که در حال تلاش برای حمل بار از یک مکان به مکان دیگر هستید. در عصر مدرن، شما به راحتی می توانید این کار را با کانتینرها انجام دهید که اقلام خاصی را در یک محیط مهر و موم شده کنار هم نگه می دارند و به آنها امکان میدهد با کشتی، قطار یا هواپیما حمل شوند.
داکر به روشی بسیار مشابه کار می کند. به زبان ساده، داکر روش توسعه و گسترش نرم افزار را استاندارد کرد.
داکر با کانتینرها کار می کند که می توانند دارای اجزای قابل استفاده مجدد مانند Python، Node، dependenceها و موارد دیگر باشند؛ می توان کانتینرها را در هر جایی بدون نگرانی درباره مشکلات سازگاری قرار داد.
Docker در ابتدا ممکن است پیچیده باشد، پس بیایید تمام اجزای اصلی درگیر در این نرم افزار را بررسی کنیم، هنگامی که این ویژگی های کلیدی را درک کردید، می توانید توسعه برنامه های خود را ساده کنید!
خرید سرور مجازی لینوکس در پنج موقعیت جغرافیایی ایران، ترکیه، هلند، آلمان و آمریکا با قابلیت تحویل آنی در پارسدو فراهم است.
آیا میدانید در پارسدو میتوان سرور مجازی Docker بر بستر دبیان 11 سفارش داد؟
موتور داکر - Docker Engine
Docker Engine فناوری client-server برای ساختن و کانتینری کردن برنامههای کاربردی در Docker است. در اصل، از تمام وظایف مربوط به اجرای برنامه مبتنی بر کانتینر شما پشتیبانی می کند:
اینها اجزای اصلی درون Docker Engine هستند:
- Docker Daemon: ایمیجهای داکر، کانتینرها، شبکهها و volumeها را مدیریت می کند. همچنین به درخواست های Docker API گوش میدهد و آنها را پردازش میکند.
- Docker Engine REST API: یک API توسعه یافته توسط Docker که با Daemon در تعامل است.
- Docker CLI: رابط خط فرمان برای برقراری ارتباط با Daemon Docker.
با Docker Engine میتوانید برنامههای کانتینری را روی هر زیرساختی اجرا کنید. این راهاندازی به زمان اجرای کانتینر پیشرو در صنعت Docker کمک میکند.
ایمیج داکر - Docker Image
Docker image یک بسته نرم افزاری اجرایی است که شامل تمام سورس کدها ، dependenceها و ابزارهای مورد نیاز برای اجرای یک برنامه است. Imageها تمپلیتهایی فقط خواندنی (read-only) هستند که دستورالعملهایی را برای ایجاد یک کانتینر ارائه میدهند.
شما می توانید ایمیج Docker را با در نظر گرفتن آنها به عنوان بلوپرینت (blueprint) بهتر درک کنید. آنها حاوی اسنپ شاتهای از مواردی هستند که یک کانتینر هنگام اجرا شامل می شود.
در یک image، چندین لایه انباشته (stacked layers) وجود دارد. برای مثال، اگر میخواهید یک image سرور وب بسازید، میتوانید ابتدا لینوکس اوبونتو را اضافه کنید. در مرحله بعد، می توانید لایه آپاچی و کد PHP را در بالا قرار دهید.
هنگام ساخت یک ایمیج Docker، بهتر است متغیرترین لایه ها را بالاتر در Stack قرار دهید. تا اگر نیاز به ایجاد تغییر بود، نیازی به بازسازی کل image نباشد.
کانتینر داکر - Docker Container
همانطور که قبلا گفتیم، کانتینرها بخش های حیاتی Docker هستند. به زبان ساده، یک کانتینر Docker یک منطقه ایزوله برای اجرای یک برنامه کاربردی بدون تاثیر بر بقیه سیستم است. این واحد نرم افزار تمام کدها و وابستگیها را پکیج می کند تا بتواند به راحتی از یک برنامه به برنامه دیگر منتقل شود.
در اینجا برخی از مزایای استفاده از کانتینرهای Docker آورده شده است:
- استاندارد: اگرچه کانتینرها برای دههها وجود داشتهاند، داکر استاندارد صنعتی را برای استفاده از آنها ایجاد کرده است. کانتینر داکر فوق العاده قابل حمل و استفاده آسان هستند.
- سبک وزن: از آنجایی که کانتینرها هسته (کرنل) سیستم عامل را به اشتراک میگذارند، برای هر برنامه به سیستم عامل متفاوتی نیاز ندارید. در نتیجه، برنامه شما می تواند کارآمدتر اجرا شود و هزینه های سرور و لایسنس را کاهش دهد.
- ایمن: برخلاف ماشینهای مجازی، کانتینرها برنامه ها را ایزوله میکنند که این امر باعث امنیت بیشتر آنها می شود. با Docker، کانتینرهای شما دارای قابلیت جداسازی پیش فرض خواهند بود.
در نهایت، کانتینرهای Docker مزایای بیشتری نسبت به VMها دارند. اگرچه کانتینرها به روشی مشابه جداسازی و تخصیص منابع را انجام می دهند، معمولا کانتینرها قابل حمل تر، کارآمدتر و ایمن تر هستند.
Docker Compose
Docker Compose ابزاری است که برای اجرای چندین کانتینر به عنوان یک سرویس واحد طراحی شده است. اگر برنامه شما به NGINX و MySQL نیاز دارد، Docker Compose به شما امکان میدهد یک فایل ایجاد کنید که هر دو کانتینر را راهاندازی کند. با این کار نیازی به شروع هر کدام به طور جداگانه نیست.
در اینجا سه مرحله اساسی هنگام استفاده از Docker Compose وجود دارد:
- یک Dockerfile برای تعریف محیط برنامه ایجاد کنید تا بتوان آن را بازتولید کرد.
- هر یک از سرویسهای برنامه خود را در یک فایل docker-compose.yml تعریف کنید تا بتوانند در یک محیط ایزوله اجرا شوند.
- از دستور Docker Compose برای شروع و اجرای برنامه خود استفاده کنید.
Docker Compose چندین کانتینر را قادر میسازد تا به صورت مجزا اجرا شوند. با این حال، آنها می توانند در صورت لزوم با یکدیگر تعامل داشته باشند.
به عنوان مثال، Compose میتواند به شما در ایجاد و پیکربندی وابستگیهای سرویس برنامهتان، مانند پایگاههای داده، حافظه پنهان (caches) یا APIهای وب سرویس کمک کند.
Dockerfile
Dockerfile یک سند متنی است که شامل دستورالعملهایی برای ساخت ایمیج Docker میباشد. با خواندن این فایل، داکر به طور خودکار image جدید را می سازد. دستور docker build یک ایمیج از یک Dockerfile و یک context ایجاد می کند. این context مجموعه ای از فایل ها است که در یک مسیر یا URL مشخص قرار دارد.
ابتدا دستور زیر را وارد کنید:
docker build
با این کار کل context به Docker Daemon ارسال می شود. برای اشاره به یک Dockerfile در فایل سیستم خود، از این دستور استفاده کنید:
docker build -f /path/to/a/Dockerfile
در صورت موفقیت آمیز بودن ساخت، می توانید یک مخزن و برچسبی را مشخص کنید که می خواهید image جدید را در آن ذخیره کنید:
docker build -t shykes/myapp
سپس Docker Daemon یک اعتبار سنجی Dockerfile را انجام می دهد. اگر مشکلی در syntax وجود داشته باشد، یک خطا برمی گرداند.
Docker Desktop
برای شروع استفاده از Docker در محیط مک، لینوکس یا ویندوز خود، میتوانید Docker Desktop را نصب کنید. این یک رابط کاربری ساده و آسان برای مدیریت کانتینرها، برنامه ها و ایمیجها در کامپیوتر شخصی شما ارائه می دهد
با Docker Desktop، لازم نیست از خط فرمان برای انجام کارهای ضروری استفاده کنید که می تواند گردش کار توسعه را تسریع کند
همچنین دارای یک Extensions Marketplace داخلی است که شروع استفاده از ابزارهای توسعه دهنده شخص ثالث را آسان می کند. اینها شامل نرم افزارهایی برای اشکال زدایی، تست و ایمن سازی برنامه های شما می شود:
به علاوه، Docker Desktop برای استفاده شخصی و مشاغل کوچک رایگان است. با این حال، به خاطر داشته باشید که شرکت های بزرگتر نیاز به خرید اشتراک دارند که از 5 دلار در ماه شروع می شود.
داکر هاب - Docker Hub
Docker Hub پلتفرمی است که در آن می توانید ایمیجهای کانتینر را پیدا کرده و به اشتراک بگذارید. این بزرگترین مخزن ایمیج کانتینر در سراسر جهان است، با منابعی از توسعه دهندگان کامیونیتی، پروژه های متنباز و فروشندگان مستقل نرم افزار (ISV):
در اینجا برخی از ویژگی های موجود در Docker Hub آورده شده است:
- مخازن برای pulling و pushing ایمیجهای کانتینر
- ایجاد تیم ها و سازمان هایی با دسترسی به مخازن خصوصی
- ایمیجهای رسمی Docker
- ایمیجهای تایید شده ناشر توسط Docker
- ایمیجهای کانتینر را از GitHub یا Bitbucket ایجاد کنید و آنها را به Docker Hub پوش (Push) دهید
- فعال کردن تریگر با webhook
برای شروع استفاده از Docker Hub، باید اولین مخزن خود را ایجاد کنید. شما به سادگی باید آن را نام گذاری کرده و قابلیت مشاهده آن را مشخص کنید:
سپس، میتوانید Docker Desktop را دانلود کرده و شروع به pulling و pushing ایمیجهای کانتینر از Docker Hub کنید. این pushها را در زیر آخرین برچسب در مخزن جدید خود خواهید دید.
Docker برای چه مواردی استفاده می شود؟
Docker در درجه اول برای DevOps و توسعه دهندگان طراحی شده است. این ابزار به توسعه دهندگان این امکان را می دهد که برنامهها را به عنوان کانتینرهای قابل حمل و سبک ایجاد، سفارشی سازی و گسترش دهند. این راهاندازی همه وابستگیهای خود را در یک واحد بسته بندی میکند، که میتواند تقریبا روی هر سیستمعاملی اجرا شود.
در ادامه یک مورد استفاده معمولی برای Docker آمده است:
- توسعه دهندگان به صورت لوکال کد می نویسند، سپس با استفاده از کانتینرهای Docker آن را با تیمهای خود به اشتراک می گذارند.
- آنها برنامه را به یک محیط آزمایشی هدایت می کنند که در آن انجام تست های خودکار و دستی آسان است.
- هنگامی که باگها پیدا میشوند، توسعه دهندگان آنها را در محیط توسعه عیب یابی می کنند. برای آزمایش تغییرات، آنها را مجددا در محیط آزمایش قرار می دهند.
- پس از رفع اشکال توسط توسعه دهندگان، image به روز شده به محیط production منتقل می شود.
با استفاده از این گردش کار، می توانید نرم افزار جدید را بدون نصب دستی آزمایش کنید. برای مثال، ممکن است راه اندازی یک سرور MySQL برای شما دشوار و خسته کننده باشد. در عوض، میتوانید از Docker CLI برای اجرای این وظیفه تنها در یک دستور استفاده کنید.
از آنجایی که داکر، CLI خود را دارد، مبتدیان می توانند از آن برای یادگیری نحوه کار با خط فرمان استفاده کنند. پس از راه اندازی داکر در محیط لینوکس، می توانید از دستورات لینوکس استفاده کنید. سپس، می توانید کارهای اداری سیستم را سریعتر و کارآمدتر انجام دهید.
مزایا و معایب استفاده از داکر
اکنون که اجزای اصلی Docker را شناختیم ، اجازه دهید مزایا و معایب اصلی آن را مورد بحث قرار دهیم. سپس می توانید تصمیم بگیرید که آیا برای مدیریت برنامه های نرم افزاری شما مفید خواهد بود یا خیر.
مزایای داکر
به عنوان یک توسعه دهنده، برخی از کارهای شما ممکن است زمانی که به صورت دستی انجام شوند خسته کننده و تکراری شوند. با کانتینرهای Docker، می توانید اتوماسیون این وظایف را برنامه ریزی کنید. استفاده از کرون جابز می تواند حجم کاری شما را به میزان قابل توجهی کاهش دهد و زمان شما را بهینه کند.
به علاوه، داکر بسیار قابل حمل است. هر یک از اعضای تیم توسعه شما را قادر می سازد تا بر روی برنامه ها، حتی با سرورها، ماشین ها یا سیستم عامل های مختلف کار کنند. این راه اندازی می تواند بسیاری از مشکلات ناشی از ناسازگاری پلتفرم را از بین ببرد.
در مقایسه با VM ها، کانتینرهای Docker می توانند فضای بیشتری را ذخیره کنند. اگرچه Docker و VMها به طور مشابه کار می کنند، Docker بسیار سبک تر است.
علاوه بر این، داکر دارای یک جامعه قوی است. با پیوستن به Docker community events، میتوانید به صورت حضوری و آنلاین با سایر کاربران Docker ملاقات کرده و با آنها ارتباط برقرار کنید
همچنین میتوانید انجمنهای گسترده Docker را مرور کنید. اگر مبتدی هستید، این بحثها می تواند به شما کمک کند تا در مورد استفاده از این پلتفرم مشاوره کسب نمائید.
معایب داکر
همانطور که قبلا اشاره کردیم، Docker می تواند کارآمدتر از VM ها باشد. با این حال، اجرای برنامهها بر روی یک سرور فیزیکی معمولا به طور قابل توجهی سریعتر است.
داکر همچنین می تواند شامل یک منحنی یادگیری شیب دار باشد. برای اجرای برنامههای کاربردی با رابط کاربری گرافیکی (GUI) طراحی نشده است. این بدان معنی است که شما باید خط فرمان را یاد بگیرید، که می تواند برای مبتدیان چالش برانگیز باشد.
در نهایت، کانتینرهای Docker روی سیستم عامل میزبان اجرا خواهند شد. اگر نرم افزار مخربی در این کانتینرها پنهان شود، ممکن است دستگاه میزبان در معرض خطر قرار گیرد.
چگونه با Docker شروع به کار کنیم
برای شروع استفاده از Docker، باید از وب سایت اصلی بازدید کنید. سپس، نسخه سازگار را برای سیستم عامل کامپیوتر خود دانلود کنید.
اگر کامپیوتر مک دارید، باید نسخه Docker را برای چیپ اینتل یا اپل انتخاب کنید. همچنین گزینه هایی برای کاربران ویندوز و لینوکس وجود دارد.
پس از باز کردن فایل دانلود شده، Docker Desktop را روی کامپیوتر شما نصب می کند. سپس Docker Hub را باز کرده و یک حساب کاربری جدید ایجاد کنید
اکنون می توانید Docker Desktop را باز کرده و وارد شوید. سپس خط فرمان یا پنجره bash خود را باز کرده و این دستور را اجرا کنید:
docker run -d -p 80:80 docker/getting-started
پس از انجام این کار، یک کانتینر جدید در داشبورد Docker Desktop خود خواهید دید. نام آن به طور تصادفی برای حساب شما ایجاد می شود.
همچنین یک ایمیج Docker جدید خواهید داشت. اگر به تب Images بروید، میبینید که docker/getting-started در حال استفاده است.
اکنون تمام آنچه را که برای مدیریت کانتینرهای لوکال خود نیاز است دارید!
خلاصه
اگر مجبور هستید چندین برنامه را مدیریت کنید، Docker می تواند ابزار موثری برای سازماندهی مستقل آنها باشد. از آنجایی که Docker از کانتینرها استفاده می کند، می تواند به شما کمک کند تا هر برنامه را بدون خطر زبان های برنامه نویسی، کتابخانه ها یا فریمورکهای متناقض توسعه دهید.
اگرچه Docker اغلب کارآمدتر از ماشین مجازی (VM) است، کار بر روی یک سرور فیزیکی می تواند سریعتر باشد. از آنجایی که داکر به یک رابط خط فرمان نیز متکی است، ممکن است داکر برای مبتدیان گزینه خوبی نباشد.
نظرتون برامون مهمه شما اولین نظر رو بنویسید