- چگونه ایمیج Docker را به rootfs تبدیل کرده و روی MikroTik اجرا کنیم؟
- پیشنیازها و نکات مهم
- بخش 1 — ساخت rootfs کانتینر در اوبونتو (مثال با Docker)
- بخش 2 — انتقال فایل به میکروتیک
- بخش 3 — وارد کردن (Import) کانتینر در RouterOS
- بخش 4 — ایجاد و اجرای کانتینر
- بخش 5 — تخصیص IP و نت کردن پورت (Port Forward / NAT)
- بخش 6 — مثال عملی: نصب Nginx و نت کردن پورت
- بخش 7 — مشکلات رایج و راهحلها
- بخش 8 — امنیت و محدودسازی
- بخش 9 — چه زمانی بهتر است از میکروتیک برای کانتینر استفاده نکنیم؟
- بخش 10 — نکات عملی و توصیههای پایانی
- ارتباط با خدمات ما
- سؤالات متداول
چگونه ایمیج Docker را به rootfs تبدیل کرده و روی MikroTik اجرا کنیم؟
در این راهنمای عملی و تخصصی، گامبهگام روند دانلود یک ایمیج از Docker در اوبونتو، استخراج rootfs، انتقال آن به دستگاه RouterOS (MikroTik)، وارد کردن (import) به عنوان image، ساخت و اجرای کانتینر و در نهایت پیکربندی NAT/Firewall برای دسترسی سرویس از بیرون شبکه توضیح داده شده است.
پیشنیازها و نکات مهم
نکات فنی اولیه:
RouterOS باید نسخه 7.x یا بالاتر و بسته container روی دستگاه فعال باشد. برای بررسی نسخه از طریق CLI یا Winbox:
/system package printاطمینان از فضای کافی در بخش فایلها (storage) روی میکروتیک؛ در صورت نیاز از NAS یا NFS خارجی استفاده کنید.
بررسی معماری پردازنده دستگاه (مثل arm, arm64, mipsbe, x86_64):
/system resource printهمچنین دسترسی SSH/FTP یا Winbox برای آپلود فایلها لازم است.
بخش 1 — ساخت rootfs کانتینر در اوبونتو (مثال با Docker)
در سیستم اوبونتو از Docker برای دانلود ایمیج و استخراج فایلسیستم استفاده میکنیم. اگر نیاز به معماری خاص دارید از --platform استفاده کنید.
مثال: استخراج rootfs از ایمیج Alpine برای معماری arm/v7
sudo apt update
sudo apt install -y docker.iodocker pull --platform linux/arm/v7 alpine:latest
docker create --name tmp-alpine alpine:latest
docker export tmp-alpine > alpine-rootfs.tar
docker rm tmp-alpine
gzip alpine-rootfs.tar # optional -> alpine-rootfs.tar.gzتوضیح: docker export یک tar از فایلسیستم کانتینر میسازد که برای وارد کردن به RouterOS بهعنوان rootfs مناسب است. در صورت نیاز به لایههای OCI میتوانید از docker save استفاده کنید ولی بسیاری از روترها rootfs خام میخواهند.
بخش 2 — انتقال فایل به میکروتیک
روش 1 — SCP (خط فرمان)
scp -P 22 alpine-rootfs.tar.gz admin@MIKROTIK_IP:/روش 2 — Winbox / WebFig
فایل tar.gz را در پنجره Files در Winbox بکشید و رها کنید (drag & drop). مسیر آپلود در Files یا /file-store قابل مشاهده است.
بخش 3 — وارد کردن (Import) کانتینر در RouterOS
روش گرافیکی (Winbox/WebFig): به بخش Container بروید، تب Images را باز کنید و گزینه Import را بزنید. فایل tar.gz را انتخاب و نام مناسب وارد کنید (مثلاً alpine-armv7).
روش خط فرمان (RouterOS CLI):
/container image import file-name=alpine-rootfs.tar.gz name=alpine-armv7بخش 4 — ایجاد و اجرای کانتینر
پس از وارد کردن image، کانتینر بسازید و آن را اجرا کنید. مثالها هم برای Winbox و هم CLI بیان شدهاند.
نمونه CLI:
/container create image=alpine-armv7 name=my-alpine command="/bin/sh"
/container start my-alpineدر Winbox میتوانید از تب Console برای اتصال به شل کانتینر استفاده کنید یا با دستور attach به شل وارد شوید.
بخش 5 — تخصیص IP و نت کردن پورت (Port Forward / NAT)
دو روش متداول برای دسترسی به سرویس داخل کانتینر از بیرون وجود دارد: تخصیص IP اختصاصی به کانتینر و استفاده از NAT، یا انتشار پورت مستقیم اگر RouterOS پشتیبانی کند.
مثال NAT برای سرویس HTTP: فرض کنیم IP عمومی روتر 203.0.113.10 و IP کانتینر 172.18.0.2 است؛ میخواهیم پورت 8080 روی روتر به پورت 80 داخل کانتینر منتقل شود.
/ip firewall nat add chain=dstnat dst-address=203.0.113.10 protocol=tcp dst-port=8080 action=dst-nat to-addresses=172.18.0.2 to-ports=80 comment="NAT -> container nginx"برای UDP مشابه با protocol=udp و dst-port مناسب بسازید. همچنین از ip firewall filter برای محدود کردن دسترسی (مثلاً فقط IPهای مشخص) استفاده کنید تا امنیت افزایش یابد.
بخش 6 — مثال عملی: نصب Nginx و نت کردن پورت
مراحل خلاصه برای ساخت rootfs از nginx، وارد کردن به میکروتیک و اجرا:
docker pull --platform linux/arm/v7 nginx:stable
docker create --name tmp-nginx nginx:stable
docker export tmp-nginx > nginx-rootfs.tar
gzip nginx-rootfs.tarسپس فایل را آپلود و import کنید و یک کانتینر با فرمان اجرایی nginx بسازید:
/container create image=nginx-arm name=nginx1 command="/usr/sbin/nginx -g 'daemon off;'"
/container start nginx1در ادامه IP کانتینر را یافته و قاعده NAT مشابه مثال بخش قبل بسازید تا سرویس از اینترنت در دسترس قرار گیرد.
بخش 7 — مشکلات رایج و راهحلها
مشکل معماری: اگر RouterOS معماری ARM دارد و ایمیج شما x86_64 است، باید ایمیج را برای ARM بسازید یا از multi-arch استفاده کنید. روشهای ساخت multi-arch شامل استفاده از qemu-user-static و docker buildx است.
کمبود منابع: کانتینرها منابع دستگاه را مصرف میکنند؛ برای سرویسهای سنگین از سرورهای ابری یا سرورهای اختصاصی استفاده کنید.
فضای ذخیره کم: از FTP/NAS یا سرور ابری برای میزبانی فایلهای بزرگ استفاده نمایید.
بالا نیامدن سرویس: با Console داخل کانتینر لاگها را بررسی کنید و از init یا systemd مناسب تصویر اطمینان حاصل کنید.
بخش 8 — امنیت و محدودسازی
مزایای امنیتی و توصیهها:
استفاده از تصاویر رسمی و بهروز و اسکن قبل از وارد کردن.
محدودسازی منابع (CPU، memory) برای جلوگیری از DoS محلی.
استفاده از VPN یا TLS و احراز هویت دو مرحلهای برای سرویسهای حساس.
برای سرویسهای عمومی از CDN و Anti-DDoS استفاده شود.
بخش 9 — چه زمانی بهتر است از میکروتیک برای کانتینر استفاده نکنیم؟
برای برنامههای سنگین و latency-sensitive مانند مدلهای AI یا رندرینگ، از سرورهای GPU یا سرور ابری استفاده کنید.
در محیطهای production با ترافیک بالا بهتر است کانتینرها روی سرورهای ابری یا محیطهایی با orchestration مانند Kubernetes میزبانی شوند.
برای کاربردهای ترید با پینگ بسیار پایین از VPS مخصوص ترید با لوکیشن مناسب استفاده کنید.
بخش 10 — نکات عملی و توصیههای پایانی
همیشه ابتدا در محیط آزمایشی تست کنید قبل از انتقال به production.
اگر میخواهید کانتینرها را خودکار کنید از CI/CD مناسب استفاده کنید.
برای نیاز به GPU از سرویسهای گرافیکی Cloud استفاده کنید تا بار روی میکروتیک نیفتد.
ارتباط با خدمات ما
برای پروژههایی که نیاز به زیرساخت قدرتمند، VPS مخصوص ترید، سرور گرافیکی (GPU) یا حفاظت DDoS دارند، ما لوکیشنهای جهانی، شبکه BGP و خدمات امنیت ابری ارائه میدهیم. در صورت نیاز به مشاوره فنی برای انتخاب لوکیشن، تنظیمات شبکه و امنیت میتوانید با تیم پشتیبانی تماس بگیرید.








