داکر به برنامهها و وابستگیهایشان اجازه میدهد تا بهصورت مستمر بر روی کامپیوتر شما اجرا شوند، با بستهبندی آنها در کانتینرهایی که محیطهای قابل حمل و ایزوله هستند. این راهحل ایدهآل است اگر به دنبال جریانهای کاری قابل اطمینان و تکرارپذیر باشید، بدون اینکه نگران این باشید که آیا ابزار یا سیستمی بر روی دستگاه شما کار میکند یا خیر.
Docker به برنامهها و وابستگیهای آنها امکان میدهد بهصورت ثابت بر روی رایانه شما اجرا شوند، با بستهبندی آنها در کانتینرهایی که محیطهای قابل حمل و ایزوله هستند. این راهحل ایدهآل است اگر بهدنبال جریانهای کاری قابل اعتماد و قابل تکرار باشید بدون نگرانی از اینکه آیا ابزار یا سیستمی بر روی دستگاه شما کار میکند یا نه.
اما استفاده مؤثر از Docker فراتر از نصب و اجرای کانتینرها است. زمانی که دستورات ارائهشده برای مشاهده، کنترل و کارآمدی را میدانید بهترین استفاده را از Docker میگیرید. تسلط بر دستورات صحیح Docker را به ابزاری تبدیل میکند که میتوانید با اطمینان هر روز از آن استفاده کنید. بنابراین، من مهمترین دستورات را که باید برای یک مدیر Docker ماهر باشید شناسایی کردم.
Docker Compose
اجرای محیطهای چند سرویس با اطمینان
قبل از اینکه از دستور Compose استفاده کنم، کانتینرها را یکییکی اجرا میکردم و تنها میتوانستم امیدوار باشم که بهدرستی به هم متصل شوند. این روش دستی بود و اغلب به یک جریان کاری پرخطا منجر میشد. با این حال، استفاده از این دستور Compose، Docker را به یک جریان کاری خودکار، یکدست تبدیل کرد که در آن سرویسها، ایمیجها، پورتها، متغیرهای محیطی و حجمها در یک فایل docker-compose.yml تعریف میشوند.
دستور زیر به من امکان میدهد تمام پشته را در پسزمینه راهاندازی کنم:
docker compose up -d
پس از آزمایش، همه چیز را با دستور زیر متوقف کردم:
docker compose down
با این جفت ساده از دستورات، کنترل بهتری بر Docker خواهید داشت.
Docker exec -it <container> bash
عیبیابی کانتینرها از داخل

دانستن نحوه عیبیابی کانتینرهای Docker ضروری است و فرمان زیر انتخاب من است. من از آن زمانی استفاده میکنم که نیاز به بازرسی مسیرهای فایل، تأیید تنظیمات، اجرای تستهای سریع یا رفع اشکال مشکلات دقیقاً درجایی که رخ میدهند داشته باشم:
docker exec -it myapp bash
اگر bash در دسترس نباشد، میتوانم به این فرمان سوئیچ کنم:
docker exec -it myapp sh
استفاده از هریک از این دستورات یک پوسته تعاملی باز میکند و به من امکان میدهد محیط واقعی کانتینر را بررسی کنم. این دستورات برای بررسی وابستگیهای گمشده، تأیید متغیرهای محیطی و بازرسی لاگها مستقیماً از داخل برنامه مفید بودهاند. ورود به کانتینرها عیبیابی را کمتر دردسرساز و منطقیتر میکند.
Docker logs -f <container>
خواندن لاگهای زنده و پایان دادن به حدس و گمان

لاگها روشی مفید برای فاش کردن مشکلات زیرسطحی ارائه میدهند و این فرمان Docker در این زمینه مفید است:
docker logs -f myapp
با این دستور، زمانی که یک کانتینر راهاندازی نمیشود به لاگها دسترسی دارم. پرچم -f را اضافه میکنم تا لاگ به صورت زنده جریان داشته باشد. این کار به من امکان میدهد توالی راهاندازی کانتینر را مشاهده کنم و بهراحتی مشکلای مانند عدم وجود اعتبارنامه پایگاهداده، اشتباهات در متغیرهای محیطی یا پورتهای بهدرستپیکربندیشده را تشخیص دهم.
گاهی لاگها طولانی میشوند و پیدا کردن موارد خاص یا رفع اشکال دشوار میشود. بنابراین نتایج لاگ را به ۵۰ خط آخر محدود میکنم:
docker logs --tail 50 myapp
زمانی که درک کردم لاگها گفتگوی مستقیم با کانتینرهاست و نه نویز، Docker برایم قابلقابلیت بیشتری یافت.
Docker build
ساخت ایمیجهای پیشبینیپذیر با برچسبگذاری مناسب

دستور build به دیمان Docker میگوید فرآیند ایجاد ایمیج را آغاز کند. وقتی شروع به استفاده از Docker کردم، ساختهایم نامرتب بودند. هیچ برچسبی نذاشتم و بهسرعت با چندین ایمیج بدون نام مواجه شدم. دستور زیر ساختهای نامرتب و بدون برچسب من را اصلاح کرد:
docker build -t myapp .
اضافه کردن پرچم -t به ایمیج برچسب میدهد و استفاده و استقرار آن را سادهتر میکند. برای پیشرفت بیشتر، نسخهبندی را با دستور زیر اضافه میکنم:
docker build -t myapp:v1 .
با این کار میتوانم ویژگیها را تست کنم بدون از دست دادن ساختهای پایدار. یک مزیت دیگر برچسبگذاری جلوگیری از شلوغی است، زیرا ایمیجهای «پلاکخورده» که فضای مضاعفی اشغال میکنند حذف میشوند.
من برچسبگذاری را در کار با CI ضروری میدانم چون به خط لوله من یک مرجع ایمیج پیشبینیپذیر میدهد. یک برچسب تمیز شما را به نسخهای که میتوانید به آن اعتماد کنید، میرساند.
Docker ps -a
از دست دادن ردیابی کانتینرها را متوقف کنید

بعد از مدتی استفاده از Docker، ردیابی کانتینرهایم از دست رفت که ابزار را غیرقابل پیشبینی کرد. برخی پورتها متوقف شدند و Docker گاهی از ساخت کانتینرها امتناع میکرد چون چندین کانتینری که فکر میکردم حذف کردهام هنوز وجود داشتند. سپس این دستور Docker را کشف کردم که کانتینرهای خروجی، شکستخورده یا بلافاصله متوقفشده را نمایش میدهد:
docker ps -a
میتوانم از دستور زیر برای اسکریپتنویسی یا پاکسازی سریع استفاده کنم، زیرا فقط شناسههای کانتینرها را برمیگرداند:
docker ps -q
برای حذف یک کانتینر فراموششده، از این فرمان استفاده میکنم:
docker rm
همچنان بر این باورم که یکی از مهارتهای کمتر ارزیابیشده Docker، دانستن اینکه چه چیزی وجود دارد و چه چیزی ممکن است بهصورت خاموشی ناکام بماند، است.
Docker inspect <container>
مشاهده تمام جزئیات یک کانتینر بهصورت خام

دستور docker inspect وقتی Docker مشکلات اتصال یا رفتار غیرمنتظره نشان میدهد، روشنایی میبخشد. شکل پایهای این دستور در زیر آمده است:
docker inspect myapp
این فرمان تمام جزئیات را همانگونه که Docker میبیند، از جمله متغیرهای محیطی، تنظیمات شبکه، حجمها و نقطه ورودیها نشان میدهد. میتوانم از دستور زیر برای استخراج آدرس IP یک کانتینر خاص استفاده کنم وقتی که کنجکاو به یک عنصر خاص هستم:
docker inspect --format='{{.NetworkSettings.IPAddress}}' myapp
با اجرای این دستورات متمرکز، میتوانم از غوطهوری در تعداد خستهکنندهای از صفحات JSON برای رفع پیکربندیهای نادرست جلوگیری کنم.
Docker system prune
پاکسازی منابع استفادهنشده Docker بهصورت ایمن

به محض اینکه شروع به استفاده از Docker میکنید، بهصورت بیصدا شلوغیهایی مانند ایمیجهای قدیمی، شبکههای استفادهنشده و کانتینرهای متوقفشده جمع میشود. در طول زمان، این موضوع اگر پاک نشود، همه چیز را کند میکند. من روتین پاکسازیام را با نسخهٔ ایمن آغاز میکنم:
docker system prune
این فرمان ایمیجهای من را نگه میدارد اما کانتینرها و شبکههای استفادهنشده را حذف میکند. میتوانم پاکسازی عمیقتری انجام دهم و ایمیجها را نیز با اجرای فرمان زیر حذف کنم:
docker system prune -a
در نهایت، اگر نیاز به پاکسازی حجمهای استفادهنشده دارم که ممکن است گیگابایتها دادههای فراموششده داشته باشند، این فرمان را اجرا میکنم:
docker system prune -a --volumes
اجرای فرمان فوق حجمهای استفادهنشده را پاک میکند، اما برخی ممکن است متعلق به root یا کاربر دیگری باشند. درک مالکیت و مجوزهای لینوکس میتواند این فرآیند را ایمنتر کند.
مدیریت آسانتر Docker برای جریانهای کاری شما
اگر Docker را ترسناک میبیند، این دستورات ابزارهای مناسب برای شفافیت، کنترل و کارآیی هستند.
چندین ابزار، مانند نمونه خود میزبانی Nextcloud من، برای اجرا به Docker نیاز دارند. استفاده روزانه از این دستورات حافظهٔ عضلانی میسازد و به من کمک میکند تا در بازرسی، اشکالزدایی و نگهداری کانتینرها و مدیریت این خدمات بهصورت یکپارچه، متخصص شوم.