آموزش Docker برای سرور لینوکس

آموزش نصب Docker روی Debian؛ راهنمای کامل نصب، Compose و رفع خطاهای رایج

Docker روی Debian یکی از بهترین روش‌ها برای اجرای سرویس‌های مدرن روی سرور مجازی و اختصاصی است. این مقاله فقط چند دستور نصب نیست؛ مسیر امن نصب، خطاهای واقعی، مدیریت volume، فایروال، مصرف دیسک، Compose و نکات نگهداری را پوشش می‌دهد.

Docker به شما اجازه می‌دهد برنامه‌ها را در container اجرا کنید؛ یعنی هر سرویس وابستگی‌های خودش را دارد و با بقیه سرویس‌ها کمتر تداخل پیدا می‌کند. این موضوع برای اجرای Nginx، Redis، PostgreSQL، ابزارهای مانیتورینگ، اپلیکیشن‌های Laravel و Node.js بسیار مفید است، اما فقط وقتی حرفه‌ای است که داده‌ها، پورت‌ها، امنیت و بکاپ را هم درست طراحی کنید.

Docker چیست و چرا روی Debian محبوب است؟

Docker ابزار اجرای container است. کانتینر از نظر کاربر شبیه یک بسته آماده اجراست که برنامه و وابستگی‌های آن را همراه دارد، اما مثل ماشین مجازی یک سیستم‌عامل کامل جداگانه اجرا نمی‌کند. نتیجه این است که راه‌اندازی سرویس‌ها سریع‌تر، تمیزتر و قابل انتقال‌تر می‌شود.

روی Debian، Docker برای سرورهای سبک، پروژه‌های توسعه، سرویس‌های میکروسرویس، ابزارهای مانیتورینگ و حتی استک‌های تولیدی استفاده می‌شود. با این حال Docker جایگزین مدیریت سرور نیست. اگر لاگ‌ها را محدود نکنید، volumeها را نشناسید یا دیتابیس را بدون backup داخل container رها کنید، مشکل فقط شکل جدیدی پیدا می‌کند.

چک‌لیست قبل از نصب Docker

  • نسخه Debian و معماری سرور را بررسی کنید.
  • قبل از تغییر روی سرور تولید، snapshot یا backup بگیرید.
  • اگر قبلاً Docker یا Podman نصب بوده، بسته‌های متداخل را شناسایی کنید.
  • تصمیم بگیرید داده‌ها در volume ذخیره شوند یا bind mount.
  • پورت‌هایی که قرار است عمومی شوند را از قبل مشخص کنید.
  • روی سرور چندکاربره، دسترسی به گروه docker را عمومی نکنید.

نصب Docker Engine روی Debian

روش امن‌تر، نصب از مخزن رسمی Docker است. ابتدا بسته‌های متداخل حذف می‌شوند، کلید GPG اضافه می‌شود و سپس بسته‌های Docker Engine، CLI، containerd، Buildx و Compose نصب می‌شوند.

sudo apt-get update
sudo apt-get remove -y docker.io docker-doc docker-compose podman-docker containerd runc || true
sudo apt-get install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl status docker --no-pager
docker --version
docker compose version
sudo docker run hello-world

اجرای اولین سرویس با Docker Compose

Compose زمانی مفید است که چند سرویس مرتبط دارید یا می‌خواهید تنظیمات پروژه قابل تکرار باشد. نمونه زیر Nginx را روی پورت 8080 اجرا می‌کند.

mkdir -p ~/docker-test && cd ~/docker-test
cat > compose.yml <<'YAML'
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    restart: unless-stopped
YAML
docker compose up -d
docker compose ps
curl -I http://127.0.0.1:8080

خطاهای رایج نصب و اجرای Docker

مشکل علت احتمالی راه‌حل
Unable to locate package docker-ce مخزن درست اضافه نشده یا apt update خطا داده فایل docker.list و خروجی apt update را بررسی کنید.
permission denied کاربر به Docker daemon دسترسی ندارد از sudo استفاده کنید یا کاربر را با آگاهی عضو گروه docker کنید.
پورت از بیرون باز نیست publish پورت، firewall یا Security Group مشکل دارد docker ps، ss -tulpen و قوانین firewall را بررسی کنید.
No space left on device imageها، لاگ‌ها یا volumeها دیسک را پر کرده‌اند docker system df را ببینید و prune را با احتیاط اجرا کنید.
کانتینر بعد از ریبوت بالا نمی‌آید restart policy ندارد از restart: unless-stopped استفاده کنید.

امنیت و نگهداری Docker

  • دیتابیس و Redis را بدون محدودیت IP روی اینترنت منتشر نکنید.
  • برای هر سرویس volume مشخص و بکاپ‌پذیر تعریف کنید.
  • image ناشناس را روی سرور تولید اجرا نکنید.
  • لاگ‌ها را محدود کنید تا دیسک پر نشود.
  • دسترسی به گروه docker را مثل دسترسی مدیریتی بدانید.
  • قبل از آپدیت سرویس مهم، snapshot یا backup داشته باشید.
docker system df
docker ps -a
docker logs --tail=100 container_name
# پاک‌سازی محتاطانه cache و کانتینرهای استفاده نشده
docker system prune

سوالات متداول نصب Docker روی Debian

آیا Docker روی Debian برای سرور تولید مناسب است؟

بله؛ اگر از مخزن رسمی نصب شود، volume و backup درست باشد، پورت‌ها کنترل شوند و دسترسی کاربرها محدود بماند.

چرا بسته docker.io را حذف می‌کنیم؟

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

Docker Compose جدید با docker-compose قدیمی چه فرق دارد؟

در نسخه‌های جدید معمولاً Compose به‌صورت پلاگین با دستور docker compose اجرا می‌شود؛ نسخه docker-compose قدیمی جداگانه بود.

چرا بعد از نصب permission denied می‌بینم؟

کاربر شما به Docker daemon دسترسی ندارد. یا از sudo استفاده کنید یا با احتیاط کاربر را عضو گروه docker کنید.

آیا باز کردن پورت کانتینر یعنی سرویس از اینترنت در دسترس است؟

نه همیشه. باید publish پورت، فایروال سیستم، فایروال دیتاسنتر و گوش دادن سرویس داخل کانتینر را بررسی کنید.

جمع‌بندی: نصب Docker روی Debian ساده است، اما راه‌اندازی حرفه‌ای یعنی کنترل مخزن نصب، دسترسی کاربر، فایروال، volume، backup، لاگ و restart policy. اگر این موارد رعایت شوند، Docker ابزار قدرتمندی برای مدیریت سرویس‌ها روی VPS است.