نصب Docker روی سرور اوبونتو
از مخزن رسمی تا Compose
Docker استقرار برنامه و وابستگیهایش را قابل تکرار میکند، اما نصب درست فقط اجرای یک اسکریپت نیست. در این راهنما Docker Engine و Docker Compose را از مخزن رسمی روی Ubuntu 24.04 نصب میکنیم، دسترسیها را آگاهانه تنظیم میکنیم و یک سرویس نمونه را با ملاحظات فایروال بالا میآوریم.
پیشنیازها و تصمیم درباره روش نصب
به یک Ubuntu 24.04 بهروز، کاربر دارای sudo و اتصال SSH پایدار نیاز دارید. ابتدا راهنمای تنظیمات اولیه سرور اوبونتو را انجام دهید. Docker را میتوان از بستهی Ubuntu یا مخزن خود Docker نصب کرد؛ این آموزش مسیر مخزن رسمی Docker را دنبال میکند تا Docker Engine، Buildx و Compose plugin از یک منبع هماهنگ نصب شوند.
اگر قبلاً Docker یا ابزار سازگار دیگری نصب کردهاید، از دادهها و فایلهای Compose خود نسخهی قابل بازیابی داشته باشید و وضعیت را با docker version و dpkg -l بررسی کنید. حذف بستهی قدیمی لزوماً دادههای داخل /var/lib/docker را حذف نمیکند، اما نباید بدون شناخت محیط production انجام شود.
بستههای متعارض را بررسی و پیشنیازها را نصب کنید
مستند رسمی پیشنهاد میکند بستههایی که ممکن است با نسخهی رسمی تداخل داشته باشند حذف شوند. روی سرور تازه، فرمان زیر معمولاً چیزی برای حذف پیدا نمیکند. روی سرور موجود، خروجی را پیش از تأیید بررسی کنید.
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do
sudo apt-get remove -y $pkg
done
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
کلید و مخزن رسمی Docker را اضافه کنید
کلید امضای بستهها را از دامنه رسمی Docker دریافت و سپس repository متناسب با معماری و codename اوبونتو را تعریف کنید. در HTML زیر علامتهای خاص escape شدهاند؛ فرمان نمایشدادهشده در مرورگر شکل معمول shell خواهد داشت.
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
. /etc/os-release
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $VERSION_CODENAME stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
اگر apt-get update خطای امضا یا codename داد، نصب را ادامه ندهید. آدرس فایل، ساعت سیستم، نسخهی Ubuntu و دسترسی شبکه را بررسی کنید و از جایگزینکردن کلید یا مخزن ناشناس خودداری کنید.
Docker Engine و Compose plugin را نصب و تست کنید
بستههای اصلی شامل daemon، خط فرمان، runtime، Buildx و Compose plugin هستند. بعد از نصب، سرویس باید فعال شود. کانتینر hello-world یک image کوچک دریافت میکند و نشان میدهد daemon، registry و اجرای کانتینر کار میکنند.
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl status docker --no-pager
sudo docker run --rm hello-world
sudo docker compose version
اگر دریافت image شکست خورد، DNS و ارتباط خروجی را بررسی کنید. اگر daemon بالا نیست، خروجی sudo journalctl -u docker -n 100 --no-pager معمولاً علت اولیه را نشان میدهد.
اجرای Docker بدون sudo؛ راحت اما پرقدرت
افزودن کاربر به گروه docker باعث میشود بدون sudo به socket daemon دسترسی داشته باشد. این گروه عملاً تواناییهای سطح root میدهد؛ فقط حسابهای مورد اعتماد را عضو کنید. پس از افزودن، از حساب خارج و دوباره وارد شوید یا گروه را در نشست تازه فعال کنید.
sudo usermod -aG docker $USER
newgrp docker
docker version
اگر نمیخواهید چنین دسترسیای بدهید، فرمانها را با sudo اجرا کنید یا پس از مطالعه مستندات رسمی، rootless mode را جداگانه راهاندازی کنید. socket داکر را بدون TLS و کنترل دسترسی روی TCP عمومی منتشر نکنید.
یک پروژه نمونه با Docker Compose بالا بیاورید
این نمونه Nginx را فقط برای آزمون روی پورت 8080 منتشر میکند. در پروژه واقعی، نسخه image را آگاهانه انتخاب کنید، secrets را داخل image یا repository قرار ندهید و برای دادههای ماندگار volume تعریف کنید.
mkdir -p ~/docker/nginx-demo
cd ~/docker/nginx-demo
cat > compose.yaml <<'EOF'
services:
web:
image: nginx:alpine
restart: unless-stopped
ports:
- "8080:80"
EOF
docker compose up -d
docker compose ps
curl http://127.0.0.1:8080
برای مشاهدهی لاگ از docker compose logs --tail=100 استفاده کنید. فرمان docker compose down کانتینر و شبکهی پروژه را جمع میکند؛ افزودن گزینهی -v volumeها را نیز حذف میکند و نباید بدون اطمینان از داده اجرا شود.
نکته مهم درباره پورتها، UFW و بهروزرسانی
Docker برای publish کردن پورتها ruleهای firewall خود را مدیریت میکند. مستند رسمی هشدار میدهد پورت منتشرشده ممکن است پیش از ruleهای UFW پردازش شود؛ بنابراین فرض نکنید فعالبودن UFW بهتنهایی تمام پورتهای Docker را میبندد. فقط پورت ضروری را publish کنید، در صورت امکان آن را به loopback یا reverse proxy محدود کنید و مستندات Docker درباره iptables/nftables را بخوانید.
# فقط روی خود سرور قابل دسترس
ports:
- "127.0.0.1:8080:80"
# بهروزرسانی آگاهانه پروژه
docker compose pull
docker compose up -d
docker image prune
پیش از pull، release note و سازگاری نسخه را بررسی کنید. برای imageهای حیاتی از tag یا digest کنترلشده استفاده کنید و فرایند rollback داشته باشید. لاگها و مصرف دیسک را پایش کنید؛ imageها، build cache و logهای بدون محدودیت میتوانند فضای سرور را پر کنند. اگر سرور مناسب هنوز تهیه نکردهاید، سرور مجازی Ubuntu مسیر مرتبط این راهنماست.
پرسشهای پرتکرار
تفاوت docker compose و docker-compose چیست؟
Compose plugin جدید با دستور docker compose اجرا میشود. docker-compose با خط تیره ابزار قدیمیتری است و این راهنما plugin رسمی را نصب میکند.
آیا باید کاربر را عضو گروه docker کنم؟
الزامی نیست. عضویت راحتتر است اما دسترسی سطح بالایی به daemon میدهد؛ میتوانید فرمانها را با sudo اجرا کنید.
چرا پورت کانتینر با وجود UFW قابل دسترس است؟
Docker ruleهای شبکه خود را ایجاد میکند و پورت publishشده ممکن است پیش از ruleهای UFW پردازش شود. انتشار پورت و زنجیرههای Docker را جداگانه مدیریت کنید.
دادههای کانتینر بعد از حذف باقی میمانند؟
فقط اگر در volume یا bind mount مناسب ذخیره شده باشند. filesystem قابلنوشتن خود کانتینر ماندگاری قابل اتکایی ندارد.
چطور Docker را بهروزرسانی کنم؟
فهرست بستهها را تازه و بستههای Docker را از همان مخزن رسمی ارتقا دهید؛ پیش از ارتقای محیط production، release note و امکان rollback را بررسی کنید.
منابع رسمی و مطالعه بیشتر
محیط Docker را روی Ubuntu خودت بساز
یک سرور با منابع متناسب انتخاب کنید و نصب را از مخزن رسمی انجام دهید.