روش توصیهشده برای نصب 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!» را دیدید، نصب درست است.
$ docker --version$ docker compose version$ sudo docker run --rm hello-worldHello from Docker!$
گام ۴: اجرای 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 |
نکتهٔ مهم: داکر و فایروال UFW
پورتهایی که با ports: منتشر میکنید، مستقیم در iptables باز میشوند و قوانین UFW را دور میزنند. اگر سرویسی (مثلاً دیتابیس) نباید از اینترنت در دسترس باشد:
- آن را فقط روی localhost منتشر کنید:
"127.0.0.1:5432:5432" - یا اصلاً پورت را منتشر نکنید و سرویسها را از طریق شبکهٔ داخلی Compose به هم وصل کنید.
جزئیات فایروال: آموزش UFW.
نصب Docker روی سرور ایران
روی سرورهای داخل ایران ممکن است با خطای ۴۰۳ یا timeout در دسترسی به download.docker.com یا Docker Hub روبهرو شوید (بهدلیل تحریم سمت سرویسدهنده یا اختلال بینالملل). راهها:
- میرور داخلی برای apt و registry: تنظیم
registry-mirrorsدرdaemon.json؛ دستورهای کامل در رفع خطای ۴۰۳ داکر و apt در ایران. - build روی سرور خارج و انتقال ایمیج: ایمیج را روی یک سرور خارج ساعتی بسازید و با
docker save | ssh ... docker loadمنتقل کنید؛ سپس سرور خارج را حذف کنید. - رجیستری خصوصی: اگر مرتب ایمیج منتقل میکنید، یک رجیستری خصوصی روی سرور قابل دسترس از هر دو طرف راه بیندازید.
سؤالات متداول
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 (با احتیاط) ایمیجها و کانتینرهای بلااستفاده را پاک کنید. محدودیت لاگ گام ۵ را هم اعمال کنید.
از ۱٬۲۰۰ تومان در ساعت · پرداخت ریالی



