معرفی
یک کانتینر لینوکس مجموعهای از فرآیندهاست که از بقیه سیستم جدا شده است. برای کاربر نهایی، یک کانتینر لینوکس شبیه یک ماشین مجازی عمل میکند، اما بسیار سبکتر است. در کانتینرها نیازی به اجرای یک هسته لینوکس اضافی ندارید و برای اجرا، نیاز به پشتیبانی سختافزاری مجازیسازی CPU نیست. بنابراین میتوانید روی یک سرور، تعداد بیشتری کانتینر نسبت به ماشینهای مجازی اجرا کنید.
فرض کنید یک سرور دارید که باید چندین وبسایت برای مشتریان اجرا کند. شما میتوانید هر وبسایت را به عنوان یک virtual host در همان اینستنس Apache یا Nginx اجرا کنید یا برای هر وبسایت یک ماشین مجازی جداگانه بسازید. کانتینرهای لینوکس جایگاهی بین virtual hostsها و ماشینهای مجازی دارند.
LXD به شما اجازه میدهد این کانتینرها را ایجاد و مدیریت کنید. LXD یک سرویس hypervisor برای مدیریت کل چرخه زندگی کانتینرها فراهم میکند. در این آموزش، شما LXD را پیکربندی و از آن برای اجرای Nginx در یک کانتینر استفاده میکنید. سپس ترافیک را از اینترنت به کانتینر منتقل میکنید تا یک صفحه وب نمونه قابل دسترسی گردد.
پیشنیازها
- یک سرور با سیستمعامل Ubuntu 18.04.
کار را آغاز کنید. آدرس آیپی عمومی سرور خود را یادداشت کنید؛ از این آدرس بعدا استفاده خواهیم کرد. - حداقل ۵ گیگابایت فضای block storage. برای راهاندازی آن در بخش تنظیمات، گزینه Manually Format & Mount را انتخاب نمایید.
نکته: LXD در Ubuntu 18.04 به صورت از پیش نصب شده (deb package) موجود است. از Ubuntu 20.04 به بعد، فقط به صورت snap package عرضه میشود.
بنابراین، Ubuntu 18.04 آخرین نسخهای است که LXD به صورت deb package ارائه میشود.
گام اول: افزودن کاربر به گروه lxd و نصب پیشنیازها
برای استفاده از LXD باید کاربر خود را به گروه lxd اضافه کنید:
sudo adduser $USER lxd
سپس لازم است تنظیمات جدید عضویت گروه را اعمال کنید:
newgrp lxd
برای اطمینان از عضویت کاربر در گروه lxd:
id
گام دوم: نصب ZFS و آمادهسازی Storage Backend
برای استفاده از بهترین performance در ParminCloud، پیشنهاد میشود از ZFS استفاده کنید:
sudo apt update
sudo apt install zfsutils-linux
نام Device مربوط به block storage خود را به کمک دستور زیر بدست آورید:
ls -l /dev/disk/by-id/
به عنوان مثال: /dev/disk/by-id/scsi-0DO_Volume_volume-fra1-0
آدرس کامل را یادداشت کنید.
گام سوم: راهاندازی اولیه LXD
sudo lxd init
در پاسخدهی به سوالات مطابق زیر عمل کنید:
- LXD clustering: no
- Storage backend: zfs
- Create a new ZFS pool: yes
- Name of the storage pool: zpool (یا مقدار پیشفرض)
- Disks to use: آدرس کامل Device
- Size in GB: اندازه مورد نظر
در بخش تنظیمات شبکه، bridge جدید را ایجاد کنید:
- Create new local bridge: yes
- Name: lxdbr0 (پیشفرض)
- Auto-select IPv4 subnet: ENTER
- IPv6: ENTER (در صورت نیاز)
- Manage LXD over the network: no
- Update images automatically: yes
- View YAML: اختیاری
گام چهارم: ساخت و راهاندازی کانتینر Nginx
برای نمایش لیست کانتینرها:
lxc list
ساخت کانتینر با نام webserver:
lxc launch ubuntu:18.04 webserver
پس از اتمام، با دستور زیر اطلاعات و IP را بررسی کنید:
lxc list --columns ns4
برای اختصاص IP استاتیک به کانتینر:
lxc config device override webserver eth0
سپس:
lxc config device set webserver eth0 ipv4.address کانتینر IP
ریاستارت کانتینر:
lxc restart webserver
وضعیت کانتینر را مجدد بررسی کنید:
lxc list --columns ns4
گام پنجم: نصب و پیکربندی Nginx داخل کانتینر
وارد کانتینر شوید:
lxc shell webserver
داخل کانتینر:
apt update
apt install nginx
فایل پیشفرض Nginx را ویرایش کنید:
nano /var/www/html/index.nginx-debian.html
دو عبارت زیر را به فایل اضافه نمایید:
- این سایت روی LXD container webserver میزبانی میشود.
- ParminCloud.
فایل را ذخیره و از کانتینر خارج شوید:
exit
تست صحت عملکرد Nginx با curl:
curl http://کانتینر IP
گام ششم: انتقال ترافیک اینترنت به کانتینر
قانون iptables را برای فورواد پورت 80 قرار دهید (PARMINCLOUD_IP و CONTAINER_IP را جایگزین کنید):
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -d PARMINCLOUD_IP -j DNAT --to-destination CONTAINER_IP:80
بررسی قوانین iptables:
iptables -t nat -L -n --line-numbers
تست دسترسی از بیرون:
curl -I http://PARMINCLOUD_IP
گام هفتم: ذخیره قوانین iptables
برای ذخیرهسازی دائمی قوانین:
sudo apt install iptables-persistent
در حین نصب، گزینه ذخیره قوانین فعلی را تایید کنید.
گام هشتم: حذف کانتینر و قوانین فایروال
- توقف کانتینر:
lxc stop webserver - حذف کانتینر:
lxc delete webserver - مشاهده شماره خط قانون مربوطه در iptables:
iptables -t nat -L PREROUTING --line-numbers - حذف قانون (شماره را جایگزین کنید):
iptables -t nat -D PREROUTING شماره_خط - ذخیره تنظیمات:
sudo netfilter-persistent save
جمعبندی
در این آموزش، LXD را روی Ubuntu 18.04 راهاندازی و کانتینری با Nginx ساختید که با iptables از طریق اینترنت قابل دسترسی است. این سناریو قابلیت توسعه برای میزبانی چندین سایت مجزا با استفاده از reverse proxy دارد.
برای اطلاعات بیشتر، مستندات رسمی LXD را اینجا مطالعه کنید.
از همراهی شما با پارمین کلود متشکریم.
نظرات کاربران