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

مقدمه

در این قسمت چند تا دستور رو می‌بینیم که تو هیچ دسته‌ی خاصی نذاشتمشون. این دستورها به بررسی کانتینر، رجیستری داکر و انتقال تصویر به یک ماشین دیگه مربوط میشن. آخرشم یه کار باحال انجام میدیم!دونستن این موارد میتونه به سیس‌ ادمین‌ها و برنامه‌نویس‌هایی که با داکر کار دارن کمک کنه.

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


دیدن لاگ کانتینر

معمولا برنامه‌هایی که می‌نویسیم لاگ‌هایی تولید می‌کنن. اگر این لاگ‌ها در stdout یا stderr نوشته بشن میشه با دستور docker logs اون‌ها رو دید:

بعد از logs آیدی کانتینر رو نوشتم. اگر لاگ برنامه‌ی داخل کانتینر تو یه فایل نوشته بشه باید خود فایل رو خوند. مثلا با docker exec که تو این قسمت دیدیم بریم تو کانتینر و فایل رو ببینم یا با docker cp که در قسمت قبل داشتیم اون رو به سیستم خودمون کپی کنیم.


استفاده از inspect

با دستور docker inspect می‌تونیم هر اطلاعاتی که مربوط به کانتینر هست رو ببینیم:

بعد از inspect آیدی کانتینر رو نوشتم. فرمت خروجی به شکل json هست. خیلی هم طولانیه.


جابجایی تصویر داکر

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

جلوی save اسم تصویر میاد. به طور پیشفرض خروجی در stdout نوشته میشه. اما اینجا من redirect کردم به یه فایل. extension اون فایل رو tar. گذاشتم چون داکر خروجی رو به شکل آرشیو شده میده (البته می‌دونیم تو لینوکس extension مهم نیست و این کار برای خودمونه). با آپشن o- هم میشد این کارو کرد. کافیه اسم فایل رو جلوش بدید. خب حالا این فایل رو میشه به هر شکلی که دلمون میخواد بفرستیم به یه سیستم دیگه. مثلا با scp. من ادامه مراحل رو تو همون سیستم قبلی ادامه میدم ولی از اینجا به بعد باید تو سیستم مقصد اجرا شه. قبل از این کار تصویر رو حذف می‌کنم تا شبیه سیستم مقصد بشه:

دیگه اون تصویر رو ندارم. اما با docker load اون فایل رو لود می‌کنم:

با i- بهش گفتم از کدوم فایل بخونه. حالا دوباره تصویر رو دارم و این کار رو با load انجام دادم.


لاگین کردن در داکر رجیستری

اخیرا داکر یه محدودیتی در پول کردن تصاویر از رجیستری خودش گذاشته. برای من پیش اومده که اشتباها بهم میگه محدودیت رو رد کردم. احتمالا یکی دیگه با ip من این کارو کرده یا به هر دلیل داکر اشتباه کرده. برای نخوردن به این مشکل میشه یه حساب ساخت و در اون لاگین کرد تا ما رو با اسم بشناسه. وقتی لاگین کنیم دو برابر حالت قبل می‌تونیم پول کنیم. یه موقعی هم هست که رجیستری خصوصی داریم و برای استفاده ازش لازمه لاگین کنیم. برای لاگین از دستور (اگه گفتید؟!) login استفاده میشه (درست گفتید!):

اگه به جایی غیر از داکرهاب لاگین می‌کنید آدرسش رو بعد از login بنویسید. از شما نام کاربری و رمز عبورتون رو می‌پرسه و اگر درست باشه می‌نویسه Login Succeeded. چون من قبلا این کارو کرده بودم دیگه از من چیزی نخواست. از این به بعد شما کاربر شناخته شده‌ای برای این رجیستری هستید. اگر در داکرهاب حسابی ندارید برای ساخت حساب به سایت داکر برید.


یه کار باحال

خب حالا که تا اینجا اومدین بذارین یه چیز باحال ببینیم. برای دیدن تمام کانتینرها از docker ps -a استفاده می‌کردیم. با q- میشه کاری کرد که فقط آیدی کانتینرها رو نشون بده:

این به چه دردی می‌خوره؟ به این درد که همه کانتینرها رو با هم حذف کنیم:

از back tick استفاده کردم و خروجی دستور قبلی رو گذاشتم جلوی docker rm. این طوری تک تک اون‌ها رو پاک می‌کنه. وقتی تعداد زیادی کانتینر دارید که در حال اجرا نیستن با این کار همه‌شون پاک میشن.

به روز رسانی: یک نکته خوبی رو فرهاد در نظرات گفت و اون هم دستور prune هست. با prune میشه هر کانتینری که stop شده رو حذف کرد:

اول از شما می‌پرسه مطمئن هستید؟ بعد شما y رو وارد می‌کنید و اونم حذف می‌کنه. با تشکر از فرهاد.


جمع بندی

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

قسمت قبلی

قسمت بعدی