مفاهیم پایه ای داکر

مجموعه ابزارهای داکر به طور کلی توسعه و انتشار نرم افزارها را ساده میکند و این کار را از طریق فراهم کردن یک راه حل مناسب برای ساخت و به اشتراک گذاشتن تصویری قابل اجرا از یک برنامه کاربردی انجام میدهد. یک تصویر داکر همچنین بخشهای زیادی از سیستم عامل بجز هسته آن را شامل میشود.

پیش از مطالعه این مطلب اگر در ضرورت استفاده از داکر تردید دارید میتوانید مقاله چرا به داکر نیاز دارید را مطالعه کنید.

بخشهای اصلی اکوسیستم داکر

مجموعه ابزارها و سرویسهای داکر را میتوان در سه بخش اصلی دسته بندی کرد:

  • ساخت: تولید یک تصویر (image) داکر که یک برنامه کاربردی به همراه تمام وابستگی های آن را در خود دارد. هر تصویر معمولا با ساز و کار docker build از روی یک Dockerfile و با اضافه کردن یک یا چند برنامه کاربردی به یک تصویر پایه ساخته میشود.
  • اجرا: کانتینرها (container) که در واقع تصاویر در حال اجرا هستند را میتوان به سادگی و با سرعت زیاد در تعداد بالا ایجاد و سپس متوقف و یا کاملا حذف کرد. مزیت اصلی داکر در این بخش جداسازی کامل این کانتینرها از یکدیگر در زمان اجراست، به طوری که هر یک از آنها گمان میکنند روی یک سیستم عامل کاملا جداگانه اجرا شده اند.

  • انتشار: تصاویر تولید شده در داکر از طریق سرویسی به نام registry و با کمک دستورات docker push و docker pull به آسانی قابل انتشار و به اشتراک گذاری هستند. همچنین سرویس آنلاین Docker Hub یک نمونه از این registry است که برای مصارف عمومی به صورت رایگان در اختیار کاربران قرار داده شده است.
    لازم به یادآوری است که اگر در استفاده از این سرویس با مشکلاتی برای دانلود تصاویر مواجه شدید، میتوانید با تنظیم یک mirror به صورتی که در این گروه گفته شده، دوباره امتحان کنید.

برای اینکه بتوانید با این سه جنبه از داکر کار کنید نیاز دارید برنامه موتور داکر به نام docker daemon را روی سیستم خودتان یا در یک ماشین مجازی اجرا کنید. این برنامه در واقع تمام عملیاتهای درخواست شده از داکر برای ساخت، اجرا و انتشار کانتینرها را انجام میدهد. علاوه بر این، شما به یک برنامه دیگر به نام docker client نیاز دارید که دستورات را از خط فرمان میگیرد و به موتور داکر منتقل میکند. در سیستم عامل لینوکس هر دو این برنامه ها در قالب یک فایل اجرایی به نام docker به شما ارایه میشود. اما در سیستم عاملهای دیگر مانند ویندوز و Mac OS X تنها بخش client در فایل اجرایی docker وجود دارد و شما نیاز دارید سرویس docker daemon‍ را در یک سیستم عامل جداگانه، که در حال حاضر باید حتما لینوکس باشد، اجرا کنید. ابزار ماشین داکر (docker machine) که پایین تر درباره آن توضیح داده شده است در این مورد به شما کمک میکند.

به طور کلی هر زمان که با دستور docker run‍ کانتینری را اجرا میکنید، موتور داکر ابتدا تصویر مورد نظر را از یک registry، مانند ‌Docker Hub، دانلود میکند و سپس یک کانتینر جدید از آن تصویر ایجاد میکند. البته اگر دوباره اقدام به ساخت یک کانتینر از روی همان تصویر کنید دیگر نیازی به دانلود کردن آن نیست و بنابراین دفعات بعدی این کار با سرعت بالاتری انجام میشود.

ساختار یک تصویر داکر (docker image)

هر تصویر داکر از یک سری لایه تشکیل شده است که هر لایه تنها شامل تغییرات نسبت به لایه قبلیست. موتور داکر در زمان اجرا از فایل سیستمهایی استفاده میکند که این امکان را فراهم میکنند تا تمامی این لایه ها به صورت یک ساختار فایل یکپارچه در اختیار کانتینر قرار داده شود.

یکی از برتریهای داکر نسبت به فناوری ماشینهای مجازی استفاده از همین ساختار لایه ای برای تصاویر است. این لایه بندی باعث میشود زمانی که شما یک تصویر جدید را از روی یک تصویر قبلی میسازید داکر نیازی به کپی کردن همه فایلهای تصویر قبلی ندارد و تنها کافیست که لایه جدید، شامل تغییرات فایلها را، بسازد. به این ترتیب هر لایه پس از یکبار ساخته شدن دیگر تغییر نمیکند و به راحتی میتوان آن را بین تصاویر گوناگون به اشتراک گذاشت بدون اینکه نیاز باشد داکر کاری برای جلوگیری از تداخل فایلها انجام دهد. این روش مصرف دیسک سخت را به میزان زیادی بهینه میکند.

در این مدل هر تصویر داکر از یک تصویر پایه (base image)‌ ساخته میشود. این تصویر پایه ممکن است یک سیستم عامل سبک مانند لینوکس Debian یا Alpine باشد، ولی حتی میتوان از یک سیستم عامل بزرگ مانند Ubuntu شروع کرد، اگر چه این کار معمولا توصیه نمی شود. این تصویر در صورتی که از قبل روی سیستم شما وجود نداشته باشد در زمان اولین ساخت از داکر هاب دانلود میشود. سپس شما میتوانید تصاویر بعدی را حتی از روی تصاویری که خودتان قبلا تولید کرده اید بسازید.

به عنوان مثال شما میتوانید از یک تصویر Debian شروع کنید و سپس با نصب محیط اجرایی جاوا و یک وب سرور مانند Tomcat روی آن، تصویری بسازید که پایه تصاویر بعدی شما شود. برای این کار نیاز به نوشتن یک فایل به نام Dockerfile دارید که شامل یک تصویر پایه و سپس دستوراتی برای نصب برنامه ها، اضافه کردن فایلها و در انتها مشخص کردن دستوریست که در زمان ایجاد کانتینر اجرا خواهد شد. در نهایت وقتی شما با استفاده از دستور docker build درخواست تولید این تصویر را صادر میکنید داکر دستورات داخل این فایل را اجرا میکند و به این ترتیب لایه های جدیدی برای تصویر شما تولید میشود. سپس شما میتوانید این تصویر را با دستور docker push به یک registry بفرستید و نام آن را با دیگران به اشتراک بگذارید تا به راحتی بتوانند آن را دانلود و اجرا کنند.

ساختار یک کانتینر (container)

یک کانتینر از اجرای یک یا چند پردازه (process) بر روی فایلهای یک تصویر بدست می آید. داکر اطلاعات بیشتری مانند اینکه کدام پورتهای شبکه (network port) باید در اختیار این پردازه ها قرار بگیرد را هم مدیریت میکند. از مهمترین نکات این است که تغییراتی که هر کانتینر روی فایلهای خود ایجاد میکند به صورت جداگانه و در یک لایه جدید ذخیره میشود و به این ترتیب تصویر اصلی هیچگاه تغییر نمیکند.

با توقف یک کانتینر با استفاده از دستور docker stop‍ پردازه های آن متوقف میشوند ولی تغییرات فایلهای آن همچنان قابل بازیابی هستند تا زمانی که لایه های متعلق به آن کانتینر با دستور docker rm کاملا حذف شوند. برای آشنایی بیشتر با دستورات داکر میتوانید مقاله دستورات پرکاربرد داکر را مطالعه کنید.

همانطور که گفته شد مزیت اصلی داکر در جداسازی کامل فضای پردازه های کانتینرهای مختلف از یکدیگر است، به طوری که هر کانتینر تصور میکند تنها پردازه های خودش در حال حاضر در حال اجرا هستند. این جداسازی همچنین شامل فایل سیستم، فضای کاربری، پشته شبکه (network stack)‌ و بخشهای دیگری از سیستم عامل میشود. از این طریق داکر امکان قرار دادن محدودیتهای گوناگون روی دسترسی هر کانتینر به منابع مشترک سیستم را فراهم میکند.

ماشین داکر (docker machine)

ماشین داکر یک ابزار جانبیست که ایجاد و مدیریت موتورهای داکر روی رایانه های شخصی یا سرویسهای ابری را تسهیل میکند. به طور مختصر این ابزار امکان ایجاد سرورهایی را فراهم میکند که موتور داکر را بر روی خود دارند و به سادگی اجازه میدهد از طریق پیکربندی docker client روی ماشین خودتان به این سرورها متصل شوید و با موتور داکر کار کنید.

برای آشنایی بیشتر با این فناوری میتوانید وبینار تاک با موضوع آشنایی مقدماتی با داکر را مشاهده کنید یا دستورات پرکاربرد داکر را مطالعه کنید.