نصب Docker در سرورهای داخل ایران – راهنمای فنی و دقیق
هدف این راهنما: در این مقاله تمام مراحل لازم برای نصب و پیکربندی Docker روی سرورهای مستقر در ایران را قدمبهقدم توضیح میدهیم؛ از تنظیم DNS تا استفاده از میرورهای بومی برای افزایش سرعت Pull ایمیجها. تمام دستورات آمادهٔ کپی در ترمینال هستند تا در کمترین زمان بتوانید محیط Docker خود را راهاندازی کنید.
پیشنیازها
برای نصب و اجرای Docker روی سرور، به موارد زیر نیاز دارید:
- یک سرور Debian یا Ubuntu (ترجیحاً Ubuntu 20.04+ یا Debian 11+)
- دسترسی root یا کاربری با مجوز sudo
- باز بودن پورتهای خروجی 443 و 80 برای دریافت بستهها و ایمیجها
اگر هنوز سرور تهیه نکردهاید و بهدنبال یک سرور ابری سریع، بروز و مخصوص توسعهدهندگان هستید، پیشنهاد میکنیم از سرورهای ابری خاتش استفاده کنید — زیرساختی بهینه برای اجرای Docker و پروژههای مدرن با پینگ پایین و ترافیک نیمبها.
گام ۱ – تنظیم DNS سالم (شکن)
Docker برای دسترسی به ریجستریها به DNS سالم نیاز دارد. استفاده از DNS شکن پیشنهاد میشود:
sudo bash -c 'echo -e "nameserver 178.22.122.100\nnameserver 185.51.200.2" > /etc/resolv.conf'
نکته: در سیستمهایی که از
systemd-resolvedاستفاده میکنند، پس از ریبوت ممکن است فایل بازنویسی شود. برای دائمیکردن تنظیمات:codesudo chattr +i /etc/resolv.conf
گام ۲ – بهروزرسانی سیستم و نصب ابزارهای پایه
ابتدا مخازن را تازه کرده و ابزارهای پایه را نصب کنید:
sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install -y curl socat git
- curl: برای دانلود اسکریپت نصب Docker
- socat و git: ابزارهای کاربردی برای پروژههای مبتنی بر کانتینر
گام ۳ – نصب Docker از منبع رسمی
اسکریپت رسمی Docker سادهترین روش نصب را ارائه میدهد:
curl -fsSL https://get.docker.com | sh
پس از نصب، نسخه را بررسی کنید:
docker --version
# نمونه خروجی:
# Docker version 25.0.4, build deadbeef
گام ۴ – پیکربندی Registry Mirror داخلی
بهدلیل کندی یا محدودیت ارتباط با hub.docker.com، پیشنهاد میشود از میرورهای ایرانی استفاده کنید تا سرعت Pull ایمیجها افزایش یابد. برای این منظور، فایل پیکربندی زیر را باز کنید:
sudo nano /etc/docker/daemon.json
سپس یکی از گزینههای زیر را وارد کنید:
IranServer
{
"registry-mirrors": ["https://docker.iranserver.com"]
}
میرور IranServer از پایداری بالایی برخوردار است و برای کاربران دیتاسنتر آسیاتک و شاتل مناسب است.
HaioCloud
{
"registry-mirrors": ["https://docker.haiocloud.com"]
}
گزینهای سریع و کمتاخیر، مخصوص سرورهایی که در دیتاسنترهای داخلی نزدیک به HaioCloud میزبانی میشوند.
ParsPack
{
"registry-mirrors": ["https://registry.docker.ir"]
}
میرور قدیمی و قابلاعتماد پارسپک برای کاربران سرورهای داخلی.
ArvanCloud
{
"registry-mirrors": ["https://docker.arvancloud.ir"]
}
میرور رسمی آروانکلاد با شبکه CDN داخلی و سرعت پاسخگویی بالا.
DockerIran (لوکال ریجستری روی پورت ۵۰۰۰)
{
"registry-mirrors": ["https://docker.host:5000"]
}
اگر در زیرساخت خود ریجستری خصوصی دارید (مثلاً روی سرورهای ابر خاتش) میتوانید از این پیکربندی برای Mirror لوکال استفاده کنید.
اگر سرور شما روی زیرساخت داخلی مانند ابر خاتش (Khatash Cloud) اجرا میشود، معمولاً latency بسیار پایینتری به میرورهای داخلی دارد و نیازی به تنظیمات اضافی نخواهید داشت.
گام ۵ – فعالسازی و راهاندازی سرویس Docker
پس از اعمال تغییرات:
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl enable docker
گام ۶ – تست نهایی نصب
کاربر فعلی را به گروه docker اضافه کنید و خروج/ورود مجدد انجام دهید:
sudo usermod -aG docker $USER
سپس یک کانتینر تستی اجرا کنید:
docker run --rm hello-world
در صورت موفقیت، پیغام Hello from Docker! نمایش داده میشود.
نکات تکمیلی و عیبیابی
| مشکل | راهکار سریع |
|---|---|
| بازنشانی DNS پس از ریبوت | استفاده از chattr +i /etc/resolv.conf یا تنظیم در /etc/systemd/resolved.conf |
| خطای Permission هنگام اجرای Docker بدون sudo | افزودن کاربر به گروه docker |
| سرعت پایین Pull حتی با میرور | تغییر میرور یا بررسی latency با ping |
| غیرفعالسازی IPv6 | افزودن "ipv6": false در daemon.json |
جمعبندی
با رعایت این مراحل، Docker بهصورت پایدار و بدون مشکل روی سرورهای ایران نصب میشود. استفاده از DNS سالم و Registry Mirror داخلی، کلید اجرای سریعتر کانتینرهاست.
اگر به دنبال زیرساختی هستید که همهٔ این تنظیمات از پیش بهینهسازی شده و آمادهٔ اجرای Docker باشند، پیشنهاد میکنیم نگاهی به سرورهای ابری خاتش بیندازید — سرورهایی که مخصوص توسعهدهندگان ایرانی طراحی شدهاند تا بدون درگیری با تنظیمات پیچیده، محیط Docker را بلافاصله راهاندازی کنند.