آموزش داکر (بخش اول) — از صفر تا صد
کانتینرها برای بهبود امنیت، بازتولیدپذیری، و مقیاسپذیری در توسعه نرمافزار و علم داده بسیار مفید هستند. ظهور آنها به عنوان یکی از روندهای مهم فناوری امروز محسوب میشود. داکر (Docker) یک پلتفرم برای توسعه، توزیع و اجرای اپلیکیشنهای درون کانتینرها محسوب میشود. داکر اساساً مترادف با کانتینرسازی است. اگر یک توسعهدهنده نرمافزار یا دانشمند داده هستید و یا میل دارید باشید، باید بدانید که داکر در آینده شغلی شما نقشی حیاتی خواهد داشت. بنابراین در این سری مطالب با عنوان آموزش کاربردی داکر با ما همراه باشید. همچنین در نوشته «داکر چیست» نیز به معرفی جامع داکر و ارائه راهنمایی برای شروع به کار با آن پرداخته شده است.
این مقاله به شما کمک میکند تا با کلیات مفهومی داکر آشنا شوید. در این سری مطالب آموزشی که مشتمل بر شش بخش است به بررسی اصطلاحهای داکر، فایلهای داکر (Dockerfiles)، ایمیجهای داکر، دستورهای داکر و ذخیرهسازی داده میپردازیم. در انتهای مطالعه این سری مقالات و با کمی تمرین شما آنقدر با داکر آشنا خواهید شد که بتوانید از مزیتهای آن بهرهمند شوید. همچنین یک مقاله آموزشی جامع و جدیدتر نیز برای آموزش داکر در مجله فرادرس منتشر شده است که مطالعه آن به علاقهمندان پیشنهاد میشود:
استعارههای داکر
ابتدا قصد داریم کمی در خصوص استعارههایی که در فناوری داکر استفاده شده توضیح دهیم. گوگل استعاره را به صورت زیر نیز تعریف میکند:
چیزی که به عنوان نماینده یا نمادی از چیز دیگر به خصوص چیزی انتزاعی تصور میشود.
استعاره به ما کمک میکند که با معنای چیزهای جدید آشنا شویم. برای نمونه استعاره یک کانتینر فیزیکی به ما کمک میکند که ماهیت کانتینر مجازی را درک کنیم.
کانتینر
یک کانتینر داکر نیز همچون کانتینر فیزیکی شامل موارد زیر میشود:
- اشیایی در خود نگهداری میکند: اشیا یا داخل کانتینر هستند و یا خارج آن قرار دارند.
- قابل حمل است: کانتینر میتواند روی سیستم محلی شما باشد و یا روی رایانه همکار یا سرورهای ابری قرار گیرد.
- رابط دسترسی روشنی دارد: کانتینر فیزیکی ما یک درپوش برای باز کردن و قرار دادن اشیا یا برداشتن آنها دارد. به طور مشابه یک کانتینر داکر نیز چند سازوکار برای ایجاد رابطه با دنیای خارج دارد. کانتینر مجهز به پورت است که میتواند برای تعامل از طریق مرورگر باز شود. میتوان آن را طوری پیکربندی کرد که از طرق خط فرمان با دادهها تعامل کند.
- میتواند از یک مکان دوردست به دست آید: شما میتوانید کانتینر پلاستیکی خالی دیگری را در صورت نیاز از یک فروشگاه خریداری کنید. این فروشگاه کانتینر را از سازنده آن دریافت کرده و روی آن به همراه هزاران کانتینر دیگر برچسب خود را میزند و برای شما ارسال میکند. در مورد کانتینر داکر یک رجیستری بیرونی ایمیجی از آن نگهداری میکند که برای کانتینر شما قالبگیری شده است. سپس زمانی که به کانتینر نیاز داشته باشید میتوانید از روی ایمیج یکی بسازید.
برخلاف یک کانتینر داکر مجازی، یک کانتینر پلاستیکی جدید که از فروشگاه آنلاین خریداری شده است نیاز به پرداخت هزینه دارد و همچنین یک کپی از محتویات داخل آن نیز برای شما ارسال نمیشود.
وهله زنده
روش دوم برای تصور یک کانتینر داکر، یک وهله از شیئی زنده است. منظور از وهله چیزی است که به شکل متفاوت وجود دارد و صرفاً منظورمان کد نیست. این کدی است که چیزی را به وادی حیات میآورد. مانند چیزهای زنده دیگر، وهله نیز در نهایت میمیرد، یعنی کانتینر خاموش میشود.
یک کانتینر داکر همان ایمیج داکر است که حیات یافته است.
نرمافزار
علاوه بر استعاره کانتینر و استعاره وهله زنده، میتوان کانتینر داکر را به صورت یک برنامه نرمافزاری نیز تصور کرد؛ چون در واقعیت نیز یک نرمافزار است. یک کانتینر در پایهایترین سطح خود مجموعهی از دستورالعملها است که به دستکاری بخشهای دیگر میپردازد.
زمانی که کانتینر داکر مشغول اجرا است، به طور کلی برنامههایی دارد که درون آن اجرا میشوند. برنامههای درون کانتینر اقداماتی را اجرا میکنند و از این رو اپلیکیشن شما کارهایی را انجام میدهد. برای نمونه کد درون کانتینر داکر ممکن است محتوایی را که هم اینک مشغول مطالعه هستید برای شما ارسال کرده باشد. یا این که دستور صوتی شما را به دستیار صوتی الکسای آمازون رسانده باشد و آن را به صورت دستورالعملهای یک برنامه دیگر تبدیل کرده باشد که در کانتینر دیگری مورد استفاده قرار خواهد گرفت. شما با استفاده از داکر میتوانید به طور همزمان کانتینرهای چندگانهای را روی یک رایانه میزبان اجرا کنید. به این ترتیب مانند دیگر برنامههای نرمافزاری، کانتینرهای داکر نیز میتوانند اجرا، بازرسی، متوقف و حذف شوند.
مفاهیم
در این بخش برخی مفاهیم پایه داکر را با هم مرور میکنیم.
ماشینهای مجازی
ماشینهای مجازی در واقع نسل قبلی کانتینرهای داکر محسوب میشوند. ماشینهای مجازی همچنین به ایزوله سازی یک اپلیکیشن و وابستگیهای آن اقدام میکردند. با این وجود کانتینرهای داکر برتر از ماشینهای مجازی هستند و به منابع کمتری نیاز دارند، قابلیت حمل آنها بیشتر است و سرعت راهاندازیشان بالاتر است. برای مطالعه بیشتر در این خصوص پیشنهاد میکنیم به مطلب «مفهوم معماری کانتینر (Container) چیست؟» مراجعه کنید.
ایمیج داکر
در بخش قبل به مفهوم ایمیج یا تصویر اشاره کردیم. اما ایمیج چیست؟ معنای این اصطلاح در چارچوب داکر همه جوانب تصویر فیزیکی را شامل نمیشود.
ایمیجهای داکر تا حدود زیادی به طرحهای اولیه یا قالبهای شیرینی شباهت دارند. ایمیجها قالب اصلی تغییرناپذیری هستند که برای تولید کانتینری که دقیقاً شبیه آن است استفاده میشود.
یک ایمیج شامل Dockerfile، کتابخانهها و کدی است که اپلیکیشن را اجرا میکند و همگی به صورت یک کلیت بستهبندی شده است.
Dockerfile
یک فایل داکر (Dockerfile) فایلی است که دستورالعملهایی برای شیوه ساخت داکر از ایمیج در آن قرار دارد. منظور از Dockerfile یک ایمیج پایه است که برای ساخت لایه ایمیج اولیه استفاده میشود. ایمیجهای محبوب رسمی مبنا شامل python، Ubuntu و alpine هستند. سپس لایههای اضافی میتوانند روی لایههای ایمیج مبنا بر اساس دستورالعملهای Dockerfile قرار گیرند. برای نمونه یک Dockerfile برای اپلیکیشن یادگیری ماشین میتواند به داکر اعلام کند که NumPy، Pandas و Scikit-learn را در لایههای میانی اضافه کند. در نهایت یک لایه نازک قابل نوشتن بر اساس کد Dockerfile روی لایههای دیگر قرار میگیرد. در مقالههای بعدی Dockerfile-ها را به تفصیل مورد بررسی قرار میدهیم.
کانتینر داکر
یک ایمیج داکر به علاوه دستور docker run image_name یک کانتینر را از روی یک ایمیج ایجاد و آغاز میکند.
رجیستری کانتینر
اگر میخواهید افراد دیگر بتوانند کانتینرهایی از روی ایمیج شما بسازند، میتوانید ایمیج را به یک رجیستری کانتینر ارسال کنید. برای نمونه Docker Hub (+) بزرگترین رجیستری و نوع پیشفرض آن است. در بخش بعدی همه مواردی که در این مقاله مطرح شدند را جمعبندی میکنیم.
کدنویسی با داکر
- دستور آشپزی همانند یک Dockerfile است. این دستور تعیین میکند که برای رسیدن به هدف باید چه کرد.
- مواد مورد نیاز لایهها هستند. برای پختن یک پیتزا به خمیر، سس و پنیر نیاز داریم.
دستور آشپزی و مواد مورد نیاز را میتوان به صورت یک کیت همهکاره ساخت پیتزا تصور کرد. این کیت، ایمیج داکر نام دارد. دستور آشپزی (Dockerfile) مراحل کار را مشخص میکند. طرح کار چنین است:
- خمیر مبنای اجرای کار و تغییرناپذیر است، مثلاً میتواند یک ایمیج مقدماتی اوبونتو باشد. این لایه تحتانی است و قبل از همه ایجاد میشود.
- سپس مقداری پنیر اضافه میشود. افزودن لایه دوم به پیتزا مانند نصب کتابخانه بیرونی برای مثال NumPy است.
- سپس مقداری سبزی معطر مانند ریحان اضافه میکنیم. ریحان مانند کدی در یک فایل است که برای اجرای اپلیکیشن خود مینویسید.
اینک نوبت به آشپزی میرسد.
- فری که پیتزا را در آن میپزیم مانند پلتفرم داکر است. ما فر را درون یک خانه نصب میکنیم تا وقتی وارد خانه میشویم، بتوانیم چیزهایی درون آن بپزیم. به طور مشابه، داکر را روی رایانه نصب میکنیم تا بتوانیم کانتینرهای خود را در آن بپزیم.
- فر را با چرخاندن یک دکمه روشن میکنیم. دستور docker run image_name مانند یک دکمه است که کانتینر را ایجاد و اجرا میکند.
- پیتزای پخته شده مانند یک کانتینر داکر است.
- خوردن پیتزا مانند استفاده از اپلیکیشن است.
ساخت یک اپلیکیشن در یک کانتینر داکر نیز مانند تهیه یک پیتزا به مقداری کار نیاز دارد؛ اما در نهایت چیزی عالی خلق میشود و میتوان از آن لذت برد.
سخن پایانی
در این نوشته به بررسی چارچوب مفهومی داکر پرداختیم. در بخش دوم این سری مقالات داکر برخی از اصطلاحهایی که در اکوسیستم داکر وجود دارند را مورد بررسی قرار میدهیم. امیدواریم این نوشته شما را در مسیر کسب درک بهتری از چشمانداز داکر کمک کرده باشد. همچنین امیدواریم در مورد اهمیت استعارهها در درک فناوریهای جدید معلومات خوبی کسب کرده باشید.
برای مطالعه بخش بعدی این مطلب روی لینک زیر کلیک کنید:
اگر این نوشته برای شما مفید بوده است، آموزشهای زیر به شما پیشنهاد میشوند:
- مجموعه آموزش های برنامه نویسی
- آموزش داکر (Docker) برای توسعه دهندگان
- مجموعه آموزش های مهندسی نرم افزار
- آموزش دسترسی از راه دور به ماشین های مجازی با VMware Workstation
- اکوسیستم داکر (Docker) — کامپوننت های رایج
- شبکه بندی و ارتباط ها در اکوسیستم داکر — راهنمای جامع
- داکر چیست ؟ | راهنمای شروع به کار با Docker — رایگان و به زبان ساده
==
وهله به معنای “نوبت،دفعه…” هست. مثلا در وهله اول. پس “مرگ وهله” معنا نداره. (Instant)
منظورتان احتمالا Instance بوده به معنای نمونه.
ممنون از مقالتون
سلام و وقت بخیر دوست عزیز؛
در مورد ایرادی که به کاربرد کلمه وهله داشتید، با شما موافق نیستم. بر اساس تعریف لغتنامه دهخدا «وهله» به معنای «دفعه» و «بار» آمده است. در معجم اللغات المعانی نیز کلمه «وهلة» به معنی «دفعه» و معادل «مرة» آمده است. از سوی دیگر بر اساس اطلاعات واژهنامه کمبریج کلمه Instance همریشه با کلمه Instant بوده و به معانی مختلفی از قبیل رخداد و به طور خاص یک نمونه خاص از چیزی که به طور مکرر رخ میدهد ذکر شده است. در دیکشنری وبستر 1913 این کلمه به معنی «فعل یا کیفیت لحظهای و اضطراری بودن» آمده است.
در طی دهههای اخیر در حوزه علوم رایانه این کلمه تداول زیادی یافته و عموماً با مفاهیم شیءگرایی و مفهوم کلاس گره خورده است. به طور خاص کلمه instance در این سپهر به معنای یک تجلی و حالتی عینی (objective) از یک کلاس (subjective) مورد استفاده قرار میگیرد. شما میتوانید یک کلاس به عنوان الگو یا نمونه داشته باشید و بارها و بارها از روی آن instance-های مختلف بسازید. حتی این کلمه به صورت فعلی (instantiation) نیز کاربرد یافته است. بنابراین میبینیم که کلمه instance هرگز به معنای نمونه یا مثال نیست، بلکه آن چیزی است که بارها از روی یک نمونه یا الگوی مثالی ساخته میشود. در واقع instance یک «رخداد» یا «دفعه» از چیز یا کاری است که امکان دارد به طور مکرر انجام یابد. از سوی دیگر با توجه به اتیمولوژی کلمه instance و قرابتی که با کلمه instant دارد، آن را بیربط با مفهوم زمان و لحظه نیز نمییابیم.
با در نظر گرفت همه این توضیحات احتمالاً موافق خواهید بود که هیچ کلمهای در میان واژگان زبان فارسی بیشتر از کلمه «وهله» قابلیت نمایندگی مفهوم کلمه instance در زبان انگلیسی را ندارد، چه از یک سو مفهوم «دفعه» و توالی رخداد یک موضوع خاص را نمایش میدهد و هم از سوی دیگر مفهوم آنی بودن را در بر گرفته و قرابت زمانی را به ذهن متبادر میسازد.
از توجه شما متشکرم.
منابع:
لغتنامه دهخدا
معجم المعانی
دیکشنری وبستر
دیکشنری کمبریج
ویکشنری
فوق ال عاده بود استعارتون