داکر برای برنامه‌نویس‌ها: قسمت سوم - دستورات ابتدایی در داکر


مقدمه

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

برای این قسمت باید داکر رو نصب کرده باشین و با مفهوم کانتینر، ایمیج و رجیستری داکر آشنایی داشته باشین.

شناخت بیشتر تصویر (image)

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

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

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

با این دستور pull موتور داکر میره تو رجیستری و دنبال تصویری به نام hello-world می‌گرده و دانلودش می‌کنه. بعد از اتمام موفقیت‌آمیز این دستور، تصویر در سیستم ما وجود داره. با دستور docker images می‌تونم تصویرهایی که در سیستم هستن رو ببینم:

در ستون اول اسم تصویر میاد. بعد تگ اون میاد. تگ خیلی مهمه برای تصویر. چون نسخه اون رو نشون میده. اگه موقع pull کردن هیچ تگی رو ندیم میره آخرین نسخه یا latest رو دانلود می‌کنه. برای این که نسخه بدیم به تصویر با دو نقطه معلومش می‌کنیم. مثلا ubuntu:20.04 نسخه 20.04 تصویر اوبونتو رو نشون میده. در ستون بعد یک id یکتا هست برای تصویر که می‌تونیم با اون هم صداش کنیم. بعد زمان ساخته شدن تصویر و در نهایت اندازه اون رو می‌بینیم.

حالا می‌تونیم از روش کانتینر بسازیم:

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

خب یه تصویر ساده رو اجرا کردیم و خروجیش رو دیدیم. تصاویر به درد بخور‌تری تو داکر رجیستری هست. مثلا تصویر ubuntu که وقتی اجرا شه گویا کانتینر ما داخل یه ماشین اوبونتو هست. تا دلتون بخواد تصاویر خوب و کاربردی در رجیستری داکر موجوده و تقریبا برای هر چیزی تصویر داریم. یه دسته از این تصاویر برای اجرای برنامه‌هایی که می‌نویسیم خیلی کاربردی هستن. مثلا تصویر python که توش پایتون هست و برای اجرای برنامه‌ی پایتون از اون استفاده میشه. از این دست تصاویر برای فریم‌ورک‌ها و زبان‌های مختلف ساخته شده و روی رجیستری داکر قرار دادن. با یه جستجو میشه برای هر برنامه‌ای تصویرش رو پیدا کرد.

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

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

کار با کانتینرها

تو بخش قبل دیدیم که با دستور run میشه یه تصویر رو (در صورتی که روی سیستم‌مون نیست) pull کنیم و بعد کانتینری رو از روش بسازیم. حالا بیاید تصویر alpine رو اجرا کنیم:

این تصویر یه لینوکس خیلی سبکه و کمک می‌کنه تصویری که از روش می‌سازیم هم خیلی سبک و کم حجم باشه. با دستور docker ps کانتینرهای در حال اجرا رو می‌بینیم:

هیچ کانتینری در حال اجرا نیست. اون کانتینری که ساختیم خیلی سریع از بین رفت چون کاری ندادیم بهش. با اضافه کردن a- می‌تونیم تمام کانتینرها رو ببینیم؛ حتی اگه در حال اجرا نباشن:

برای این که دستوری رو توی کانتینر اجرا کنیم این شکلی می‌نویسیم:

جلوی اسم تصویر اون دستور رو نوشتم و بهش گفتم ۱۰۰ ثانیه فقط منتظر بمونه. حالا میرم تو یه شل دیگه تا docker ps رو اجرا کنم:

این‌جا می‌بینم که کانتینر رو نشون میده. ستون اول یه id یکتا برای کانتینر هست. بعد تصویرش و بعد دستوری که زدیم. ستون بعدی زمانی که کانتینر ساخته شده رو میگه. ستون پنجم حالت کانتینر رو بیان می‌کنه که اینجا در حال اجراست. دقت کنید فاصله بین ساخت و در up شدن این کانتینر ۲ ثانیه بوده. این رو با یه ماشین مجازی مقایسه کنید! ستون ششم پورتی که از کانتینر expose کردیم رو میگه. فعلا این بحث رو انجام ندادیم ولی خیلی زود ایشالا بهش می‌رسیم. آخرین ستون هم یه اسم هست که خودش برای کانتیر انتخاب کرده. ما خودمون با name-- می‌تونیم این کار رو بکنیم.


جمع بندی

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


قسمت قبلی

قسمت بعدی