چرا نیاز به انتقال پیدا میکنیم؟
اگر فقط برای یک مدت کوتاه شروع کنیم به کار کردن با داکر، سیستممون پر میشه از ایمیجهایی که کمکم دیگه بدردمون نمیخورند و فقط فضا رو اشغال میکنند. از طرفی، بخاطر بحث تحریمها و دانلود کردن (pull) ایمیجها که بسختی هم بعضن صورت میگیره، آدم حیفش میاد که اینهمه ایمیج بیزبون رو پاک کند. پس باید یکجورایی منتقلشون کنیم به یک هارد اکسترنال تا بعدن اگر نیاز شد، خیلی راحت دوباره از این ایمیجها استفاده کنیم.
یا سناریوی دیگهای رو در نظر بگیرید. فرض کنید در محل کار، شما روی سیستمتون داکر ایمیجی که 1.5 گیگ حجم داره رو دانلود کردین. شرایطی پیش میاد که همکارتون به این ایمیج نیاز پیدا میکند. دیگه ایشون نباید یکبار دیگه بروند و دانلود رو انجام بدهند. خیلی راحت میشه ایمیج دانلود شده رو از سیستم اول به دومی منتقل کرد. اما چطور؟
انتقال چگونه صورت میگیرد؟
ترمینال رو باز میکنیم و ابتدا یک
docker image ls
میگیریم. لیستی از ایمیجهایی که در سیستم داریم رو میبینیم. حالا فرض کنیم که ما میخواهیم ایمیج postgres با تگ 15رو به سیستم همکارمون یا آرشیو ایمیجهای خودمون در هارد اکسترنال منتقل کنیم. مینویسیم
docker save -o postgres_15.tar postgres:15
خب کد بالا چیکار میکنه؟ ما با اجرای این کد، در محلی که کامند اونجا اجرا میشه، فایل postgres_15.tar رو بصورت خروجی خواهیم دید و این فایل چیزی نیست جز ایمیج postgres با تگ 15. در اینجا o- از output– میاد، یعنی جز بعدی چیزی هست که داخلش داریم خروجیمون رو مینویسیم.
چطوری ایمیج رو ببریم روی یک سیستم دیگر و ازش استفاده کنیم؟
اگر بخواهیم این فایل خروجی رو آرشیو کنیم، خیلی ساده فقط به مقصد منتقلش میکنیم، مثلن مقصد میتونه یک هارد اکسترنال باشد. اگر بخواهیم بدیمش به همکارمون تا در سیستمش استفاده کنه، ایشون، بعنوان مثال، این فایل رو روی دستاپ خودشون کپی میکنند. بعد ترمینال رو در مسیر دستاپ باز میکنند و خیلی راحت، در حالتی که داکر دستاپ در حالت اجرا باشد، کد زیر رو اجرا میکنند:
docker load -i postgres_15.tar
چند ثانیه بعد این تصویر به داکر سیستم اضافه میشه و بدون اینکه بخواهیم کلی وقت بابت دانلود کردنش بزاریم، دسترسی پیدا میکنیم به این ایمیج. دقت کنید که در اینجا، i- از input– میاد، یعنی بعد از این فلگ، ما فایل ورودی رو داریم که بصورت فایل tar. هست.
پاک کردن ایمیجها و خالی کردن حافظه
در داکر دستاپ (ویندوزی) باگی وجود داره که ما وقتی ایمیجها رو با هر فلگ (flag) یا شیوهای پاک میکنیم، باز هم فضایی که قبلن توسط این ایمیجها اشغال شدند، آزاد نخواهند شد. اما چاره چیه؟ مثل شکل زیر، وارد قسمت عیبیابی (troubleshoot) بشین و روی قسمت مشخص شده در تصویر کلیک کنید و تمام گزینههایی که بشما نشون میده رو انتخاب نمائید. در پایان روی purge data با خیال راحت کلیک کنید. الان اون فضای اشغال شده، بطور کامل برای شما آزاد خواهد شد و حالش رو خواهید برد 😎