داکر چیست و چرا برنامه نویس ها باید از آن استفاده کنند؟

داکر یکی از تکنولوژی‌هایی است که امروزه صحبت بسیار زیادی از آن می‌شود و شرکت‌های بسیار زیادی نیز به عنوان یکی از ملزومات برای استخدام یک برنامه‌نویس دانش داکر را از وی تقاضا می‌کنند. اما آیا داکر واقعا چیز مهمی‌ست؟ خب در این مقاله اختصاصی با این موضوع که داکر چیست و چرا تا به این حد در بین برنامه‌ نویسان و شرکت‌های مختلف دنیا محبوب شده است نگاهی می‌اندازیم.

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

۱- داکر چیست؟

داکر یک نرم افزار متن باز است که فرایند توسعه، دیپلوی و اجرا کردن اپلیکیشن‌ها در داخل یک کانتینر را به صورت خودکار انجام می‌دهد. اما سوال دیگری که پیش می‌آید این است که کانتینر چیست؟ کانتینر را مانند یک محفظه یا یک پکیج در نظر بگیرید که در آن توسعه دهندگان می‌توانند تمام قسمت‌های اپلیکیشن‌شان را در آن قرار دهند. قسمت‌هایی مانند خود اپلیکیشن، کتابخانه‌ها و ملزومات مورد نیاز. بدین شکل برنامه‌نویسان می‌توانند بهتر نیازمندی‌های پروژه‌شان برای اجرا شدن را مدیریت کنند.

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

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

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

بهترین ویژگی‌های داکر در متن باز بودن آن و همچنین پیشنهاد دادن یک سیستم کنترل نسخه است که باعث می‌شود به نسبت دیگر موارد منحصر به فرد‌تر باشد.

با استفاده از ویژگی‌هایی که داکر ارائه می‌دهد برنامه‌نویسان می‌توانند بجای نگرانی از نحوه اجرا پروژه‌های‌شان روی مراحل کدنویسی تاکید کرده و بیشتر تمرکز خود را روی آن بگذراند. همچنین سرویس‌هایی که داکر را روی خودشان اجرا می‌کنند معمولا سرویس‌های Pay as you go هستند یعنی درست به میزانی که شما از منابع استفاده می‌کنید مشمول پرداخت هزینه خواهید بود و نه بیشتر.

اما جدای از این موارد چرا باید از داکر استفاده کرد و چرا شرکت‌ها به این تکنولوژی علاقه‌مند هستند؟

چرا از داکر استفاده کنیم؟

داکر کاری می‌کند که مجازی‌سازی و کانتینرسازی مبتنی بر لینوکس بسیار آسان‌تر شود. در حقیقت داکر یک سیستم عالی برای اینکار به حساب می‌آید.

ده‌ها دلیل مختلف برای استفاده از داکر وجود دارد که من در این مقاله قصد دارم روی سه اصلی اصلی آن تمرکز کنم. یکپارچه بودن، سرعت و ایزوله بودن.

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

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

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

مشکلات داکر

یکی از اصلی‌ترین مشکلاتی که توسعه دهندگان در مواجهه با داکر دارند این است که درک کردن داکر نسبت به تکنولوژی‌های مشابه کمی سخت‌تر بوده و به همین دلیل برنامه نویسان بسیاری از یادگیری آن سر باز می‌زنند. در کنار این، مدت زمانی که شما برای یادگیری داکر باید در نظر بگیرید کمی زیاد بوده و نیاز به کسب تجربه‌های متفاوت در این زمینه خواهید داشت.

با در نظر گرفتن این موارد باز هم باید بگوییم که داکر یکی از پر ارزش‌ترین ابزارهایی است که براستی اگر برای آن وقت کافی بگذارید می‌تواند به یک ابزار بسیار مناسب در جهت توسعه اپلیکیشن‌ها تبدیل شود.

ایجاد اولین کانتینر

بیایید اولین داکر کانتینر خود را ایجاد کنیم تا با مراحل ایجاد یک کانتینر آشنایی پیدا بکنید. همانطور که گفتم همه ملزومات پروژه شما در داکر به صورت کانتینرها ایزوله خواهند شد و این هنر شما خواهد بود که با استفاده از داکر پروژه‌تان را به این شکل دربیاورید. برای درک این مرحله شما باید با سه مقوله مبتنی بر داکر آشنایی پیدا کنید:

  • Dockerfile – براساس این فایل image شما شکل خواهد گرفت.
  • Image – به فایلی گفته می‌شود که تمام اطلاعات مورد نیاز پروژه در آن قرار دارد.
  • Container – زمانی که یک image را اجرا می‌کنید در نهایت به یک کانتینر تبدیل خواهد شد.

در ارتباط با هر سه این مورد در زیر به شما توضیحات و مثال‌هایی را ارائه خواهیم کرد.

?

Dockerfile

به واسطه این فایل ما به داکر می‌توانیم بگوییم که پروژه ما به شکلی باید اجرا شود و چه ساختاری را خواهد داشت. برای مثال تصور بکنید که ما قصد اجرا یک اپلیکیشن flask مبتنی بر زبان برنامه پایتون را خواهیم داشت. در این صورت Dockerfile ما شبیه به زیر خواهد بود:

FROM python:3.8-slim-buster
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD [ &quotpython&quot, &quot-m&quot , &quotflask&quot, &quotrun&quot, &quot--host=0.0.0.0&quot]

در خط اول ما یک سیستم عامل (Debian Slim Buster) را به همراه پایتون نسخه ۳.۸ نصب کرده‌ایم.

در خط دوم دایرکتوری جدیدی با نام app را ایجاد کرده‌ایم که قرار است تمام اپلیکیشن شما در آن قرار بگیرد.

در خط سوم فایل requirements.txt را کپی کرده‌ایم. این فایل مربوط به پروژه‌های پایتونی است و لیستی از کتابخانه و ماژول‌های مورد نیاز اجرا یک اپلیکیشن در آن قرار می‌گیرد.

در خط چهارم با استفاده از پکیج منیجر pip تمام کتابخانه‌های موجود در فایل requirements.txt را نصب خواهیم کرد.

در خط پنجم تمام فایل‌های مربوط به پروژه را به دایرکتوری workdir/app انتقال خواهیم داد.

در قدم آخر با استفاده از پایتون و ماژول فلسک پروژه را روی آدرس لوکال‌هاست اجرا خواهیم کرد.

Image

حال فایل داکری ما ایجاد شده و نیاز است یک image را با استفاده از آن ایجاد کنیم. برای اینکار از طریق ترمینال دستور زیر را اجرا کنید:

docker build --tag python-docker

حال در نهایت برای اجرا کردن فایل image می‌توانیم دستور زیر را در کنار python-docker اجرا کنیم:

docker run --publish 5000:5000 python-docker

در نهایت حال پروژه ما روی لوکال‌هاست و پورت ۵۰۰۰ اجرا خواهد شد.

در پایان

مهمترین فرایندی که پیش از یادگیری داکر باید طی کنید یادگیری خود برنامه نویسی است که باید مسیر یادگیری آن را به درستی طی کرده و به صورت کامل با آن آشنایی پیدا بکنید. برای این مسئله ما به شما طی کردن مسیر یادگیری برنامه نویسی را پیشنهاد می‌دهیم.

یادگیری داکر یکی از موضوعات بسیار جذابی خواهد بود که در سال‌های گذشته توانسته طرفدار بسیار زیادی را به خود اختصاص دهد. در نظر بگیرید که تمام این موارد به لطف عملیات مجازی‌سازی صورت گرفته و داکر تنها یک ابزار سریع برای پیاده‌سازی این امر است.