آموزش سرور

نصب Docker و Docker Compose روی اوبونتو ۲۴.۰۴

تهیه: کلودیفای (نگارش با کمک هوش مصنوعی) · انتشار: · زمان مطالعه: ۴ دقیقه

DockerComposeآموزش سرورنصب Docker و DockerCompose روی اوبونتو۲۴.۰۴مجلهٔ کلودیفایclodify.net/blog
پاسخ کوتاه

روش توصیه‌شده برای نصب Docker روی Ubuntu 24.04 افزودن مخزن رسمی Docker و نصب بسته‌های docker-ce و docker-compose-plugin است؛ سپس با docker run hello-world تست کنید و با docker compose (بدون خط تیره) پروژه‌های چندکانتینری را اجرا کنید. روی سرور ایران ممکن است دسترسی به download.docker.com و Docker Hub محدود باشد؛ در این حالت از میرور داخلی یا build روی سرور خارج استفاده کنید.

پیش از شروع

  • سرور با Ubuntu 24.04 و دسترسی root یا sudo.
  • دست‌کم ۱ گیگ رم برای کانتینرهای سبک؛ برای چند سرویس هم‌زمان ۲ تا ۴ گیگ (انتخاب منابع).
  • اگر بسته‌های قدیمی (docker.io، podman-docker، containerd) نصب است، اول حذفشان کنید:
for p in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove -y $p; done

گام ۱: افزودن مخزن رسمی Docker

sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
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

echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] \
https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo $VERSION_CODENAME) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

گام ۲: نصب Docker Engine و Compose

sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker

گام ۳: تست

sudo docker run --rm hello-world
docker compose version

اگر پیام «Hello from Docker!» را دیدید، نصب درست است.

root@server: ~
$ docker --version$ docker compose version$ sudo docker run --rm hello-worldHello from Docker!$ 
شکل ۱ سه دستور برای اطمینان از نصب درست Docker Engine و Compose.

گام ۴: اجرای docker بدون sudo (اختیاری)

sudo usermod -aG docker $USER
newgrp docker

هشدار امنیتی: عضویت در گروه docker عملاً معادل دسترسی root است. فقط کاربران مورد اعتماد را اضافه کنید.

گام ۵: محدود کردن حجم لاگ کانتینرها

به‌طور پیش‌فرض لاگ کانتینرها بدون سقف رشد می‌کند و می‌تواند دیسک را پر کند. فایل /etc/docker/daemon.json را بسازید:

{
  "log-driver": "json-file",
  "log-opts": { "max-size": "20m", "max-file": "3" }
}
sudo systemctl restart docker

این تنظیم روی کانتینرهایی اعمال می‌شود که از این به بعد ساخته می‌شوند.

یک مثال کامل با Docker Compose

فایل compose.yaml:

services:
  web:
    image: nginx:stable
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html:ro
    restart: unless-stopped
mkdir -p html && echo "<h1>Hello</h1>" > html/index.html
docker compose up -d
docker compose ps
docker compose logs -f web

دستورهای پرکاربرد:

کار دستور
اجرای پروژه در پس‌زمینه docker compose up -d
توقف و حذف کانتینرها docker compose down
به‌روزرسانی ایمیج‌ها docker compose pull && docker compose up -d
دیدن لاگ‌ها docker compose logs -f
ورود به کانتینر docker compose exec web sh
مصرف منابع docker stats
پاک‌سازی ایمیج‌های بلااستفاده docker image prune -a
docker composeفایل compose.yaml سرویس‌ها را تعریف می‌کند
کانتینرهاهر سرویس در کانتینر جدا اجرا می‌شود
Docker Engineساخت و اجرای کانتینرها
اوبونتو ۲۴.۰۴سیستم‌عامل میزبان
شکل ۲ لایه‌های یک استقرار با Docker Compose.

نکتهٔ مهم: داکر و فایروال UFW

پورت‌هایی که با ports: منتشر می‌کنید، مستقیم در iptables باز می‌شوند و قوانین UFW را دور می‌زنند. اگر سرویسی (مثلاً دیتابیس) نباید از اینترنت در دسترس باشد:

  • آن را فقط روی localhost منتشر کنید: "127.0.0.1:5432:5432"
  • یا اصلاً پورت را منتشر نکنید و سرویس‌ها را از طریق شبکهٔ داخلی Compose به هم وصل کنید.

جزئیات فایروال: آموزش UFW.

نصب Docker روی سرور ایران

روی سرورهای داخل ایران ممکن است با خطای ۴۰۳ یا timeout در دسترسی به download.docker.com یا Docker Hub روبه‌رو شوید (به‌دلیل تحریم سمت سرویس‌دهنده یا اختلال بین‌الملل). راه‌ها:

  1. میرور داخلی برای apt و registry: تنظیم registry-mirrors در daemon.json؛ دستورهای کامل در رفع خطای ۴۰۳ داکر و apt در ایران.
  2. build روی سرور خارج و انتقال ایمیج: ایمیج را روی یک سرور خارج ساعتی بسازید و با docker save | ssh ... docker load منتقل کنید؛ سپس سرور خارج را حذف کنید.
  3. رجیستری خصوصی: اگر مرتب ایمیج منتقل می‌کنید، یک رجیستری خصوصی روی سرور قابل دسترس از هر دو طرف راه بیندازید.

سؤالات متداول

docker-compose با docker compose چه فرقی دارد؟

docker-compose (با خط تیره) نسخهٔ قدیمی و جداگانه بود. نسخهٔ فعلی پلاگین داخلی داکر است و با docker compose اجرا می‌شود.

بسته‌ی docker.io اوبونتو کافی نیست؟

کار می‌کند، اما معمولاً نسخهٔ قدیمی‌تری دارد. مخزن رسمی Docker نسخه‌های جدیدتر و Compose plugin را ارائه می‌دهد.

داکر چقدر رم مصرف می‌کند؟

خود سرویس داکر سبک است؛ مصرف اصلی مربوط به کانتینرهاست. با docker stats مصرف هر کانتینر را ببینید.

چطور کانتینرها بعد از ری‌استارت سرور خودکار اجرا شوند؟

restart: unless-stopped یا always را در compose قرار دهید و مطمئن شوید سرویس docker با systemctl enable فعال است.

دیسک سرور با داکر پر شد؛ چه کنم؟

با docker system df مصرف را ببینید و با docker system prune (با احتیاط) ایمیج‌ها و کانتینرهای بلااستفاده را پاک کنید. محدودیت لاگ گام ۵ را هم اعمال کنید.

آماده‌اید؟ سرورتان را بسازید.

از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی

سرورتان را همین حالا بسازید.

ساعتی بپردازید. هر وقت خواستید حذف کنید.