کانتینر لینوکسی چیست؟
یک کانتینر لینوکسی مجموعهای از فرآیندها است که از بقیه سیستم جدا شدهاند. برای کاربر نهایی، کانتینر لینوکسی همانند یک ماشین مجازی عمل میکند، اما به مراتب سبکتر است. شما نیاز به اجرای یک هسته لینوکس جداگانه ندارید و کانتینرها به هیچ پشتیبانی سختافزاری خاصی برای مجازیسازی پردازنده نیاز ندارند. این بدان معناست که میتوانید بر روی یک سرور، تعداد بیشتری کانتینر نسبت به ماشین مجازی اجرا کنید.
تصور کنید که یک سرور دارید که باید چندین وب سایت را برای مشتریان خود میزبانی کند. یک راه این است که هر سایت را به عنوان یک virtual host یا server block بر روی همان instance از وب سرور Apache یا Nginx اجرا کنید. یا اینکه برای هر سایت، یک ماشین مجازی جدا ایجاد کنید. کانتینرهای لینوکسی بین این دو قرار میگیرند.
LXD چیست؟
LXD به شما امکان میدهد این کانتینرها را ایجاد و مدیریت کنید. LXD یک سرویس hypervisor برای مدیریت چرخه عمر کانتینرها فراهم میکند. در این آموزش، شما LXD را پیکربندی و از آن برای اجرای Nginx در یک کانتینر استفاده خواهید کرد و سپس ترافیک را از اینترنت به سمت کانتینر هدایت میکنید تا یک صفحه وب نمونه قابل دسترس شود.
پیشنیازها
- یک سرور با اوبونتو 20.04. برای راهاندازی سرور (plan) میتوانید از ParminCloud استفاده کنید.
- حداقل ۵ گیگابایت فضای بلاک استوریج. باید آن را به صورت دستی فرمت و mount کنید تا LXD بتواند آن را آمادهسازی کند.
نکته:
از اوبونتو 20.04 به بعد، LXD به صورت بسته snap رسمی موجود است. بسته snap قابلیت نصب روی هر توزیعی که از snapd پشتیبانی کند را دارد. پیشنهاد میشود سرور با حداقل ۲ گیگابایت رم برای اجرای بسته snap انتخاب شود.
آمادهسازی محیط سرور
ابتدا باید کاربر sudo خود را به گروه lxd اضافه کنید:
sudo adduser $USER lxd
سپس برای اعمال عضویت جدید، باید یک بار از سیستم خارج و دوباره وارد شوید:
newgrp lxd
برای تأیید عضویت کاربر در گروه lxd از دستور زیر استفاده کنید:
groups
پیکربندی استوریج بکاند برای LXD
پیشنهاد میشود از فایل سیستم ZFS به عنوان استوریج بکاند LXD استفاده کنید. ابتدا لیست بستههای خود را بهروزرسانی و سپس پکیج کمکی zfsutils-linux را نصب نمایید:
sudo apt update sudo apt install zfsutils-linux
برای شناسایی نام دستگاه بلاک استوریج خود، از دستور زیر استفاده کنید:
ls -l /dev/disk/by-id/
مسیر کامل دستگاه خود مانند زیر خواهد بود:
/dev/disk/by-id/scsi-0DO_Volume_volume-fra1-0
(عیناً به جای “DO” عبارت مربوط به ParminCloud قرار میگیرد.)
تأیید نصب LXD
LXD به صورت snap در اوبونتو 20.04 بهصورت پیشفرض نصب شده است. برای اطمینان از نصب بودن آن:
snap list lxd
برای مشاهده نسخه و اطلاعات بیشتر:
snap info lxd
اجرای اسکریپت lxd init
برای راهاندازی LXD، دستور زیر را اجرا کنید:
sudo lxd init
- پیشنهاد میشود برای این آموزش، clustering را فعال نکنید (پاسخ no)
- در بخش storage pool، گزینههای زیر را انتخاب کنید:
- storage backend: zfs
- نام pool: پیشفرض (یا دلخواه)
- نیاز به ایجاد pool جدید: بله
- نام دستگاه: مسیر دستگاه بلاک استوریج یادداشتشده را وارد کنید
پیکربندی شبکه برای کانتینرها
- اتصال به MAAS لازم نیست (پاسخ no)
- برای ایجاد شبکه bridge محلی، گزینه yes را انتخاب کنید
- نام پیشفرض lxdbr0 را تأیید کنید
در پایان مراحل، سایر تنظیمات را بر اساس نیاز (مانند بهروزرسانی خودکار تصاویر، نگهداری فایل YAML، مدیریت از شبکه) انتخاب کنید.
ایجاد اولین کانتینر LXD و اجرای Nginx
اکنون آماده هستید اولین کانتینر خود را بسازید. ابتدا لیست کانتینرها را مشاهده کنید (در ابتدا خالی است):
lxc list
برای ساخت و اجرای یک کانتینر اوبونتو 18.04 به نام webserver:
lxc launch ubuntu:18.04 webserver
پس از اتمام دانلود و راهاندازی، برای مشاهده اطلاعات کانتینر:
lxc list --columns ns4
حال باید به کانتینر یک IP استاتیک اختصاص دهید. ابتدا تنظیم device eth0 را override کنید:
lxc config device override webserver eth0 lxc config device set webserver eth0 ipv4.address [your_webserver_container_ip] lxc restart webserver
برای ورود به شل کانتینر:
lxc shell webserver
در شل کانتینر، ابتدا پکیجها را بهروزرسانی و Nginx را نصب کنید:
apt update apt install nginx
حال فایل صفحه پیشفرض Nginx را ویرایش کنید تا متن دلخواه خود برای شناسایی کانتینر اضافه شود:
nano /var/www/html/index.nginx-debian.html
عبارت «on LXD container webserver» را به فایل اضافه کرده و ذخیره کنید.
پس از خروج از کانتینر (exit)، از روی سرور اصلی وضعیت صفحه را تست کنید:
curl http://[your_webserver_container_ip]
اگر متن ویرایششده را دیدید، کانتینر و وب سرور به درستی کار میکنند.
هدایت ترافیک خارجی به کانتینر با iptables
برای دسترسی جهانی، ترافیک پورت 80 سرور را به IP داخلی کانتینر هدایت کنید. کافیست به صورت زیر عمل کنید (متغیرها را طبق IP عمومی سرور و IP کانتینر خود جایگزین نمایید):
iptables -t nat -A PREROUTING -i [IFACE] -p tcp --dport 80 -d [PUBLIC_IP] -j DNAT --to-destination [CONTAINER_IP]:80
در صورت نیاز، میتوانید این قانون را با اجرای دستور زیر دائمی کنید:
sudo apt install iptables-persistent
با پذیرش درخواست ذخیره قوانین هنگام نصب، پس از ریبوت قوانین باقی خواهند ماند.
حذف کانتینر و قوانین فایروال
برای توقف کانتینر:
lxc stop webserver
و برای حذف:
lxc delete webserver
برای حذف قانون فایروال:
iptables -t nat -L --line-numbers iptables -t nat -D PREROUTING [LINE_NUMBER]
و سپس ذخیره تغییرات:
netfilter-persistent save
جمعبندی
شما در این آموزش موفق به نصب و پیکربندی LXD بر روی یک سرور با اوبونتو 20.04 شدید، یک کانتینر برای میزبانی Nginx ساختید و با کمک iptables امکان دسترسی عمومی به آن را فراهم نمودید.
برای اطلاعات و آموزشهای بیشتر درباره LXD میتوانید به مستندات رسمی آن مراجعه کنید.
از همراهی شما با پارمین کلود متشکریم.
نظرات کاربران