Docker Compose چند سرویس را با یک فایل YAML بهصورت یک پروژه بالا میآورد: وب، دیتابیس، کش و شبکهٔ مشترک. روی اوبونتو مسیر رسمی امروز نصب Compose plugin است تا فرمان مدرن docker compose (با فاصله) کار کند؛ باینری قدیمی docker-compose حالت Standalone/Legacy است و توصیهٔ اول مستند نیست.
آموزش نصب Docker Compose؛ اجرای چندسرویس با یک فایل YAML
پیشنیاز: Docker Engine و Docker CLI از قبل سالم باشند (docker version باید Client و Server را نشان دهد)، دسترسی sudo یا عضویت در گروه docker، و تمرکز این راهنما روی اوبونتو/دبیان با بستهٔ docker-compose-plugin. اگر Engine ندارید، اول همان را نصب کنید؛ Compose بهتنهایی موتور کانتینر نیست.
- Engine را سریع چک کنید: docker run --rm hello-world یا حداقل docker version.
- فهرست بسته را تازه کنید: sudo apt-get update.
- پلاگین رسمی را نصب کنید: sudo apt-get install docker-compose-plugin.
- نسخه را ببینید: docker compose version — باید خروجی پلاگین را بدهد.
- در یک پوشهٔ پروژه فایل compose.yaml یا docker-compose.yml بسازید و سرویسها را تعریف کنید.
- استک را بالا بیاورید: docker compose up -d و وضعیت را با docker compose ps ببینید.
تفاوت مهم روزمره: خیلی از آموزشهای قدیمی هنوز docker-compose با خط تیره مینویسند. اگر آن فرمان «یافت نشد» ولی پلاگین را نصب کردهاید، همان کار را با docker compose انجام دهید. برای بهروزرسانی پلاگین روی اوبونتو، دوباره apt-get update و نصب همان بسته کافی است؛ جزئیات در صفحهٔ Install the Docker Compose plugin آمده است.
اگر اینجا خطا گرفتید، خروجی دقیق docker compose version و docker version را در نظرات بگذارید.
فرمانهای روزمره و نکات شکست
- لاگ زنده: docker compose logs -f.
- توقف بدون حذف: docker compose stop؛ جمعکردن سرویسها: docker compose down.
- خطای permission → کاربر را به گروه docker اضافه کنید یا موقتاً با sudo تست کنید، بعد نشست را تازه کنید.
- اسکریپتهای قدیمی را عجولانه با باینری Legacy پر نکنید؛ اول alias یا بهروزرسانی فرمان به شکل پلاگین را بررسی کنید.
- قبل از تولید، نام پروژه و پورتهای منتشرشده را در README تیم بنویسید تا تداخل پورت پیش نیاید.
اولین استکی که با Compose میسازید معمولاً چیست—nginx+api یا دیتابیس+پنل؟ تجربهٔتان را بگویید.
Compose وقتی میدرخشد که بیش از یک کانتینر به هم وابستهاند. بهجای چند خط docker run با شبکهٔ دستی، یک فایل پروژه شبکه و volume را یکجا تعریف میکند. با این حال نصب Compose جای Docker Engine را نمیگیرد؛ اول موتور، بعد پلاگین، بعد YAML.
روی اوبونتو بستهٔ docker-compose-plugin از مخزن Docker همان چیزی است که صفحهٔ Install the Docker Compose plugin نشان میدهد. بعد از نصب، زیرفرمانها به باینری docker وصل میشوند؛ برای همین نوشتن docker compose با فاصله مهم است. اگر انگشتتان هنوز خط تیره مینویسد، یک alias موقت در شِل بگذارید تا اسکریپتهای کهنه نشکنند، ولی برای مستند جدید همان شکل پلاگین را ثبت کنید.
Standalone Legacy را مستند Docker صریحاً بهعنوان سناریوی توصیهنشده علامت زده است. فقط وقتی سراغش بروید که محیط هوایی یا ایمیج قدیمی مجبورتان کند. در غیر این صورت هزینهٔ دوبخشیشدن ابزار را به تیم تحمیل نکنید.
برای تمرین مهارت، یک nginx و یک سرویس دوم ساده را در یک فایل بالا بیاورید، پورت میزبان را آگاهانه انتخاب کنید و با ps و logs سلامت را ببینید. بعد down کنید تا یادتان بماند پاکسازی بخشی از همان مهارت است. نام پوشه معمولاً نام پروژه میشود؛ پوشههای با فاصله یا یونیکد عجیب برای خودکارسازی دردسر میسازند.
خطای رایج بعد از نصب تازه: کاربر جاری در گروه docker نیست و هر فرمان permission denied میدهد. افزودن به گروه تا ورود بعدی یا newgrp اثر کامل ندارد؛ یک بار logout/login کنید. در CI معمولاً با کاربر root یا سوکت داکر مدیریتشده کار میکنند و این پیام را نمیبینند.
مرجع را به دو لایه بچسبانید: صفحهٔ کلی Install Docker Compose برای انتخاب مسیر، و صفحهٔ لینوکس برای دستور apt/yum. وقتی Engine را از مخزن رسمی گذاشتهاید، پلاگین هم از همان اکوسیستم هماهنگتر نصب میشود تا مخلوط پکیجهای متفرقه.