حالا این داکر چی هست؟
سلام، اگر شهودی دقیق نصبت به مفهموم داکر ندارید، من سعی کردم گام اول رو برای شما ساده کنم تا چهارچوب کلی داکر در ذهن شما شکل بگیرد. با داکر میتوانید راحتر بتوانید از این ابزار استفاده کنید و خیلی از کارها مرتبط با توسعه نرمافزار را سادهتر انجام بدید. برای من یکی از سختترین کارها، نوشتن پست در مورد چیزهای هست که از زمان یادگیری آنها زمان زیادی گذشته. دقیق نمیدونم چی بدیهی هست و چی رو باید با جزئیات توضیح داد. تو این پست سعی میکنم کلمات کلیدی داکر رو تعریف کنم … این نوشته فقط از لحاظ درک مفاهیم اولیه بوده و سعی نشده معماری یا ساختار کلی داکر به صورت دقیق شرح داده شود.
داکر چی هست؟
داکر یک روش برای ساخت، ارسال و اجرای آسان اپلیکیشن هست. داکر با استفاده با کمک روشی به اسم کانتینر (Container) که مجازیسازی در لایه هسته سیستمعامل است، نرمافزارها را مدیریت میکند. درواقع مجازیسازی مفهموم جدیدی نیست و کانتینرها فقط یک مسیر جدید برای پیادهسازی مفهوم مجازیسازی است. قبل از کانتینرها از ماشینهایمجازی استفاده میشد که درواقع به صورت انتزاعی یک سرور را به چندین سرور کاملاً مجزا تبدیل و هر کدام میتوانست سیستمعامل مجزا مانند لینوکس یا ویندوز داشته باشند. اما کانتینرها در یک ماشین و فقط در یک سیستمعامل ساخته میشوند.
کانتینر در واقع یک «فضای اسم» (Namespaces) برای هر نرمافزار میسازد تا هسته سیستمعامل لینوکس، منابع آن را به صورت مجزا مدیریت کند.
یکی از شاخصهای تاثیرگذار در کارایی کانتینرها به نسبت ماشینهایمجازی برای راهاندازی نرمافزار متعدد و مستقل، همین تفاوت است. کانتینرها نیاز به راهاندازی و آماده به کار شدن یک سیستمعامل مجزا ندارند و فقط یک «فضای اسم» جدید در سیستمعامل مادر تعریف میکنند.
اصطلاحات کلیدی در داکر
- Container
- کانتینرها یک «فضای اسم» یا (Namespaces) هستند که توسط هسته سیستمعامل ساخته میشوند و اطلاعات موجود در «ایمیجها» به صورت ایزوله در آن کپی و اجرا میشود.
- Image
- ایمجها در واقع قالبهای فقط خواندنی هستند که با دستورات نوشته شده در «داکر فایل» بوجود میآیند. برای درک بهتر اگر ایمج را کلاس (Class) یا استراکت (Structs) در زبانهای برنامهنویسی در نظر بگیریم، کانتینر یک شئ (Object) است که از این کلاس یا استراکت مقداردهی اولیه میشود. درواقع داکر میتواند از قالبهای که به آنها ایمج میگوید، میتواند کانتینرهای مختلف با متغییرهای متفاوت بسازد. مثلاً میتوان چندین ساختمانداده MySQL بر روی Portهای متفاوت بر روی یک ماشین اجرا کرد.
- Dockerfile
- برای ساخت یک ایمیج، دستورات خود را داخل یک فایل به اسم «داکر فایل» قرار میدهیم. به طور مثال برای ساخت داکر فایل راهاندازی نرمافزار خود، باید فرض کنید یک لینوکس خام به شما داده شده و به ترتیب تمام دستوراتی که در Command Line میزنید برای نصب پیشنیازهای اجرای نرمافزار خودتان را میبایست داخل این فایل بنوسید. بهتر است از نزدیکترین ایمیج به هدف خودتان ارث ببرید. مثلاً برای اجرای یک نرمافزار جاوا میتواند در ابتدای فایل «داکر فایل» با دستور
FROM java:8
یک لینوکس ابونتو که جاوا ورژن ۸ بر روی آن نصب است را در اختیار شما قرار میدهد. حالا فقط لازم است دستوارات مورد نیاز برای اجرای نرمافزار خودتان را بعد از نصب جاوا در داخل «داکر فایل» قرار دهید.
- برای ساخت یک ایمیج، دستورات خود را داخل یک فایل به اسم «داکر فایل» قرار میدهیم. به طور مثال برای ساخت داکر فایل راهاندازی نرمافزار خود، باید فرض کنید یک لینوکس خام به شما داده شده و به ترتیب تمام دستوراتی که در Command Line میزنید برای نصب پیشنیازهای اجرای نرمافزار خودتان را میبایست داخل این فایل بنوسید. بهتر است از نزدیکترین ایمیج به هدف خودتان ارث ببرید. مثلاً برای اجرای یک نرمافزار جاوا میتواند در ابتدای فایل «داکر فایل» با دستور
# save it simple with Dockerfile name. FROM java:8 # Copy source file to Image COPY . /var/www/java WORKDIR /var/www/java # Compile the java code RUN javac Hello.java # Running the java-applicathion CMD ["java", "Hello"]
- Hub
- هاب داکر یک مخزن فضایی برای نگهداری ایمیجها هست. شرکتهای ارائه دهنده نرمافزار یا حتی شما میتوانید ایمیج نرمافزار خود را برای انتشار عمومی بر روی این مخازن قرار دهید. ابر یوتاب سرویس هاب داکر را در اختیار کاربران قرار داده، در این پست در مورد سرویس مخزن اختصاصی داکر و ابر یوتاب؛ اطلاعات بیشتری هست.
- Volume
- والیومها یکی از متغییرهای پرکاربرد هنگام ساخت کانتینرها هستند. والیومها فضایی برای نگهداری فایلها هستند که با دید جدا کردن قسمت نگهداری اطلاعات از فضای اسم کانتینرها مورد استفاده قرار میگیرد. در حالت عادی فایلها در داخل «فضای اسم» کانتینرها نوشته شده و بعد از پایان اجرای یا تخریب یک کانتینر، اطلاعات آن حذف میشوند. والیومها کمک میکنند اطلاعات موجود در یک مسیر فایل در داخل کانتینر مثل
/var/www/html/
را خارج از کانتینر و در داخل سرور مثلا در مسیر/home/user/data/
قرار دهیم. این اطلاعات بعد از پایان اجرا یا تخریب یک کانتینر، در دسترس هستند و میتوان یک کانتینر تازهنفس را با همان اطلاعات قدیمی، مجدداً اجرا کنیم. همچنین این مسیر را میتوان بین چندین کانتینر به اشتراک گذاشت.
- والیومها یکی از متغییرهای پرکاربرد هنگام ساخت کانتینرها هستند. والیومها فضایی برای نگهداری فایلها هستند که با دید جدا کردن قسمت نگهداری اطلاعات از فضای اسم کانتینرها مورد استفاده قرار میگیرد. در حالت عادی فایلها در داخل «فضای اسم» کانتینرها نوشته شده و بعد از پایان اجرای یا تخریب یک کانتینر، اطلاعات آن حذف میشوند. والیومها کمک میکنند اطلاعات موجود در یک مسیر فایل در داخل کانتینر مثل
- Port
- پورت یکی از متغییرهای است که هنگام ساخت کانتینر معمولا مورد استفاده قرار میگیرد. داکر این امکان را میدهد هر پورت تعریف شده در ایمیج به یک پورت قابل دسترس در سرور نگاشت (mappings) شود. به طور مثال اگر ایمیج wordpress در پورت ۸۰ پاسخگو تعریف شده است، ما میتوانیم سه عدد کانتینر مجزا اجرا کنیم که هر سه بر روی یک سرور و پورت ۸۰ آنها به پورتهای ۸۰۸۰، ۸۰۸۱ و ۸۰۸۲ نگاشت شده باشند.
چرا از داکر استفاده کنیم؟
- استقلال از محیط اجرا – شما میتوانید یک مجموعه از تنظیمات و دستورات یک نرمافزار را در داخل کامپیوتر شخصی خود اجرا و ثبت کنید و مطمئن باشید همان خروجی که بر روی سیستم خود مشاهده کردید، بدون نیاز به اصلاحات بر روی سرور محصول هم خواهید داشت.
- «کانتینرها» به نسبت «ماشینهای مجازی» به منابع کمتری برای اجرای یک نرمافزار نیاز داشته و به همین خاطر منابع موجود را میتوانند به تعداد بیشتری اپلیکیشن اختصاص دهند یا منابع بیشتری برای تعداد مشخص از اپلیکیشن در نظر گرفت.
- محبوبیت داکر باعث شده ایمج نرمافزارهای آماده به کار در مخازن داکر موجود باشد و راهاندازی سرویسها را برای شما سریع و ساده کند. همچنین با توجه به معماری وراثتی داکر، شما میتوانید برای ساخت ایمیج اختصاصی خود، از یک ایمیج آماده، ارث ببرید و تنظیمات شخصی خود را بر روی آن دوبارهنویسی کنید.
- با داکر به سادگی میتوانید طراحی میکروسرویسها را پیادهسازی کنید و هر سرویس را در کانتینر جدا قرار داده تا در آینده به سادگی هر بخش، بدون از کار افتادن کل ساختار بروزرسانی شود. همچنین سرویسهای که منابع بیشتری مصرف میکند به صورت مستقل رشد کنند و منابع بیشتر در اختیار داشته باشند.