نخستین پرسشهایی که در ذهن هرکس هنگام برخوردن با یه افزار جدید میآید مربوط به چیستی و کاربرد آن افزار است. پس، اگر تو هم نخستین برخوردت با «داکر» باشد حتما میخواهی بدانی: «داکر چیست؟» و «چه استفادهای ازش میشود؟». در این مقاله پاسخ این پرسشها را خواهی یافت.
توجه. چون علاقه زیادی به آسان کردن [آسانیدن] و باقاعده کردن زبان دارم، واژگان زیادی ساختهام؛ که بدلیل ناشناخته بودن اشان تنها برای شناساندن ازشان استفاده کردهام [استفادهام]. ریشهی بیشتر این واژگان آشکار است؛ و در ویکیواژه تعریفشان کردهام [تعریفتهام اشان] یا خواهم کرد [تعریفینم اشان].
امیدوارم خوشایندت باشد.
سخنی با خواننده. قصد دارم [قصتادم] خودآموز داکر را از پایه برای برنامهنویسان تازهکاری که هیچ آشنایی با داکر ندارند بنویسم. ولی چون امکان دستهبندی [گروهیستن] مقالهها در ویرگول وجود ندارد، عنوان مقالههای این مجموعه را همانند زیر میگذارم:
خودآموز داکر: درس <شماره درس> - <موضوع درس>
که «شماره درس» از ۰۱ شروع شده [شروعارده]. پس، بعنوان مثال، برای یافتن درسگفتار دوم کافیه عبارت «خودآموز داکر: درس ۰۲» را در ویرگول جستجو کنی [بجویی].
پیش از پرداختن به چیستی «داکر» بهتره بنیادیترین مشکلی که با داکر میخواهیم حل کنیم [بحلیم] را بدانیم. برای همین، یکی از پیشامدهای ممکن هنگام نصب [نصبدن]/برپاییدن یه نرمافزار، که احتمالا تاحالا بهش برخوردی، را درقالب نمودار مرور میکنم [پِیْمرورم].
بطوریکه در نمودار بالا دیده میشود، ممکنه برای نصب/برپاییدن یه نرمافزار به چندین نرمافزار دیگر نیاز باشد. که این باعث دشواری نصب/برپاییدن میشود. برای مثال، برای نصب Jupyter Notebook (یه نرمافزار آموزشی تعاملی) باید ازپیش pip در سیستمعاملمان نصبشده [نصبشته] باشد، و برای نصب pip نیز پایتون، وگرنه اجرای دستور زیر باعث بروز خطای یافت نشدن pip میشود:
pip install notebook
تقریبا همه توسعهدهندگان، که محیط توسعه و استقرار نرمافزارشان متفاوت است، با این نوع مشکل مواجه هستند. پس، درواقع مسئلهی ما اینه:
چگونه یه نرمافزار را بدون توجه به نیازمندیهایش در هر محیطاجرایی (اجرالانی، environment، شامل توسعه، استقرا، یا آزمون) اجرا کنیم [باجراییم]؟
پیش از پرداختن به چیستی داکر خوبه کمی با مجازیسازی [مَجازیزْدَنْ] آشنا شویم. در علم رایانه، به ساختن نمونهی مجازی (مقابل واقعی) هر چیزی، شامل سختافزارهای رایانهای، دستگاههای ذخیرهسازی، و ...، مجازیسازی گفته میشود؛ برای مثال، در شکل زیر میبینیم که با مجازیسازی در یه سیستمعامل، توسط نرمافزاری، یه رایانهی مجازی ساخته و رویش ویندوز نصب شدهاست:
توجه. بطوریکه قابل درک است، هنگام ساخت یه رایانه مجازی (ماشین مجازی) درواقع منابع سختافزار میزبان، شامل پردازنده، RAM، و ...، بین ماشینهای مجازی اشتراکگذاری میشود.
گریز. امروزه انواع فناوری مجازیسازی کاربردهای زیادی در زمینههای سرور، شبکه، و ... دارد. برای مطالعه بیشتر عبارت «کاربردهای مجازیسازی» را در گوگل جستجو کن یا به این مقاله یه نگاه بانداز.
شاید حالا گمان کنی [بانگاری] از ماشین مجازی میتوان برای حل [حلیدن] مشکل هه استفاده کرد [استفاد]. هرچند میتوان، ولی این راه حل مناسبی نیست. چون در ماشین مجازی، همانند ماشین واقعی، سیستمعامل و نرمافزارها باید بطور کامل نصب شوند! بنابرین حجم یه ماشین مجازی ممکنه تا چند صد گیگ هم بشود.
درواقع دارکر در این موقعیتها بکارمان میآید. چون داکر افزاری است که باهاش میتوان یه محیطاجرایی (شامل سیستمعامل، نیازمندیها، و ...) را بآسانی از روی یه فایل متنی ( بنام Dockerfile) ساخت! یعنی، برای مثال، با اجرای فایل داکر زیر میتوان یه محیطاجرایی (اجرالان) ساخت که شامل سیستمعامل لینوکس Alpine و نرمافزارهای python و pip است:
# تعیندن سیستمعامل (البته با کمی سادهاندیشی) FROM alpine:3.4 # بروزیدن بستههای نرمافزاری نصبشده در سیستمعامل RUN apk update # نصبدن بستههای نرمافزاری موردنظرمان apk add python3 py3-pip
خب، ازین پس بجای اینکه یه ماشین مجازی بسازیم و رویش تمام نرمافزارهای موردنظرمان را از خطفرمان نصب کنیم، تنها کافیه دستورهای نصب و پیکربندی را در یه فایل داکر بنویسیم، و برای ساختن محیطاجرایی، توسط داکر اجرایش کنیم! و بجای یه ماشین مجازی چند صد گیگا بایتی یه فایل چند کیلو بایتی را بفرستیم!
تا اینجا فهمیدیم که داکر افزاری برای مجازیسازی [مجازیزدن] است؛ و نیز چرا و چگونه ازش استفاده میشود [استفایشد]. در درسگفتار بعد درمورد تفاوت مجازیسازیها مینویسم.