پلتفرم داکر (Docker) یکی از ابزارهای کلیدی و پرکاربرد در دنیای توسعه نرمافزار و عملیات (DevOps) محسوب میشود. اگر عضوی از جامعه برنامهنویسها و یا دواپسکارها باشید، احتمالا با داکر هم تا حدودی آشنا هستید. این پلتفرم قدرتمند به یکی از دستیارهای جدانشدنی در فرایند توسعه، استقرار و اجرای نرمافزارها تبدیل شده و نقش مهمی در سادهسازی مدیریت محیطهای اجرایی ایفا میکند.
در این مقاله قصد داریم به سوالهایی مانند داکر چیست؟ چگونه کار میکند؟ و چه اجزایی دارد، پاسخ بدهیم. سپس به بررسی تفاوت Docker با ماشین مجازی (VM) میپردازیم. با ما همراه باشید.
داکر Docker چیست؟
داکر یک پروژه متن باز است که به توسعهدهندگان در راحتی هرچه بیشتر فرایند توسعه (Developement)، بیلد (Build)، انتشار (Deployment)، اجرا (Run) و بهروزرسانی برنامهها کمک میکند. در واقع داکر با کمک کانتینرها، فرایند توسعه و انتشار نرمافزار را ساده میکند. کانتینرها اجزای استاندارد و قابل اجرایی هستند که کد منبع برنامه را با کتابخانههای سیستم عامل (OS) و وابستگیهای مورد نیاز برای اجرای آن کد در هر محیطی ترکیب میکنند. توسعهدهندگان میتوانند بدون داکر و با استفاده قابلیتهای تعبیهشده در لینوکس و سایر سیستم عاملها، کانتینرها را ایجاد کنند، اما داکر، کانتینرسازی را سریعتر و آسانتر میکند.
مقایسه داکر با کالاهای ترانزیتی
فلسفه پشت داکر را میتوان در مثال ساده زیر نشان داد. در صنعت حمل و نقل بینالمللی، کالاها باید با وسایل مختلفی مانند لیفتراک، کامیون، قطار، جرثقیل و کشتی جابجا شوند. این کالاها شکلها، اندازهها و نیازمندیهای انبارداری مختلفی دارند. برای مثال کیسههای شکر، قوطیهای شیر، گیاهان و …. از نظر تاریخ انقضا و مصرف، کار حمل و نقل بسیار سخت و پرریسکی دارند و برای بارگذاری و خالی کردن در هر نقطه، حجم کاری سنگینی را تحمیل میکنند.
همه چیز با شروع به کار کانتینرهای بین مدلی تغییر کرد. با توجه به این که این کانتینرها در ابعاد استاندارد هستند و سازندگان آن موقع طراحی به فکر حمل و نقل بودهاند، ماشینهای مربوط به بارگیری را میتوان به شیوهای طراحی کرد، که با حداقل دخالت انسانی فعالیت کنند.
مزیت دیگر کانتینرهای مهرومومشده، این است که میتوانند محیط داخلی مانند دما و رطوبت را برای کالاهای حساس حفظ کنند. به همین دلیل دیگر لازم نیست فعالان صنعت حمل و نقل نگران سالم ماندن کالاها باشند و میتوانند تمرکز خود را روی جابهجایی از نقطه A به B معطوف کنند.
اینجا جایی است که داکر وارد میشود و مزایای مشابهی را برای صنعت نرمافزار به ارمغان میآورد.
تاریخچه Docker
داکر در سال ۲۰۱۳ توسط سالومون هایکس که در شرکت dotCloud مشغول به کار بود، ساخته شد. کانتینرها که تقریبا از سال ۲۰۰۰ ایجاد شده بودند، تا قبل از داکر استفاده خاصی نداشتند. اما Docker با ایجاد یک پلتفرم با کاربری آسان، کانتینرها را به یکی از ابزارهای محبوب توسعهدهندگان تبدیل کرد. در واقع داکر یک ابزار درون سازمانی برای راحتی بیشتر توسعه و استقرار نرمافزار بود. اما در سال ۲۰۱۴، تکنولوژی داکر بهصورت متن باز منتشر و به یکی از معروفترین پروژههای GitHub با سرمایهگذاری میلیون دلاری تبدیل شد. امروزه هم داکر، در صدر لیست ابزارهای محبوب دواپس قرار دارد.
داکر چگونه کار میکند؟
داکر تکنولوژیای است به شما امکان ایجاد، اجرا، تست و استقرار برنامههای توزیعشده را میدهد. این پلتفرم برای انجام این کار، از مجازیسازی در سطح سیستم عامل استفاده میکند تا نرمافزار را در بستههایی با عنوان کانتینر تحویل بدهد. نحوه عملکرد داکر به این صورت است که یک برنامه و تمام نیازمندیهای آن را در یک کانتینر مجازی قرار میدهد؛ کانتینری که قابلیت اجرا روی هر سیستمعاملی را دارد. این کانتینرسازی به نسبت ماشین مجازی، قابلیت حمل و کارایی بیشتری دارد.
کانتینرهای ساختهشده توسط داکر روی یک سیستم عامل، کاملا از هم مجزا و ایزوله هستند و هر کدام، مجموعهای از ابزارها، کتابخانهها و تنظیمات خود را به همراه دارند. البته این Containerها میتوانند توسط کانالهای ارتباطی با هم ارتباط برقرار کنند. تمام این کانتینرها روی هسته تنها یک سیستم عامل اجرا میشوند و به همین خاطر، از منابع کمتری استفاده میکنند.
نصب Docker
Docker بهصورت نیتیو (Native) روی سیستمعامل لینوکس اجرا میشود. بنابراین بسته به توزیعی که استفاده میکنید، روش نصب ممکن است متفاوت باشد. اگر از Ubuntu یا توزیعهای مبتنی بر Debian استفاده میکنید، میتوانید از دستور زیر برای نصب Docker استفاده کنید:
1 |
sudo apt–get install docker.io |
در سایر توزیعها مانند Fedora، CentOS یا Arch نیز دستورهای متفاوتی برای نصب وجود دارد که در مستندات رسمی توضیح داده شدهاند.
از آنجا که هستهی Docker مبتنی بر قابلیتهای لینوکس است، اجرای مستقیم آن روی Windows یا macOS امکانپذیر نیست. برای حل این مسئله، ابزار Docker Desktop ارائه شده که یک محیط مجازیسازیشده با رابط کاربری گرافیکی فراهم میکند. Docker Desktop شامل موتور Docker، Docker CLI، Docker Compose و ماشین مجازی داخلی برای اجرای کانتینرها است.
کانتینر (Container) چیست؟
از ابتدای مقاله چندین بار به کانتینرها (Containers) اشاره کردیم. برای کار با داکر، اول باید با مفهوم کانتینرها و کاربرد آنها آشنا شوید و سپس، کاربرد کانتینرهای داکر را بشناسید.
کانتینر، یک واحد استاندارد و قابل اجرا از نرمافزار است که شامل بستهای از کد برنامه، کتابخانهها و نیازمندیهای اجرای برنامه میشود. کانتینرها به نحوی طراحی میشوند که برنامه مد نظر، قابلیت اجرا بر روی انواع سیستمهای مختلف، اعم از سیستم دسکتاپ، سیستمهای سنتی و حتی فضای ابری را داشته باشد.
برای این کار، Containerها از نوعی مجازیسازی سیستم عامل استفاده میکنند که در آن ویژگیهای سیستم عامل، برای ایزوله کردن فرایندهای مختلف و مدیریت منابعی که هر فرایند نیاز دارد، بهینه و اختصاصی میشود.
به عبارتی هر کانتینر، درصد مشخصی از ظرفیت و منابع سیستم عامل را با توجه به نیاز برنامه، به خود اختصاص میدهد تا منابع به بهینهترین شکل ممکن بین کانتینرهای مختلف توزیع شوند. در واقع ویژگیهای ایزوله کردن فرایندها و مجازیسازی که در هسته لینوکس وجود دارد (مانند control groups و namespace) امکان ساخت کانتینرها را فراهم کرده است.
چرا باید از کانتینر استفاده کنیم؟
کانتینرها سبک، سریع و قابل حمل هستند و چندین کانتینر میتوانند همزمان با تخصیص بهینه منابع، بر روی یک سیستم عامل کار کنند؛ برعکس ماشینهای مجازی که هر ماشین، نیاز به سیستم عامل اختصاصی (Guest OS) دارد. به همین دلیل امروزه containerها تقریبا جایگزین ماشینهای مجازی شدهاند.
علاوهبر این، موارد زیر را هم میتوانیم بهعنوان مزیت استفاده از کانتینرها معرفی کنیم:
- سبک و سریع (بهدلیل به اشتراکگذاری هسته سیستم عامل)
- قابل حمل و مستقل از پلتفرم (کانتینرها تمام نیازمندیهای خود را با خود همراه دارند)
- پشتیبانی از روشهای جدید معماری و توسعه نرمافزار
- بهینهسازی و بهبود استفاده از منابع
- امنیت بالا
- ایزوله بودن
- انعطافپذیری
- مقیاسپذیری
- تکرارپذیری برای ایجاد محیطهای مشابه در فرایند توسعه
Docker Container شامل چه مواردی میشود؟
کانتینرهای داکر (Docker Containers) واحدهای اجرایی هستند که از طریق ایمیجها (Images) ساخته میشوند. ایمیج در واقع یک قالب فقط خواندنی (Read-only) است که شامل تمامی تنظیمات و نیازمندیهای لازم برای اجرای یک برنامه است.
شاید فکر کنید که تعریف ایمیج و کانتینر یکسان است، اما در واقع کانتینر نمونه اجراشده از یک ایمیج است؛ کانتینر چیزی است که ایمیج پس از اجرا در حافظه به آن تبدیل میشود. یک داکر ایمیج (داکر Image) میتواند با دستورهای Dockerfile یا Docker commit ساخته شود.
Docker Container شامل هر چیزی است که نرمافزار برای اجرا به آن نیاز دارد از جمله:
- کد برنامه
- زمان اجرا
- کتابخانهها
- متغیرهای محیط
- فایل تنظیمات
علاوهبر این، یک کانتینر داکر از سه بخش اصلی تشکیل شده است:
- داکرفایل (Dockerfile) که برای ساخت ایمیج از آن استفاده شده است.
- Image که یک قالب فقط خواندنی است و دستورالعمل لازم برای ایجاد کانتینر داکر را دارد.
- کانتینر که یک نسخه اجراشده از ایمیج است.
تفاوت داکر با ماشین مجازی (VM)
هنگامی که بخواهید از میان داکر و ماشین مجازی گزینه مناسبتر را براساس نیاز خود انتخاب کنید، احتمالا با این سوال مواجه میشوید که این دو تکنولوژی چه تفاوتهایی با هم دارند. در واقع، هر دوی این گزینهها راهکاری برای اجرای نرمافزارها در محیطی ایزوله و قابل حمل هستند، اما هدف و معماری آنها کاملا متفاوت است. از مهمترین و رایجترین تفاوتهای کلیدی داکر و ماشین مجازی میتوان به موارد زیر اشاره کرد:
- هدف از طراحی: ماشینهای مجازی برای اجرای چند سیستمعامل روی یک سختافزار طراحی شدند. هدف اصلی آنها ایجاد محیطهایی مستقل از سختافزار فیزیکی است. در طرف مقابل داکر برای سادهسازی اجرای برنامهها در محیطهایی یکنواخت و قابل تکرار (مخصوصا هنگامی که با محیطهای مختلف توسعه، تست و اجرا سروکار دارید) به کار میرود.
- محصول نهایی برای کاربر: وقتی از داکر استفاده میکنید، آن چیزی که در نهایت به دست میآورید یک کانتینر است. هماطور که میدانید، کانتینرها بستههایی سبک، قابل حمل و مستقلی هستند که شامل اپلیکیشن و وابستگیهای آن میشوند.
در سمت مقابل، ماشین مجازی خود یک سیستمعامل کامل است که روی سختافزار مجازی اجرا میشود. این سیستمعامل (VM) محیط اجرایی نهایی شما به شمار میآید. - معماری اجرایی: هر ماشین مجازی دارای سیستمعامل و کرنل مخصوص به خود است که توسط هایپروایزر مدیریت میشود، اما در داکر، کانتینرها تنها به کرنل میزبان متکی هستند و اجرای آنها توسط Docker Engine انجام میگیرد.
- نحوه استفاده از منابع سیستم: ماشینهای مجازی منابع مشخصی را بهصورت ثابت از سیستم میگیرند و تا زمان خاموش شدن از آن استفاده میکنند. در طرف مقابل، کانتینرهای داکر منابع را بهصورت پویا و در زمان اجرا از سیستم درخواست میکنند. طبیعتا این امر باعث مصرف بهینهتر منابع میشود.
- امنیت: چون داکر کانتینرها را روی کرنل میزبان اجرا میکند، در صورت وجود آسیبپذیری در کرنل، ریسک امنیتی بیشتری دارد. در طرف مقابل، ماشینهای مجازی با داشتن سیستمعامل مجزا، ایزولاسیون بیشتری دارند و درصورتیکه سیستمعامل آنها امن باشد، سطح امنیت بالاتری را ارائه میدهند.
- مالکیت منابع: داکر از کرنل سیستمعامل میزبان استفاده میکند و منابع سختافزاری را بهصورت اشتراکی بین کانتینرها مدیریت میکند. این امر باعث مصرف کمتر منابع میشود. در ماشین مجازی، هر VM سیستمعامل کامل خود را دارد و منابع اختصاصی نیاز دارد. این قابلیت باعث مصرف بیشتر CPU، RAM و فضای ذخیرهسازی میشود.
- طول عمر: کانتینرهای داکر بسیار سریع ساخته و حذف میشوند. این قابلیت به شما کمک میکند که براساس نیاز خود، آنها را به سرعت راهاندازی یا متوقف کنید. هرچند ماشینهای مجازی هم مستقل از هم هستند، اما ایجاد یا حذف آنها به نسبت کانتینرها فرایندی سنگینتر و کندتر است.
- زمان راهاندازی: کانتینرهای داکر تقریبا بلافاصله اجرا میشوند،زیرا نیازی به بوت سیستمعامل ندارند. در طرف مقابل راهاندازی یک ماشین مجازی شامل فرایند کامل بوت سیستمعامل است و طبیعتا زمان بیشتری نیاز دارد.
- عملکرد: داکر با حذف لایههای اضافی سیستمعامل، عملکردی نزدیک به حالت بومی (native) ارائه میدهد و سربار کمی دارد، اما معمولا ماشینهای مجازی بهدلیل نیاز به مجازیسازی سختافزار و سیستمعامل، عملکرد کندتری نسبت به کانتینرها دارند.
- قابلیت حمل: کانتینرهای داکر تا وقتی که Docker پشتیبانی شود، میتوانند بهراحتی بین محیطهای مختلف (مانند لپتاپ، سرور یا ابر) منتقل و اجرا شوند. در طرف مقابل، ماشینهای مجازی بیشتر به نوع هایپروایزر وابسته هستند و جابهجایی آنها بین پلتفرمهای مختلف نیازمند تنظیمات بیشتری است.
- مقیاسپذیری: داکر از ابتدا برای مقیاسپذیری طراحی شده است و با ابزارهایی مانند Kubernetes، میتوان با سرعت زیادی کانتینرها را افزایش یا کاهش داد. در سمت دیگر ماجرا، افزایش مقیاس در ماشینهای مجازی کندتر و پرهزینهتر است؛ زیرا هر VM نیاز به منابع مستقل دارد.
- انعطافپذیری سیستمعامل: داکر محدود به کرنل میزبان است، یعنی همه کانتینرها باید با سیستمعامل اصلی سازگار باشند. در سمت مقابل، ماشینهای مجازی میتوانند سیستمعاملهای کاملا متفاوتی (مانند لینوکس و ویندوز در کنار هم) را روی یک سختافزار مشترک اجرا کنند.
- کاربرد مناسب: داکر برای پروژههایی که نیاز به راهاندازی سریع، مقیاسپذیری بالا و استفاده بهینه از منابع دارند (مانند معماری میکروسرویس و CI/CD)، گزینه ایدئالی است. در سمت مقابل، ماشینهای مجازی بیشتر مناسب سناریوهایی هستند که به ایزولاسیون قوی یا اجرای سیستمعاملهای مختلف مانند اجرای برنامههای قدیمی یا تست چند سیستمعامل، نیاز دارند.
معماری و عملکرد داکر
داکر از یک معماری کلاینت-سرور استفاده میکند. داکر کلاینت با داکر دیمون (docker daemon)، که مسئول بخش سخت عملیات یعنی بیلد، اجرا و توزیع کانتینر است، در ارتباط دارد. کلاینت و دیمون میتوانند روی یک سیستم باشند یا حتی میتوانید کلاینت خود را به صورت ریموت به یک داکر دیمون وصل کنید.
داکر کلاینت و داکر دیمون با استفاده از REST API از طریق سوکت UNIX یا رابط شبکه با یکدیگر ارتباط برقرار میکنند. نوع دیگری از داکر کلاینتها، داکر کامپوز (docker compose) است که به شما این امکان را میدهد تا با نرمافزارهایی کار کنید که از چند کانتینر ساخته شدهاند.
داکر دیمون (Docker Daemon)
داکر دیمون (با دستور dockerd ) به درخواستهای API Docker گوش میدهد و اشیای داکر مانند ایمیجها، کانتینرها، شبکهها و ولومها را مدیریت میکند. همچنین یک دیمون میتواند برای مدیریت سرویسهای داکر، با سایر دیمونها ارتباط برقرار کند.
داکر کلاینت (Docker Client)
داکر کلاینت (با دستور docker) اولین راه ارتباطی کاربران با داکر است. وقتی از دستورهای مختلف داکر مانند docker run استفاده میکنید، کلاینت این دستور را به دیمون میرساند. کلاینت با استفاده از API داکر کار میکند و میتواند با بیش از یک دیمون در ارتباط باشد.
داکر دسکتاپ (Docker Desktop)
داکر دسکتاپ، یک اپلیکیشن با نصب بسیار آسان است که میتوانید روی ویندوز، مکبوک یا لینوکس نصب کنید و از آن برای ایجاد و اشتراک برنامههای کانتینری و میکروسرویسها استفاده کنید. Docker Desktop شامل عناصر مختلفی مانند دیمون، کلاینت، Docker Compose، Docker Content Trust، کوبرنتیز و … میشود.
رجیستریهای داکر (Docker Registries)
رجیستری Docker جایی است که Imageها در آن نگهداری میشوند. داکر هاب (Docker hub) یک رجیستری عمومی است که داکر بهصورت پیشفرض از آن برای پیدا کردن ایمیجها استفاده میکند. البته شما میتوانید یک رجیستری خصوصی برای خود ایجاد کنید.
زمانی که از دستورهای docker pull یا docker run استفاده میکنید، ایمیجها از رجیستری شما فراخوانی میشوند و اگر از دستور docker push استفاده کنید، ایمیج در رجیستری شما قرار میشود.
اشیای داکر (Docker Objects)
زمانی که شما از داکر استفاده میکنید، در حال ساخت اشیای مختلفی مانند Imageها، Containerها، شبکهها، Volumeها، پلاگینها و … هستید. تمام این موارد با عنوان اشیا داکر (Docker Objects) شناخته میشوند.
بخشها و ابزارهای مختلف داکر
داکر از بخشهای مختلفی ایجاد شده است که هر کدام، در اجرای صحیح و بدون مشکل فرایندهای داکر نقش دارند. این بخشها عبارتند از:
- Docker Engine: یک محیط برای اجرای کانتینرها.
- Docker Command Line Client: ابزار و بخشی که با داکر انجین تعامل دارد.
- Docker Hub: یک سرویس ابری که سرویسهای رجیستری و repository را برای داکر ایمیج فراهم میکند.
علاوهبر این بخشهای کلیدی، ابزارهای دیگری نیز وجود دارند که با داکر کار میکنند. از جمله:
- Swarm: یک ابزار خوشهبندی و زمانبندی برای برنامههای داکری.
- Docker Desktop: وارث Docker ماشین و سریعترین راه برای کانتینری کردن برنامهها
- Docker Compose: ابزاری برای تعریف و اجرای برنامههای چند کانتینری در داکر
- Docker Registry: یک سرویس رجیستری داخلی، برای ذخیره و مدیریت داکر ایمیجها
- Kubernetes: ابزاری برای هماهنگسازی کانتینرها در داکر
- Rancher: پلتفرم مدیریت کانتینر با رویکرد Kubernetes-as-a-Service
🐳 استفاده از داکر: شروعی عملی با یک مثال ساده
بیایید با اجرای یک دستور ساده، مفاهیم اولیه Docker را در عمل ببینیم:
1 |
docker run phusion/baseimage echo “Hello Moby Dock. Hello Molly.” |
✅ خروجی مورد انتظار:
1 |
Hello Moby Dock. Hello Molly. |
در ظاهر، اجرای این دستور بسیار ساده است؛ اما در پشت صحنه، چندین مرحله اتفاق میافتد:
- Docker ابتدا ایمیج phusion/baseimage را از Docker Hub دانلود میکند (در صورتی که قبلاً به صورت محلی وجود نداشته باشد).
- یک کانتینر جدید از روی این ایمیج ایجاد میشود.
- دستور echo در داخل کانتینر اجرا میشود.
- پس از پایان اجرای دستور، کانتینر متوقف میشود.
نکته: در اجرای اول ممکن است کمی تأخیر مشاهده شود، اما اگر ایمیج قبلاً کش شده باشد، اجرای آن تقریباً آنی خواهد بود.
برای مشاهده وضعیت کانتینرها میتوانید از دستور زیر استفاده کنید:
1 |
docker ps |
گام بعدی: ساخت یک برنامه ساده با Docker
حالا که با اجرای اولیه در Docker آشنا شدید، بیایید یک پروژه واقعیتر را امتحان کنیم:
ساخت و استقرار یک وبسرور ساده با استفاده از Java که در مسیر /ping به درخواستها پاسخ pong\n میدهد.
ایجاد Dockerfile
قبل از ایجاد ایمیج اختصاصی، بررسی کنید که آیا ایمیج مشابهی در Docker Hub یا سایر رجیستریها وجود دارد یا نه. در این مثال، به جای نصب دستی Java، از یک ایمیج رسمی Java 8 استفاده میکنیم.
مراحل نگارش Dockerfile:
1 2 3 4 5 6 |
FROM openjdk:8 COPY PingServer.java /app/ WORKDIR /app RUN javac PingServer.java EXPOSE 8080 ENTRYPOINT [“java”, “PingServer”] |
توضیح دستورات:
- FROM: مشخصکردن ایمیج پایه (اینجا Java 8).
- COPY: انتقال فایل Java به داخل ایمیج.
- RUN: کامپایل فایل Java.
- EXPOSE: تعریف پورتی که کانتینر روی آن گوش میدهد.
- ENTRYPOINT: تعیین نقطه شروع اجرای کانتینر.
ساخت ایمیج
فایل بالا را در یک پوشه (مثلاً docker-app) ذخیره کنید. سپس دستور زیر را برای ساخت ایمیج اجرا کنید:
1 |
docker build –t toptal/pingpong . |
اجرای کانتینر
پس از ساخت ایمیج، میتوان آن را بهصورت زیر اجرا کرد:
1 |
docker run –d –p 8080:8080 toptal/pingpong |
- -d: اجرای کانتینر به صورت background (daemon).
- -p: اتصال پورت 8080 لوکال به پورت 8080 کانتینر.
سپس در مرورگر یا با ابزار curl بررسی کنید:
1 |
curl http://localhost:8080/ping |
اگر از Boot2Docker استفاده میکنید، بهجای localhost از IP ماشین مجازی استفاده کنید:
1 |
curl $(boot2docker ip):8080/ping |
اگر همه چیز درست باشد، پاسخ زیر را دریافت میکنید:
1 |
pong |
اجرای تعاملی (Interactive)
برای ورود به محیط bash کانتینر میتوانید از دستور زیر استفاده کنید:
1 |
docker run –it —entrypoint=“bash” toptal/pingpong |
این دستور نقطه ورود کانتینر را تغییر میدهد تا مستقیماً وارد ترمینال bash شوید. با خروج از آن، کانتینر نیز متوقف خواهد شد.
مدیریت حجم داده (Volumes)
اگر میخواهید دادهها خارج از کانتینر ذخیره شوند یا بین کانتینر و سیستم اصلی به اشتراک گذاشته شوند، از دستور -v استفاده کنید:
1 |
docker run –v /host/path:/container/path toptal/pingpong |
برای دسترسی فقطخواندنی:
1 |
docker run –v /host/path:/container/path:ro toptal/pingpong |
موارد کاربرد Volumes:
- ذخیرهسازی دادههای حساس مانند کلیدهای خصوصی یا فایلهای احراز هویت.
- بهاشتراکگذاری دادههایی که نمیخواهید روی ایمیج ذخیره شوند.
- جلوگیری از تکرار دانلودها (مثل دایرکتوری .m2 برای Maven).
اتصال بین کانتینرها
برای برقراری ارتباط بین دو کانتینر، از –link استفاده کنید:
1 |
docker run —link other–container–name toptal/pingpong |
کانتینرهای لینکشده میتوانند بدون مشخصکردن پورت، از طریق نام DNS یکدیگر را پیدا کنند.
مزایای استفاده از Docker
امروزه داکر به قدری محبوب شده است که بسیاری از افراد، عبارتهای داکر و Container را به جای یکدیگر استفاده میکنند. اما در واقع اولین تکنولوژی کانتینر-محور، سالها قبل از Docker معرفی شده بود و تا سال ۲۰۱۳ هم از آن استفاده میشد. Docker به برنامهنویسها این امکان را میدهد تا از ویژگیهای کانتینر و مجازیسازی که در هسته لینوکس قرار دارد، با کمک دستورهای ساده استفاده کنند.
همچنین با استفاده از API (رابط برنامهنویسی اپلیکیشن) بسیاری از فرایندها را اتوماتیک میکند. در مقایسه با سیستمهای قدیمی مدیریت کانتینر، داکر مزایای زیر را دارد:
- قابلیت حمل بهبودیافته و بدون مشکل کانتینرها
- حجم و وزن کمتر و بهروزرسانیهای جزئی
- ساخت کانتینر خودکار (اتوماتیک)
- امکان ساخت نسخههای مختلف از یک کانتینر و انتخاب از بین نسخهها
- امکان بازاستفاده از کانتینرها
- کتابخانه مشترک بین کانتینرها با استفاده از رجیستری متن باز (Open-source)
کاربردهای داکر در توسعه نرمافزار و DevOps
کاربردهای بسیار عالی داکر برای توسعهدهندگان و تیمهای عملیاتی (DevOps)، باعث افزایش سرعت، سادگی و اطمینان در چرخه عمر نرمافزار شده است. اگر شما توسعهدهنده هستید و یا در تیمهای DevOps فعالیت میکنید، داکر میتواند فرایند کارتان را متحول کند. در جدول زیر، مهمترین کاربردهای داکر را در این دو حوزه را مشاهده میکنید:
حوزه کاربرد | کاربردهای اصلی داکر |
توسعه نرمافزار | ساخت محیط توسعه ایزوله و قابل تکرار برای هر پروژه
حمل آسان پروژه بین سیستمها بدون مشکل ناسازگاری مدیریت سادهتر وابستگیها و پکیجها اجرای برنامه از مرورگر بدون نصب نرمافزار محلی |
مهندسی دواپس | استقرار خودکار نرمافزار در مراحل CI/CD
مقیاسپذیری سریع و آسان از طریق اجرای چند کانتینر مدیریت زیرساخت بهصورت کد (IaC) با ابزارهایی مثل Docker Compose و Kubernetes |
روشهای استفاده بهینه از داکر
برای اینکه بتوانید از بهینهترین حالت داکر استفاده کنید، بهروشها یا Best Practiceهایی وجود دارند که نتیجه تجربیات قبلی افراد در استفاده از این ابزارند. ۵ مورد زیر از مهمترین و کاربردیترین روشهای بهینه استفاده از داکر هستند:
- از فایل .dockerignore برای خارج کردن فایلها و مسیرها از بیلد خود استفاده کنید.
- Dockerfile خود را ساده و خوانا ایجاد کنید.
- بهتر است زمان کار با داکر از دستور sudo استفاده نکنید.
- با استفاده از دستور docker network یک شبکه تعریف شده توسط کاربر (user-defined) برای برنامه خود بسازید.
- از Docker secrets برای مدیریت اطلاعات محرمانه و حساس که توسط کانتینرها به کار میروند، استفاده کنید.
رایجترین دستورات یا Commandها در داکر
برای شروع کار با داکر، میتوانید از لیست دستورات زیر کمک بگیرید:
- داکر برای مدیریت کانتینرهای سیستم
- docker build برای ساخت یک ایمیج جدید از یک Dockerfile
- docker images برای نمایش لیست تمام ایمیجهای موجود روی سیستم
- docker run برای اجرای یک کانتینر جدید از یک ایمیج
- docker ps برای نمایش لیست تمام کانتینرهای در حال اجرا روی سیستم
- docker stop برای توقف بدون مشکل یک کانتینر فعال (در حال اجرا)
- docker rm برای پاک کردن یک کانتینر متوقف شده از روی سیستم
- docker rmi برای پاک کردن یک ایمیج از روی سیستم
- docker login برای ورود به رجیستری داکر
- docker push برای ذخیره (پوش کردن) یک ایمیج در داکر رجیستری
- docker pull برای فراخوانی (پول کردن) یک ایمیج از داکر رجیستری
- docker exec برای اجرای دستور در یک کانتینر فعال
- docker export برای ذخیره کانتینر به صورت tar archive
- docker import برای باز کردن یک tar archive به صورت ایمیج
در نهایت، میتوانید از یک ویرایشگر متنی مانند Vim یا Emacs برای ویرایش Dockerfile خود استفاده کنید.
جمعبندی
امروزه داکر به یکی از عناصر اصلی مدیریت فرایندها در دواپس تبدیل شده است و اگر قصد ورود به این حوزه را دارید، خوب است که بتوانید از ابزارهایی مانند Docker، Kubernetes و … استفاده کنید تا فرایندهای خود را در بهینهترین حالت انجام دهید.
منابع
www.aws.amazon.com | www.medium.com | www.codefinity.com
سوالات متداول
داکر یک پلتفرم نرمافزاری است که به شما امکان میدهد برنامهها را به سرعت ایجاد، آزمایش و مستقر کنید. داکر نرمافزار را در واحدهای استانداردی به نام کانتینرها بستهبندی میکند که هر آنچه نرمافزار برای اجرا نیاز دارد، از جمله کتابخانهها، ابزارهای سیستم، کد و زمان اجرا را در خود جای داده است.
با استفاده از داکر، میتوانید برنامهها را روی هر دستگاهی مستقر و مقیاسبندی کنید و از اجرای مداوم کد خود اطمینان حاصل کنید. در مقابل، یک ماشین مجازی یک کپی دیجیتال از یک ماشین فیزیکی است. شما میتوانید چندین ماشین مجازی با سیستم عاملهای جداگانه خود داشته باشید که روی همان سیستم عامل میزبان اجرا میشوند.
Docker Personal رایگان است و داکر را از طریق اشتراک Docker Personal در دسترس افراد، دانشآموزان، مربیان، سازمانهای غیرانتفاعی و کسبوکارهای کوچک قرار میدهد.
دیدگاهتان را بنویسید