این دوره به مفاهیم، نصب، پیکربندی، و مدیریت کانتینرهای لینوکسی با استفاده از LXC (Linux Containers) و LXD (Linux Container Daemon) میپردازد. شما با ابزارهای LXC و LXD آشنا شده و نحوه استفاده از آنها برای مدیریت برنامهها و سیستمهای لینوکسی در محیطهای ایزوله را یاد خواهید گرفت.
بخش 1. مقدمه به کانتینرها و LXC/LXD
فصل 1. تاریخچه و تحول فناوری کانتینر
-
منشأ کانتینرها: از chroot تا کانتینرهای مدرن
-
بررسی پروژههای اولیه مانند OpenVZ و Solaris Zones
-
تحول کانتینرها در دنیای لینوکس
فصل 2. نقش کانتینرها در توسعه نرمافزار و DevOps
-
معرفی مفاهیم CI/CD و نقش کانتینرها در خودکارسازی
-
مزایای کانتینرها در برابر ماشینهای مجازی برای توسعهدهندگان
-
استفاده در محیطهای staging، تست، و production
فصل 3. تفاوت میان کانتینرها و ماشینهای مجازی (VM)
-
معماری کانتینر vs VM (با نمودار)
-
مقایسه مصرف منابع (RAM، CPU، Storage)
-
مزایا و معایب هر یک در سناریوهای مختلف (Dev، Ops، Production)
فصل 4. معرفی LXC و LXD
-
تعریف LXC (Linux Containers)
-
تعریف LXD بهعنوان لایه مدیریتی پیشرفته برای LXC
-
معرفی اجزای اصلی LXC (Container runtime، Templates، CLI)
-
معماری LXD (Daemon، REST API، Storage، Network، Profiles)
-
تفاوت LXC و LXD از منظر طراحی و کاربرد
فصل 5. مقایسه LXC/LXD با Docker و Kubernetes
-
تفاوت رویکرد در اجرای کانتینرها (System Container vs Application Container)
-
موارد استفاده برای هر ابزار در پروژههای واقعی
-
بررسی اجمالی عملکرد LXD بهعنوان جایگزینی برای Docker در برخی سناریوها
-
قابلیتهای Kubernetes در مدیریت کلاسترهای کانتینری در مقابل LXD Clustering
فصل 6. موقعیت LXC/LXD در اکوسیستم کانتینری لینوکس
-
پشتیبانی توسط شرکت Canonical و جامعه متنباز
-
استفاده در سیستمهای مبتنی بر cloud و edge
-
بررسی موارد کاربردی مانند:
-
اجرای سیستمهای کامل لینوکس در یک کانتینر (System Containers)
-
استفاده در سرویسدهی چندگانه (Multi-Tenant Hosting)
-
جایگزینی سبکوزن برای VM در محیطهای CI/CD و تست
-
بخش 2. نصب و پیکربندی LXC و LXD
فصل 1. بررسی پیشنیازهای سیستم برای نصب LXC و LXD
-
بررسی نسخه کرنل لینوکس و فعال بودن قابلیتهای cgroups و namespaces
-
چک کردن ویژگیهای مورد نیاز با استفاده از
lxc-checkconfig
فصل 2. نصب LXC و LXD در توزیعهای مختلف لینوکس
-
نصب LXC و LXD در Ubuntu با استفاده از snap و apt
-
نصب در Debian و CentOS
-
بررسی تفاوت نسخههای LXD (snap vs apt)
فصل 3. بررسی وضعیت سرویسها پس از نصب
-
فعالسازی و بررسی وضعیت daemonهای LXC و LXD
-
تست اجرای اولیه دستورات پایه
فصل 4. راهاندازی اولیه LXD با دستور lxd init
-
پیکربندی Storage (ZFS، dir، btrfs، LVM)
-
پیکربندی Network (bridge داخلی، اتصال به LAN)
-
ایجاد اولین پروفایل پیشفرض
فصل 5. مسیر فایلهای پیکربندی و ساختار دایرکتوریها
-
ساختار فایلها در مسیر
/etc/lxd,/var/snap/lxd,/var/lib/lxc -
بررسی فایل پیکربندی پیشفرض پروفایلها، شبکه و storage
فصل 6. نصب ابزارهای خط فرمان LXD (lxc CLI)
-
نصب و تست
lxcدر سیستم کاربر -
بررسی نسخه LXC و LXD با
lxc version
فصل 7. پیکربندی تنظیمات پایهای و دستورات کلیدی اولیه
-
لیست کانتینرها، ایجاد نمونه اولیه، حذف و توقف
-
تست اتصال به دیمون LXD
-
پیکربندی کامل
lxd initبا مثال کامل عملی (همراه با تنظیم دستی)
فصل 8. مدیریت دسترسی و اضافه کردن کاربران به گروه lxd
-
افزودن کاربر به گروه
lxdبرای استفاده از دستورات بدون sudo -
بررسی دسترسیها با
id $USER
فصل 9. پیکربندی LXD از طریق فایل YAML (تنظیمات غیرتعاملی)
-
ایجاد فایل کانفیگ YAML برای نصب غیرتعاملی
-
استفاده از آن در اسکریپتهای اتوماسیون
فصل 10. بررسی نسخه LXC Legacy و LXD Modern
-
تفاوتهای ساختاری بین LXC standalone و LXD-managed
-
انتخاب بین حالت Classic یا Daemonized
بخش 3. مفاهیم اولیه LXC
فصل 1. معرفی اولیه LXC
-
تعریف LXC و جایگاه آن در لینوکس.
-
معماری LXC (نقش cgroups و namespaces).
-
تفاوت LXC با Docker و ماشینهای مجازی.
فصل 2. بررسی ساختار فایلها و مسیرهای مهم LXC
-
مسیر پیشفرض کانتینرها:
/var/lib/lxc/ -
فایل پیکربندی کانتینرها:
/var/lib/lxc/<container-name>/config -
لاگهای مربوط به هر کانتینر:
/var/log/lxc/<container-name>.log
فصل 3. ایجاد کانتینر با lxc-create
-
بررسی گزینههای
--template،--nameو--config. -
معرفی Templateهای موجود (ubuntu, busybox, centos و…).
-
مثال عملی از ساخت کانتینر با توزیع دلخواه.
فصل 4. مدیریت کانتینرها
-
لیستکردن کانتینرها با
lxc-ls. -
بررسی وضعیت کانتینر با
lxc-info. -
اجرای کانتینر با
lxc-start. -
توقف و حذف کانتینرها با
lxc-stopوlxc-destroy. -
ریستارت کانتینر با
lxc-restart.
فصل 5. دسترسی به کنسول و ترمینال کانتینر
-
استفاده از دستور
lxc-console. -
اتصال به محیط کانتینر با
lxc-attach.
فصل 6. مدیریت منابع کانتینر
-
اعمال محدودیت CPU با ویرایش فایل config:
-
lxc.cgroup.cpu.shares
-
-
محدود کردن حافظه RAM:
-
lxc.cgroup.memory.limit_in_bytes
-
-
محدود کردن I/O:
-
lxc.cgroup.blkio.weight
-
فصل 7. تنظیمات شبکه ابتدایی
-
اتصال کانتینر به bridge پیشفرض (مثلاً lxcbr0).
-
تنظیم دستی آیپی برای کانتینرها.
-
ایجاد فایل پیکربندی شبکه اختصاصی.
فصل 8. بررسی ساختار Templateها و شخصیسازی آنها
-
نحوه ایجاد Template سفارشی.
-
استفاده از اسکریپتهای init هنگام ساخت کانتینر.
فصل 9. بررسی خطاهای رایج و نحوه دیباگ
-
مشاهده لاگ کانتینر با
lxc-start -l DEBUG -o logfile. -
بررسی مشکلات نامگذاری، template، و permission.
بخش 4. مدیریت کانتینرها با LXD
فصل 1. ایجاد کانتینرها با LXD
-
تفاوت بین
lxc initوlxc launch -
ایجاد کانتینر جدید با تنظیمات پیشفرض
-
تعیین ایمیج دلخواه هنگام ایجاد کانتینر
-
اختصاص نام سفارشی و شبکه خاص به کانتینر
-
استفاده از کانتینرهای مبتنی بر Cloud-init
فصل 2. مدیریت چرخه عمر کانتینرها
-
شروع کانتینر با
lxc start -
توقف کانتینر با
lxc stop(Soft/Hard Stop) -
راهاندازی مجدد کانتینر با
lxc restart -
حذف کانتینر با
lxc delete -
بررسی وضعیت فعلی کانتینرها با
lxc listوlxc info
فصل 3. اتصال و تعامل با کانتینرها
-
ورود به محیط شل کانتینر با
lxc exec <container> -- bash -
اجرای دستورات بدون ورود به کانتینر (
lxc execبا دستورات کوتاه) -
استفاده از
lxc shell(در نسخههای جدید LXD)
فصل 4. مدیریت فایلها در کانتینر
-
کپی فایل بین میزبان و کانتینر با
lxc file pushوlxc file pull -
بررسی و ویرایش فایلهای داخل کانتینر از طریق CLI
-
تنظیمات دسترسی و مجوز فایلها هنگام کپی
فصل 5. مدیریت Snapshotها و نسخهپشتیبان
-
ایجاد Snapshot با
lxc snapshot <container> <snapshot-name> -
لیست Snapshotها با
lxc info <container> -
بازگردانی Snapshot با
lxc restore <container> <snapshot-name> -
حذف Snapshotها با
lxc delete <container>/<snapshot-name>
فصل 6. انتقال و همگامسازی کانتینرها
-
کپی کانتینر از یک سرور LXD به دیگری با
lxc copy -
استفاده از
--mode pullیا--mode pushبرای بهینهسازی انتقال -
انتقال کامل همراه با Snapshotها
-
تنظیم اتصال به سرور Remote با
lxc remote add
فصل 7. تغییر نام، جابهجایی و تنظیم مجدد کانتینر
-
تغییر نام کانتینر با
lxc move -
انتقال کانتینر بین Storage Poolها
-
تغییر پروفایل کانتینر فعال یا غیرفعال
فصل 8. مدیریت منابع کانتینر در زمان اجرا
-
تغییر مقدار CPU و RAM با
lxc config set -
بررسی استفاده از منابع با
lxc infoوlxc top -
اعمال محدودیتها بدون نیاز به خاموش کردن کانتینر
فصل 9. نظارت و گزارشگیری کانتینرها
-
استفاده از
lxc monitorبرای رویدادهای لحظهای -
لاگگیری کانتینرها با
lxc info --show-log -
بررسی رویدادهای مربوط به شبکه و دیسک
chroot تا ظهور کانتینرهای پیشرفتهای مثل Docker بررسی میکند.
بخش اول: معرفی chroot – نخستین گام در ایزولهسازی
chroot (تغییر ریشه) یکی از اولین ابزارهای لینوکسی برای محدود کردن دسترسی یک برنامه یا پردازش به یک مسیر مشخص از فایل سیستم بود. این ابزار مسیر ریشه سیستم فایل (root) را برای یک فرآیند خاص تغییر میدهد، طوری که آن فرآیند تصور میکند که مسیر جدید، کل سیستم فایل است.
دستور اجرای chroot
# فرض کنیم مسیر ایزوله ما /var/myroot است
# ابتدا باید ساختار فایل پایه را در آن قرار دهیم
mkdir -p /var/myroot/{bin,lib,lib64,usr}
cp /bin/bash /var/myroot/bin/
# کپی کردن کتابخانههای موردنیاز bash (برای جلوگیری از خطا هنگام اجرای bash)
ldd /bin/bash
# خروجی ldd را بررسی و کتابخانهها را در مسیرهای مناسب کپی کنید
cp /lib/x86_64-linux-gnu/{libtinfo.so.6,libdl.so.2,libc.so.6} /var/myroot/lib/
cp /lib64/ld-linux-x86-64.so.2 /var/myroot/lib64/
# حالا وارد محیط chroot شوید
chroot /var/myroot /bin/bash
مسیر فایلهای پیکربندی:
- مسیر مقصد فایل ایزوله:
/var/myroot/ - فایل اجرایی:
/bin/bash(در مسیر جدید کپی میشود)
نکته مهم:
chrootفقط سیستم فایل را ایزوله میکند و از نظر هستهای (kernel)، فرآیند همچنان میتواند سایر PIDها را ببیند.- به همین دلیل از نظر امنیتی یک روش ناقص به شمار میرود.
بخش دوم: FreeBSD Jail – گام پیشرفتهتر در ایزولهسازی
در سال 2000، سیستمعامل FreeBSD مکانیزم Jail را معرفی کرد که نسبت به chroot بسیار قدرتمندتر بود.
Jailها علاوهبر ایزولهسازی فایل سیستم، قابلیت کنترل شبکه، کاربران و حتی فرایندها را هم داشتند.
نمونهای از ایجاد یک Jail:
# فایل کانفیگ اصلی jail:
# مسیر: /etc/jail.conf
jail1 {
path = "/usr/jails/jail1";
host.hostname = "jail1.local";
ip4.addr = 192.168.0.10;
interface = "em0";
exec.start = "/bin/sh /etc/rc";
exec.stop = "/bin/sh /etc/rc.shutdown";
persist;
}
مسیر فایل پیکربندی:
/etc/jail.conf
راهاندازی jail:
service jail start jail1
بخش سوم: Linux Namespaces – آغاز کانتینرهای واقعی
Linux Namespaces در نسخههای جدیدتر کرنل لینوکس، امکان ایزولهسازی منابع مختلف را فراهم کرد:
- Mount namespace (ایزولهسازی سیستم فایل)
- PID namespace (ایزولهسازی فرآیندها)
- UTS namespace (ایزولهسازی نامها)
- NET namespace (ایزولهسازی شبکه)
- IPC namespace (ایزولهسازی بینپردازشی)
- USER namespace (ایزولهسازی کاربران)
ساخت namespace با unshare:
unshare --mount --uts --ipc --net --pid --fork bash
توضیح:
دستور بالا یک شل جدید با ایزولهسازی منابع ذکرشده اجرا میکند. هنوز باید سیستم فایل، شبکه و بقیه اجزاء را دستی راهاندازی کنیم.
بخش چهارم: cgroups – محدودسازی منابع
همزمان با معرفی Namespaces، قابلیتی بهنام cgroups نیز معرفی شد که اجازه محدودسازی و کنترل منابع (CPU، RAM، دیسک، شبکه و…) را فراهم میکرد.
ساخت یک گروه cgroup برای محدود کردن حافظه:
# مسیر پایه برای cgroups:
cd /sys/fs/cgroup/memory/
mkdir mylimit
echo 500M > mylimit/memory.limit_in_bytes
echo <PID> > mylimit/tasks
مسیر فایل پیکربندی:
/sys/fs/cgroup/memory/mylimit/
بخش پنجم: LXC – اولین پیادهسازی قابلاستفاده کانتینر
با ترکیب Namespaces و cgroups، پروژه LXC (Linux Containers) معرفی شد که امکان اجرای کانتینرهای واقعی و کامل را فراهم کرد. برخلاف Docker، LXC بیشتر شبیه اجرای سیستمعاملهای کامل در محیط ایزوله بود.
نصب و ایجاد کانتینر LXC:
apt update
apt install lxc -y
# ایجاد یک کانتینر جدید:
lxc-create -n mycontainer -t ubuntu
# اجرای کانتینر
lxc-start -n mycontainer -d
# ورود به محیط کانتینر
lxc-attach -n mycontainer
مسیر فایلهای پیکربندی:
- فایل کانتینرها معمولاً در
/var/lib/lxc/mycontainer/قرار دارند.
بخش ششم: Docker – نقطه عطف کانتینرسازی مدرن
در سال 2013، پروژه Docker با هدف سادهسازی استفاده از کانتینرها معرفی شد. Docker توانست با رابط ساده، مدیریت ایمیج، قابلیت اتصال به رجیستری، و پشتیبانی از معماریهای مدرن CI/CD، انقلابی در دنیای DevOps ایجاد کند.
اجرای ساده یک کانتینر در Docker:
# نصب Docker:
apt update
apt install docker.io -y
# اجرای یک کانتینر ساده
docker run -it ubuntu /bin/bash
مسیر فایلها:
- ایمیجها و کانتینرها در مسیر
/var/lib/docker/ذخیره میشوند.
جمعبندی
مفهوم کانتینرها از یک ایده ساده به نام chroot شروع شد که فقط ایزولهسازی فایل سیستم را انجام میداد. سپس FreeBSD Jail امکانات بیشتری مانند ایزولهسازی شبکه و پردازشها را معرفی کرد. با ظهور Linux Namespaces و cgroups، زمینه برای اجرای کامل محیطهای ایزوله فراهم شد. نهایتاً پروژههایی مانند LXC و Docker این فناوریها را تجمیع کرده و در اختیار توسعهدهندگان و مدیران سیستم قرار دادند.
امروزه، کانتینرها بهعنوان یک استاندارد در زیرساختهای مدرن مورد استفاده قرار میگیرند و پایهگذار ساختارهایی مانند Kubernetes شدهاند.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”بررسی پروژههای اولیه مانند OpenVZ و Solaris Zones” subtitle=”توضیحات کامل”]در بازه زمانی پیش از فراگیر شدن Docker و Kubernetes، پروژههای مهمی در زمینه مجازیسازی سطح سیستمعامل معرفی شدند که مسیر توسعه کانتینرهای مدرن را هموار کردند. در این بخش بهصورت دقیق و عملی به بررسی دو پروژه مهم OpenVZ و Solaris Zones پرداخته میشود که هرکدام در دوران خود تحولی در ایزولهسازی فرایندها و منابع بودند.
بخش اول: OpenVZ – کانتینرهای کرنل لینوکس برای سرورها
OpenVZ یکی از قدیمیترین پروژههای مبتنی بر Linux Kernel برای ایجاد محیطهای ایزولهشده با منابع مشخص (مانند RAM، CPU، دیسک و شبکه) است. برخلاف Hypervisorهای سنتی که ماشین مجازی ایجاد میکنند، OpenVZ کانتینرهایی سبکتر به نام VE (Virtual Environment) یا CT (Container) ایجاد میکرد که با هسته مشترک اجرا میشدند.
ویژگیهای کلیدی OpenVZ
- ایزولهسازی پردازشها، شبکه، فایل سیستم و منابع
- اجرای چندین محیط شبیه به سیستمعامل مستقل روی یک کرنل
- مصرف منابع پایینتر نسبت به مجازیسازهای کلاسیک
- امکان snapshot، clone و migration کانتینرها
نصب OpenVZ روی Debian/Ubuntu (در نسخههای قدیمیتر)
# اضافه کردن مخزن OpenVZ
echo "deb http://download.openvz.org/debian wheezy main" > /etc/apt/sources.list.d/openvz.list
wget -qO - http://download.openvz.org/debian/archive.key | apt-key add -
apt update
apt install linux-image-openvz-amd64 vzctl vzquota ploop -y
مسیر فایلهای پیکربندی OpenVZ
- تنظیمات هر کانتینر:
/etc/vz/conf/CTID.conf - قالب کانتینرها (template):
/vz/template/cache/ - محل ذخیرهسازی فایلهای کانتینرها:
/vz/private/CTID/
ایجاد یک کانتینر ساده در OpenVZ
# بارگیری قالب سیستمعامل (مثلاً Ubuntu)
wget http://download.openvz.org/template/precreated/ubuntu-12.04-x86_64.tar.gz -P /vz/template/cache/
# ایجاد کانتینر
vzctl create 101 --ostemplate ubuntu-12.04-x86_64
# پیکربندی شبکه
vzctl set 101 --ipadd 192.168.0.101 --save
vzctl set 101 --hostname ubuntu-ve --save
# محدودسازی منابع
vzctl set 101 --ram 512M --swap 512M --save
# اجرای کانتینر
vzctl start 101
# ورود به کانتینر
vzctl enter 101
بخش دوم: Solaris Zones – ایزولهسازی سطح کرنل در سیستمعامل سولاریس
Solaris Zones، که گاهی به آنها Containers نیز گفته میشود، نوعی مجازیسازی سطح سیستمعامل در سولاریس است که با استفاده از ویژگیهای پیشرفته کرنل Solaris امکان اجرای چند محیط ایزولهشده را بدون نیاز به ماشین مجازی فراهم میکند.
ویژگیهای کلیدی Solaris Zones
- قابلیت اجرای چندین Zone روی یک کرنل Solaris
- استفاده از ساختار ZFS برای snapshots و clone سریع
- پشتیبانی از Resource Control برای محدودسازی مصرف منابع
- قابلیت تعریف Global Zone (مدیر کل سیستم) و Non-Global Zones (محیطهای ایزولهشده)
ایجاد یک Zone در Solaris
# ساخت Zone جدید
zonecfg -z myzone
# پیکربندی اولیه
create
set zonepath=/zones/myzone
set autoboot=true
add net
set physical=net0
set address=192.168.0.201/24
end
exit
نصب و راهاندازی Zone
# نصب فایلهای لازم داخل Zone
zoneadm -z myzone install
# راهاندازی Zone
zoneadm -z myzone boot
# ورود به Zone
zlogin myzone
مسیر فایلهای پیکربندی Zones
- فایلهای Zone:
/zones/myzone/ - پیکربندی Zone:
/etc/zones/myzone.xml
تفاوتهای کلیدی بین OpenVZ و Solaris Zones
| ویژگی | OpenVZ | Solaris Zones |
|---|---|---|
| سیستمعامل میزبان | Linux | Solaris |
| نوع ایزولهسازی | سطح کرنل (Kernel-level Containers) | سطح کرنل (Zones) |
| snapshot و clone | پشتیبانی با ploop یا LVM | پشتیبانی از طریق ZFS |
| امنیت | وابسته به کرنل لینوکس | امنیت بالاتر به دلیل معماری سولاریس |
| منابع سیستم | سبک و کارآمد | نیاز به منابع بیشتر |
جمعبندی
پروژههای اولیهای مثل OpenVZ در دنیای لینوکس و Solaris Zones در دنیای یونیکس نقش کلیدی در تکامل کانتینرها ایفا کردند. این پروژهها نشان دادند که میتوان بدون ایجاد ماشینهای مجازی کامل، محیطهایی مستقل، ایزوله و قابل مدیریت را روی یک هسته مشترک پیادهسازی کرد. این تجربیات زیربنای کانتینرهای مدرن مثل LXC، Docker و Kubernetes شدند و هنوز هم بسیاری از اصولشان در طراحی کانتینرها کاربرد دارد.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تحول کانتینرها در دنیای لینوکس” subtitle=”توضیحات کامل”]کانتینرها در لینوکس نتیجه نیاز به ایزولهسازی فرآیندها، منابع و فایل سیستم در محیطهای چندکاربره و چندوظیفهای بودند. ابتدا ویژگیهایی در کرنل لینوکس توسعه یافتند که بهمرور امکان ساخت کانتینرهایی انعطافپذیر و سبک را فراهم کردند. این مسیر با توسعه ابزارهای کرنل آغاز شد و با ترکیب آنها، زیرساختی برای ابزارهای سطح بالاتری مانند Docker شکل گرفت.
namespaces: جداسازی منابع در سطح هسته
کرنل لینوکس مفهوم namespace را برای ایزولهسازی اجزای مختلف سیستم معرفی کرد:
pid: ایزولهسازی فضای فرآیندها (هر کانتینر PID خودش را دارد)net: شبکه جداگانه (interface و route مجزا)mnt: mount point مجزا برای مدیریت فایل سیستمuts: نام سیستم (hostname) مجزاipc: صف پیام، semaphore و shared memory مجزاuser: امکان استفاده از شناسههای کاربری متفاوت در فضای کانتینر
مثال برای ایجاد namespace ساده:
unshare --pid --mount --uts --ipc --net --fork bash
cgroups: محدودسازی و تخصیص منابع
Linux Control Groups یا cgroups برای کنترل منابع در سطح فرآیندها به کار میروند. با استفاده از cgroups میتوان میزان RAM، CPU، دیسک یا پهنای باندی که هر گروه از فرآیندها استفاده میکند را محدود کرد.
مثال: ساخت یک cgroup ساده برای محدود کردن RAM:
mkdir /sys/fs/cgroup/memory/my_container
echo 256M > /sys/fs/cgroup/memory/my_container/memory.limit_in_bytes
echo $$ > /sys/fs/cgroup/memory/my_container/cgroup.procs
union filesystems: فایلسیستم لایهای
برای ساخت کانتینرهایی با حجم کم و قابلیت snapshot و تغییرات بدون ایجاد نسخه کامل، فایلسیستمهای Union مانند AUFS، OverlayFS و later Overlay2 معرفی شدند. اینها امکان ایجاد لایه base image و تغییرات فقط روی لایههای بالاتر را فراهم میکنند.
مثال mount با overlayfs:
mkdir /lower /upper /work /merged
mount -t overlay overlay -o lowerdir=/lower,upperdir=/upper,workdir=/work /merged
ابزارهای اولیه مانند LXC
با فراهم شدن امکانات بالا در کرنل لینوکس، ابزارهایی مثل LXC (Linux Containers) ساخته شدند که رابطی برای استفاده همزمان از namespaces و cgroups ارائه میدادند. LXC اولین گام جدی به سمت ایجاد کانتینرهای واقعی در لینوکس بود.
نمونهای از ایجاد کانتینر با LXC:
apt install lxc -y
lxc-create -n my-container -t ubuntu
lxc-start -n my-container
lxc-attach -n my-container
مسیر فایلهای مرتبط با LXC
- تنظیمات کانتینر:
/var/lib/lxc/<container-name>/config - rootfs کانتینر:
/var/lib/lxc/<container-name>/rootfs - لاگها:
/var/log/lxc/<container-name>.log
تولد کانتینرهای مدرن با Docker
Docker در سال ۲۰۱۳ معرفی شد، اما بر پایه همان ابزارهای لینوکسی ساخته شد: استفاده از namespaces، cgroups، union filesystem، و بعدتر containerd و runc. تفاوت آن در ارائه یک رابط ساده برای توسعهدهندهها، ذخیرهسازی image، مدیریت lifecycle و portability بود.
از لحاظ فنی، Docker از ابزارهایی مانند runc، containerd، libcontainer برای مدیریت کانتینر استفاده میکند، اما همه آنها در نهایت به همان قابلیتهای کرنل لینوکس متکی هستند.
جمعبندی
تحول کانتینرها در دنیای لینوکس نه با یک نرمافزار، بلکه با مجموعهای از قابلیتهای کرنل آغاز شد: ایزولهسازی از طریق namespaces، کنترل منابع با cgroups، مدیریت فایلسیستم با union mounts و ابزارهایی مثل LXC. این زیربنا، زمینهساز ظهور ابزارهایی مثل Docker شد که تجربه کاربری سادهتری را روی این تکنولوژیهای پایه فراهم کردند. این فرایند همچنان با ابزارهایی مانند Podman، CRI-O و Kubernetes در حال گسترش است.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 2. نقش کانتینرها در توسعه نرمافزار و DevOps”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”معرفی مفاهیم CI/CD و نقش کانتینرها در خودکارسازی” subtitle=”توضیحات کامل”]CI/CD مفهومی کلیدی در فرآیند توسعه نرمافزار مدرن است که هدف آن کاهش خطای انسانی، افزایش سرعت تحویل نرمافزار، و اطمینان از کیفیت کد است. کانتینرها نقش مهمی در تحقق این هدف دارند، چراکه محیطی قابلپیشبینی و ایزوله برای اجرا و تست فراهم میکنند.
مفهوم CI (Continuous Integration)
ادغام مداوم فرآیندی است که در آن توسعهدهندهها بهطور مستمر کدهای خود را به مخزن اصلی push میکنند. این اقدام باعث اجرای خودکار تستها، build و تحلیل کیفیت کد میشود.
نمونهای از یک pipeline ساده CI با GitLab CI:
stages:
- build
- test
build:
stage: build
script:
- docker build -t my-app .
test:
stage: test
script:
- docker run my-app npm test
در این مثال، کانتینر Docker بهعنوان محیط build و test استفاده میشود که در آن همه چیز مستقل از سیستم عامل اجرا میشود.
مفهوم CD (Continuous Delivery / Deployment)
تحویل مداوم (Delivery) به معنای آمادهسازی نرمافزار برای انتشار در هر لحظه است. استقرار مداوم (Deployment) گام بعدی است که نرمافزار را بهطور خودکار به محیط production منتشر میکند.
مثال CD در GitHub Actions:
deploy:
runs-on: ubuntu-latest
needs: test
steps:
- name: Deploy with Docker
run: |
docker login -u $DOCKER_USER -p $DOCKER_PASS
docker push my-app
ssh user@server 'docker pull my-app && docker restart my-container'
مزیت کانتینر در پیادهسازی CI/CD
کانتینرها در پیادهسازی CI/CD چند مزیت کلیدی دارند:
- قابل حمل بودن: کانتینر همان در محیط توسعه، تست و production اجرا میشود.
- ایزوله بودن: هر مرحله در یک محیط مستقل انجام میشود و تداخلی ایجاد نمیشود.
- قابلیت کش: imageهای docker کش میشوند و سرعت pipeline را بالا میبرند.
- بازتولیدپذیری: یکبار build = همیشه یکسان اجرا میشود.
مثال از اجرای CI/CD در GitLab با استفاده از Docker-in-Docker
image: docker:latest
services:
- docker:dind
before_script:
- docker info
stages:
- build
- deploy
build:
stage: build
script:
- docker build -t registry.gitlab.com/my-app .
deploy:
stage: deploy
script:
- docker push registry.gitlab.com/my-app
مسیر فایلهای مرتبط با CI/CD
- فایل تنظیمات GitLab CI:
.gitlab-ci.yml - فایل تنظیمات GitHub Actions:
.github/workflows/ci.yml - Dockerfile اصلی پروژه:
./Dockerfile
جمعبندی
کانتینرها ستون فقرات سیستمهای CI/CD مدرن هستند. با ارائه محیطی ایزوله، پایدار و قابلتکرار، کمک میکنند که فرآیند build، test و deploy بدون وابستگی به زیرساخت اجرا شود. از این طریق، امکان تحویل سریع، مطمئن و خودکار نرمافزار فراهم میشود. ابزارهایی مانند Jenkins، GitLab CI و GitHub Actions بهسادگی از کانتینرها بهره میبرند و زیرساخت DevOps را قدرتمندتر و کارآمدتر میسازند.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”مزایای کانتینرها در برابر ماشینهای مجازی برای توسعهدهندگان” subtitle=”توضیحات کامل”]کانتینرها و ماشینهای مجازی (VM) هر دو ابزارهایی برای ایزولهسازی محیط اجرا هستند، اما تفاوتهای معماری میان آنها باعث شده تا کانتینرها در بسیاری از سناریوهای توسعه نرمافزار، انتخاب بهتری باشند. در ادامه بهطور دقیق مزایای کلیدی کانتینرها نسبت به VMها از نگاه توسعهدهنده بررسی میشود.
مقایسه معماری کانتینر و ماشین مجازی
- در VM، هر محیط مجازی شامل سیستمعامل کامل است که روی یک Hypervisor اجرا میشود.
- در کانتینر، همه محیطها از کرنل میزبان استفاده میکنند و فقط کتابخانهها و باینریهای مورد نیاز اپلیکیشن درون کانتینر قرار میگیرند.
به همین دلیل، کانتینرها بسیار سبکتر از VMها هستند.
مزایای کلیدی برای توسعهدهندگان
۱. راهاندازی سریعتر محیط توسعه
کانتینرها تنها در چند ثانیه یا حتی کمتر اجرا میشوند، در حالیکه بوت شدن یک VM ممکن است چند دقیقه زمان ببرد.
docker run -it ubuntu /bin/bash
۲. مصرف منابع پایینتر
کانتینرها بر خلاف VMها نیازی به اجرای سیستمعامل جداگانه ندارند. به همین دلیل:
- RAM و CPU کمتری مصرف میکنند
- تعداد بیشتری از آنها را میتوان روی یک سیستم اجرا کرد
۳. حملپذیری بالا و تطابق با محیطهای مختلف
کانتینر یکبار ساخته میشود و روی هر سیستمی که Docker یا موتور مشابهی داشته باشد، بدون تفاوت اجرا میشود.
docker build -t myapp .
docker run myapp
۴. مدیریت سادهتر وابستگیها
تمام وابستگیهای برنامه در داخل Dockerfile تعریف میشود و نیازی نیست که توسعهدهنده نگران تنظیم سیستم میزبان باشد.
مثال ساده از Dockerfile برای اجرای اپلیکیشن Node.js:
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "start"]
۵. امکان استفاده از CI/CD بهصورت سادهتر
توسعهدهندگان میتوانند pipelineهای CI/CD را بر اساس کانتینرها طراحی کنند، بدون نیاز به VM و ابزارهای سنگین.
۶. شبیهسازی دقیق محیط production
کانتینرها امکان اجرای دقیق همان محیطی که در production استفاده میشود را فراهم میکنند. این باعث کاهش خطاهای ناشی از تفاوت بین محیط توسعه و اجرا میشود.
۷. قابلیت اجرای چندین سرویس بهصورت همزمان
توسعهدهنده میتواند با استفاده از ابزارهایی مثل Docker Compose چند سرویس را همزمان اجرا و تست کند، مانند یک اپلیکیشن با frontend، backend و دیتابیس:
version: '3'
services:
web:
build: ./frontend
api:
build: ./backend
db:
image: postgres
۸. حجم بسیار کمتر
Imageهای Docker بهمراتب کوچکتر از فایلهای VM هستند. درحالیکه یک VM ممکن است چند گیگابایت باشد، یک image کانتینر معمولاً چند صد مگابایت حجم دارد یا کمتر.
۹. حذف مشکلات معروف به “works on my machine”
با استفاده از کانتینر، دیگر تفاوت بین سیستمها (macOS, Windows, Linux) باعث خطا نمیشود. همه چیز یکسان اجرا میشود.
جمعبندی
برای توسعهدهندگان، کانتینرها یک ابزار سبک، سریع، ایزوله و قابلاعتماد هستند که راهاندازی محیط توسعه، تست، و استقرار را بسیار سادهتر از ماشینهای مجازی میکنند. با بهرهگیری از کانتینرها، میتوان بدون نگرانی از ناسازگاری، چندین سرویس را بهطور همزمان اجرا کرد، محیط production را شبیهسازی نمود و بهسادگی پروژه را با تیم یا روی CI/CD منتقل کرد.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”استفاده در محیطهای staging، تست، و production” subtitle=”توضیحات کامل”]کانتینرها به دلیل معماری سبک، قابلحمل و ایزوله، در هر سه محیط اصلی چرخه عمر نرمافزار (staging، تست و production) نقش بسیار مؤثری دارند. در این بخش، نحوه بهرهگیری از کانتینرها در هر یک از این محیطها با مثالهای عملی و تنظیمات مربوط بررسی میشود.
استفاده در محیط تست (Testing)
در فاز تست، هدف اجرای خودکار تستها در یک محیط ایزوله و مشابه با production است.
مزایا:
- اجرای تستهای واحد (unit test) و تستهای ادغام (integration test) بدون نیاز به نصب وابستگیها روی سیستم
- تکرارپذیری بالا برای هر بار اجرای pipeline تست
مثال: اجرای تستها در کانتینر Node.js
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["npm", "test"]
اجرای تستها:
docker build -t myapp-test .
docker run --rm myapp-test
پیکربندی CI برای تست خودکار در GitLab CI/CD:
test:
image: node:18
script:
- npm install
- npm test
استفاده در محیط staging
staging جایی است که نرمافزار نهایی قبل از انتشار روی production آزمایش میشود.
ویژگیها:
- محیط staging باید دقیقاً مشابه production باشد.
- از همان image کانتینر production استفاده میشود.
- تست عملکرد، امنیت و قابلیت اطمینان در این مرحله انجام میگیرد.
استفاده از Docker Compose برای ساخت محیط staging:
version: '3'
services:
web:
image: myapp:latest
environment:
- NODE_ENV=staging
db:
image: postgres:15
environment:
- POSTGRES_PASSWORD=stagingpass
اجرا:
docker-compose -f docker-compose.staging.yml up -d
استفاده از Volumeها برای شبیهسازی دادههای واقعی:
docker run -v /staging/data:/var/lib/postgresql/data postgres
استفاده در محیط production
در محیط production، کانتینرها باید با تمرکز بر پایداری، مقیاسپذیری و امنیت اجرا شوند.
اقدامات مهم:
- استفاده از imageهای مینیمال (مثلاً Alpine) برای کاهش سطح حمله
- محدود کردن دسترسی به منابع با استفاده از
cgroupsوnamespaces - اجرای کانتینرها با کاربر غیر از root
نمونه Dockerfile بهینه برای production:
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN npm ci --only=production
USER node
CMD ["node", "app.js"]
استفاده از Kubernetes برای استقرار در production:
apiVersion: apps/v1
kind: Deployment
metadata:
name: myapp-deployment
spec:
replicas: 3
selector:
matchLabels:
app: myapp
template:
metadata:
labels:
app: myapp
spec:
containers:
- name: myapp
image: myapp:1.0.0
ports:
- containerPort: 3000
فعالسازی مانیتورینگ و لاگ در production:
- جمعآوری لاگها با Fluentd یا Loki
- مانیتورینگ با Prometheus و Grafana
جمعبندی
کانتینرها امکان ایجاد محیطهایی هماهنگ و یکپارچه را برای تست، staging و production فراهم میکنند. توسعهدهندگان میتوانند با تعریف یکبار image، آن را در همه مراحل توسعه بهکار بگیرند، از ناسازگاری بین محیطها جلوگیری کنند، و استقرار نهایی را ساده و ایمن سازند. این معماری باعث افزایش بهرهوری، کیفیت و امنیت در کل چرخه عمر توسعه نرمافزار میشود.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 3. تفاوت میان کانتینرها و ماشینهای مجازی (VM)”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”معماری کانتینر vs VM (با نمودار)” subtitle=”توضیحات کامل”]کانتینرها و ماشینهای مجازی (VMها) هر دو راهکارهایی برای ایزولهسازی و اجرای نرمافزار در محیطهای مستقل هستند، اما معماری آنها تفاوتهای بنیادی دارد که روی کارایی، منابع، راهاندازی، و مقیاسپذیری تأثیر زیادی میگذارد. در ادامه معماری این دو با نمودار مقایسه میشود و ویژگیهای فنی و عملکردی آنها تحلیل میگردد.
نمودار مقایسه معماری VM و کانتینر
برای درک بهتر تفاوت معماری، به نمودار زیر توجه کنید:
+-----------------------------+ +-----------------------------+
| Server Hardware | | Server Hardware |
+-----------------------------+ +-----------------------------+
| Host Operating Sys | | Host Operating Sys |
+-----------------------------+ +-----------------------------+
| Hypervisor | | Container Runtime |
+-----------------------------+ +-----------------------------+
| +-----------------------+ | | +------------------------+ |
| | Guest OS (Linux/Win) | | | | Container (App A) | |
| | +-------------------+| | | | +--------------------+ | |
| | | App A || | | | | App A Binary | | |
| | +-------------------+| | | | | Shared Kernel | | |
| +-----------------------+ | | +------------------------+ |
| +-----------------------+ | | +------------------------+ |
| | Guest OS (Linux/Win) | | | | Container (App B) | |
| | +-------------------+| | | | +--------------------+ | |
| | | App B || | | | | App B Binary | | |
| | +-------------------+| | | | | Shared Kernel | | |
| +-----------------------+ | | +------------------------+ |
+-----------------------------+ +-----------------------------+
ماشین مجازی (VM) کانتینر
تحلیل ساختاری
ماشینهای مجازی (VM):
- هر VM یک سیستمعامل مستقل دارد (Guest OS)
- برای اجرای هر اپلیکیشن، یک VM مجزا ایجاد میشود
- وابسته به Hypervisor مانند KVM، VMware، VirtualBox
- منابع مصرفی بالا و زمان راهاندازی کندتر
- ایزولهسازی سطح بالا، مناسب برای سناریوهای امنیتی حساس
کانتینرها:
- از کرنل سیستمعامل میزبان مشترک استفاده میکنند
- نیازی به نصب Guest OS ندارند
- سبک، سریع و کممصرف
- اجرای فوری، مناسب برای microservices و DevOps
- ایزولهسازی در سطح فرآیند با استفاده از
namespacesوcgroups
مقایسه فنی
| ویژگی | ماشین مجازی (VM) | کانتینر |
|---|---|---|
| سیستمعامل جداگانه | بله | خیر (استفاده مشترک از کرنل) |
| زمان راهاندازی | چند دقیقه | چند ثانیه |
| مصرف منابع | بالا | پایین |
| قابلیت حمل | متوسط (وابسته به Hypervisor) | بالا (imageهای استاندارد) |
| مقیاسپذیری | محدود | بالا |
| امنیت سطح بالا | بله | نیاز به تنظیمات تکمیلی |
| موارد استفاده مناسب | ماشینهای مجازی کامل، multi-tenant | میکروسرویس، CI/CD، تست |
مسیر فایلهای مهم در معماری VM و کانتینر
در VM با KVM:
- فایلهای image:
/var/lib/libvirt/images/myvm.qcow2 - فایل تنظیمات VM:
/etc/libvirt/qemu/myvm.xml
در Docker کانتینر:
- مسیر imageها:
/var/lib/docker/overlay2/ - فایلهای پیکربندی کانتینر (در صورت استفاده از Docker Compose):
./docker-compose.yml
اجرای همزمان چند سرویس در VM و کانتینر
در VM:
برای اجرای ۳ اپلیکیشن مجزا باید ۳ VM با Guest OS جداگانه راهاندازی شود.
در کانتینر:
با یک image میتوان چندین کانتینر مجزا با منابع جدا اجرا کرد:
docker run -d --name app1 myapp
docker run -d --name app2 myapp
docker run -d --name app3 myapp
جمعبندی
کانتینرها با ارائه معماری سبکتر و استفاده از کرنل مشترک، نسبت به ماشینهای مجازی سنتی، گزینهای سریعتر، کممصرفتر و مقیاسپذیرتر برای اجرای نرمافزارها در محیطهای مختلف هستند. در حالی که VMها در ایزولهسازی سطح بالا و پشتیبانی از چند سیستمعامل برتری دارند، کانتینرها در خودکارسازی، CI/CD و توسعه مدرن برتری قابلتوجهی نشان میدهند.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”مقایسه مصرف منابع (RAM، CPU، Storage)” subtitle=”توضیحات کامل”]یکی از جنبههای مهم در انتخاب بین کانتینرها و ماشینهای مجازی (VM) بررسی مصرف منابع است. کانتینرها و VMها هر دو میتوانند در محیطهای مختلف استفاده شوند، اما با توجه به معماری متفاوت آنها، مصرف منابع بهشدت متفاوت خواهد بود. در این بخش، بهطور دقیقتر مصرف منابع در هر دو تکنولوژی بررسی میشود.
مقایسه مصرف RAM، CPU و Storage در VM و کانتینرها
1. مصرف RAM:
- ماشینهای مجازی (VM): هر VM به یک سیستمعامل کامل نیاز دارد و بنابراین برای هر اپلیکیشن اجرا شده داخل VM، حافظه RAM برای خود سیستمعامل و برنامههای در حال اجرا اختصاص مییابد.
- مثال: برای اجرای یک VM که از Ubuntu استفاده میکند، علاوه بر حافظه مورد نیاز برای اپلیکیشنها، سیستمعامل Ubuntu نیز بهطور جداگانه به حافظه اختصاص داده میشود.
- مصرف RAM در هر VM معمولاً بین ۵۰۰ MB تا ۲ GB یا بیشتر است.
- کانتینرها: کانتینرها تنها به اجرای اپلیکیشنها نیاز دارند و از کرنل سیستمعامل میزبان مشترک استفاده میکنند. این یعنی مصرف RAM در کانتینرها معمولاً پایینتر از VMها است.
- مثال: یک کانتینر که از Docker استفاده میکند میتواند بهراحتی تنها چند MB RAM مصرف کند و تنها حافظهای که برای اجرای اپلیکیشنها نیاز است اختصاص مییابد.
- مصرف RAM در کانتینرها معمولاً بسیار کمتر از VMها است، معمولاً از ۵۰ MB تا ۱ GB.
2. مصرف CPU:
- ماشینهای مجازی (VM): هر VM منابع CPU خود را از میزبان سیستم بهصورت مجزا دریافت میکند. به این معنی که هر VM منابع کامل CPU (یا بخشی از آن) را اختصاصی دارد.
- در برخی موارد، ماشینهای مجازی ممکن است بهطور کامل به CPU وابسته باشند و موجب بار اضافه شوند.
- برای مثال، اگر ۴ VM در یک سرور فیزیکی با ۴ هسته CPU اجرا شوند، ممکن است تمام ۴ هسته CPU مورد استفاده قرار گیرد.
- کانتینرها: کانتینرها از CPU سیستم میزبان بهصورت اشتراکی استفاده میکنند. بهطور معمول، تعداد کانتینرهای فعال در یک سیستم میزبان خیلی بیشتر از تعداد VMها خواهد بود، زیرا منابع CPU بهطور بهینهتری مدیریت میشوند.
- در یک سرور فیزیکی که کانتینرها در آن اجرا میشوند، میتوان تعداد بسیار زیادی کانتینر راهاندازی کرد بدون اینکه فشار زیادی روی منابع CPU وارد شود.
- مصرف CPU در کانتینرها بسیار کمتر از VMها است زیرا منابع CPU بین کانتینرها به اشتراک گذاشته میشود و در نتیجه در هر کانتینر تخصیص منابع بهینهتری وجود دارد.
3. مصرف Storage:
- ماشینهای مجازی (VM): VMها به دلیل داشتن سیستمعامل کامل برای هر ماشین مجازی، به فضای دیسک زیادی نیاز دارند. هر VM معمولاً به یک فایل image مستقل برای سیستمعامل و اپلیکیشنها نیاز دارد که حجم آنها معمولاً از ۱۰ گیگابایت به بالا میرود.
- بهعنوان مثال، یک VM مبتنی بر Ubuntu ممکن است حداقل ۲۰ گیگابایت فضا برای سیستمعامل و برنامههای مورد نیاز خود مصرف کند.
- کانتینرها: کانتینرها بسیار سبکتر از VMها هستند زیرا از سیستمعامل میزبان بهطور اشتراکی استفاده میکنند. بهاینترتیب، حجم فایلهای مورد نیاز برای یک کانتینر معمولاً بسیار کمتر از VM است. علاوه بر این، فایلهای کانتینر میتوانند در لایهها ذخیره شوند و از آنجا که لایههای مشترک میان کانتینرها به اشتراک گذاشته میشوند، حجم مصرفی دیسک کاهش مییابد.
- برای مثال، یک کانتینر Docker ممکن است فقط چند مگابایت تا چند گیگابایت فضا مصرف کند، بسته به اندازه اپلیکیشن و لایههای موجود در آن.
مقایسه مصرف منابع در جدول
| ویژگی | ماشین مجازی (VM) | کانتینر |
|---|---|---|
| مصرف RAM | بالا (1 GB تا 4 GB بهازای هر VM) | پایین (50 MB تا 1 GB) |
| مصرف CPU | بالا (نیاز به تخصیص CPU مستقل) | پایین (اشتراک منابع CPU) |
| مصرف Storage | بالا (۱۰ گیگابایت یا بیشتر بهازای هر VM) | پایین (چند مگابایت تا چند گیگابایت) |
نکات تکمیلی
- زمان راهاندازی: کانتینرها معمولاً خیلی سریعتر از ماشینهای مجازی راهاندازی میشوند (چند ثانیه در مقابل چند دقیقه در VMها).
- مقیاسپذیری: با توجه به مصرف منابع کم در کانتینرها، مقیاسپذیری آنها بسیار بهتر است. بهطور مثال، در یک سرور واحد میتوان تعداد زیادی کانتینر راهاندازی کرد در حالی که تعداد ماشینهای مجازی محدود است.
جمعبندی
از نظر مصرف منابع، کانتینرها نسبت به ماشینهای مجازی از کارایی بهتری برخوردار هستند، بهویژه در مصرف RAM و CPU. کانتینرها به دلیل استفاده از کرنل مشترک سیستمعامل، منابع را بهطور بهینهتری تخصیص میدهند و در نتیجه سرعت بیشتری در راهاندازی و مقیاسپذیری دارند. در مقابل، ماشینهای مجازی برای هر سیستمعامل نیاز به منابع جداگانه دارند که میتواند به مصرف بالاتر منابع منجر شود.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”مزایا و معایب هر یک در سناریوهای مختلف (Dev، Ops، Production)” subtitle=”توضیحات کامل”]در دنیای مدرن فناوری اطلاعات، انتخاب بین کانتینرها و ماشینهای مجازی (VM) به وابستگی به سناریوهای مختلف مانند توسعه (Dev)، عملیات (Ops) و تولید (Production) بستگی دارد. هر کدام از این تکنولوژیها مزایا و معایب خاص خود را دارند که در ادامه به بررسی آنها میپردازیم.
1. سناریوی توسعه (Dev):
مزایای کانتینرها:
- سرعت بالا در راهاندازی: کانتینرها میتوانند بسیار سریع راهاندازی شوند (در عرض چند ثانیه) که این برای توسعهدهندگان بسیار حیاتی است. آنها میتوانند سریعاً محیطهای آزمایشی و تست را روی سیستمهای خود ایجاد کنند بدون اینکه زمان زیادی را صرف راهاندازی سیستمعاملهای مختلف کنند.
- محیطهای مشابه تولید: با استفاده از کانتینرها، محیطهای توسعهدهندگان دقیقاً مشابه محیطهای تولیدی میشوند. این به این معنی است که توسعهدهندگان میتوانند با اطمینان بیشتر از کدهایی که مینویسند، در محیطی مشابه به محیط تولید، استفاده کنند.
- قابلیت حملپذیری: کانتینرها قابلیت حمل بالایی دارند و میتوانند بهراحتی از یک محیط به محیط دیگر منتقل شوند. این ویژگی به توسعهدهندگان این امکان را میدهد که پروژههای خود را روی هر سرور یا سیستمعاملی بهراحتی اجرا کنند.
معایب کانتینرها:
- محدودیت در مدیریت منابع: در محیط توسعه، اگر تعداد زیادی کانتینر به طور همزمان اجرا شوند، ممکن است سیستم میزبان منابع زیادی را مصرف کند و باعث کاهش عملکرد شود.
- مشکلات شبکهای: در برخی موارد، کانتینرها به دلیل معماری شبکهای پیچیده ممکن است با مشکلاتی در اتصال بین کانتینرها مواجه شوند که میتواند زمانبر باشد.
مزایای ماشینهای مجازی (VM):
- سیستمعامل مجزا: ماشینهای مجازی به هر توسعهدهنده این امکان را میدهند که یک سیستمعامل کاملاً مجزا با تنظیمات خاص خود داشته باشد، که ممکن است برای برخی از برنامهها یا زبانهای خاص مورد نیاز باشد.
- انعطافپذیری بالا: در VMها، میتوان سیستمعاملهای مختلف (مثل لینوکس و ویندوز) را به طور همزمان اجرا کرد که برای برخی از پروژهها که نیاز به تست در چند سیستمعامل دارند، بسیار مفید است.
معایب ماشینهای مجازی (VM):
- مصرف منابع زیاد: VMها نیاز به منابع زیادی دارند زیرا هر VM باید یک سیستمعامل کامل را اجرا کند. این میتواند باعث کندی در فرآیند توسعه و مصرف بالای حافظه و CPU شود.
- زمان راهاندازی طولانی: برخلاف کانتینرها که در چند ثانیه راهاندازی میشوند، ماشینهای مجازی معمولاً برای راهاندازی نیاز به چند دقیقه دارند که این در فرآیند توسعه میتواند معضلی باشد.
2. سناریوی عملیات (Ops):
مزایای کانتینرها:
- مقیاسپذیری بالا: کانتینرها به دلیل استفاده از منابع اشتراکی و سبک بودن میتوانند به راحتی مقیاسپذیر شوند. در نتیجه، این ویژگی به عملیات اجازه میدهد تا تعداد زیادی اپلیکیشن و سرویس را بهراحتی مدیریت کند.
- مدیریت و اورکستراسیون سادهتر: ابزارهایی مانند Kubernetes و Docker Swarm به شما این امکان را میدهند که چندین کانتینر را به راحتی مدیریت و مقیاسپذیر کنید.
- استقلال از سیستمعامل میزبان: کانتینرها بهطور مستقیم از سیستمعامل میزبان استفاده میکنند، بنابراین برای مدیران سیستم، محیطهای کاری بیشتری فراهم میشود تا با هزینه کمتر سیستمهای متعددی را مدیریت کنند.
معایب کانتینرها:
- مسائل امنیتی: کانتینرها به اشتراکگذاری کرنل سیستمعامل میزبان میپردازند که ممکن است مشکلات امنیتی ایجاد کند. اگر یک کانتینر به هر دلیلی آسیبپذیر باشد، ممکن است سیستمعامل میزبان نیز تحت تأثیر قرار گیرد.
- محدودیت در نظارت: نظارت و تجزیهوتحلیل عملکرد در کانتینرها میتواند پیچیدهتر از ماشینهای مجازی باشد، زیرا اطلاعات در سطح سیستمعامل میزبان به اشتراک گذاشته میشود و ممکن است تحلیل دقیقتر نیازمند ابزارهای پیچیدهتری باشد.
مزایای ماشینهای مجازی (VM):
- جداسازی کامل منابع: ماشینهای مجازی به طور کامل از یکدیگر جدا هستند و هر یک میتواند منابع خاص خود را داشته باشد. این میتواند برای محیطهای حساس به امنیت یا نیاز به مجزاسازی بسیار مفید باشد.
- نظارت و امنیت بهتر: از آنجایی که ماشینهای مجازی سیستمعامل خود را دارند، نظارت و امنیت بهراحتی میتواند در سطح مجزا انجام شود. این ویژگی برای محیطهای عملیاتی که به امنیت بالا نیاز دارند، مفید است.
معایب ماشینهای مجازی (VM):
- مصرف منابع بالا: VMها به دلیل استفاده از سیستمعاملهای مجزا، مصرف منابع بیشتری دارند و این ممکن است در مقیاسهای بزرگتر (مثل محیطهای عملیات گسترده) مشکلساز باشد.
- مقیاسپذیری پایین: به دلیل مصرف بالای منابع، مقیاسپذیری در VMها نسبت به کانتینرها به سختی انجام میشود.
3. سناریوی تولید (Production):
مزایای کانتینرها:
- عملکرد بهینه: کانتینرها از منابع سیستم به طور بهینه استفاده میکنند و باعث میشوند که محیطهای تولیدی بهطور مؤثرتر و سریعتر اجرا شوند.
- مقاوم در برابر خرابی: کانتینرها به راحتی قابل انتقال هستند و میتوانند به راحتی روی سرورهای مختلف اجرا شوند. این باعث میشود که در صورت خرابی یک سرور، سریعاً بارگذاری مجدد انجام شود.
- انعطافپذیری: بهراحتی میتوان محیطهای مختلف را بر اساس نیاز تولید و سیستمهای مختلف ایجاد و مدیریت کرد.
معایب کانتینرها:
- مسائل مقیاسپذیری و امنیت: هرچند کانتینرها برای مقیاسپذیری عالی هستند، اما ممکن است در سناریوهای امنیتی حساس یا بارهای کاری سنگین که نیاز به محیطهای ایزوله شده دارند، مشکلساز شوند.
مزایای ماشینهای مجازی (VM):
- امنیت و ایزولاسیون بالا: ماشینهای مجازی به دلیل ایزوله بودن کامل از یکدیگر، برای محیطهای تولیدی که به امنیت بالایی نیاز دارند، مناسبتر هستند.
- پشتیبانی از برنامههای سنگین: VMها برای اپلیکیشنهای سنگین که به منابع زیادی نیاز دارند، انتخاب بهتری هستند زیرا میتوانند منابع اختصاصی و سیستمعامل مجزا برای هر برنامه فراهم کنند.
معایب ماشینهای مجازی (VM):
- مصرف منابع بالا: ماشینهای مجازی نیاز به منابع زیادی دارند که در محیطهای تولیدی که بار سنگینی دارند، میتواند به مصرف بیش از حد منابع منجر شود.
- زمان راهاندازی طولانی: در محیطهای تولیدی که نیاز به زمانبندی دقیق دارند، زمان طولانی راهاندازی ماشینهای مجازی میتواند یک مشکل باشد.
جمعبندی
در مجموع، انتخاب بین کانتینرها و ماشینهای مجازی بستگی به نوع سناریو و نیازهای خاص هر محیط دارد:
- در محیط توسعه (Dev)، کانتینرها به دلیل سرعت بالا و قابلیت حملپذیری بیشتر ترجیح داده میشوند.
- در محیط عملیات (Ops)، کانتینرها به دلیل مقیاسپذیری و مدیریت آسانتر مورد استفاده قرار میگیرند.
- در محیط تولید (Production)، ماشینهای مجازی به دلیل امنیت بالاتر و ایزولاسیون بهتر ممکن است انتخاب بهتری باشند، البته کانتینرها نیز با مزایای عملکرد بالا در برخی سناریوها انتخاب مناسبی هستند.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 4. معرفی LXC و LXD”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تعریف LXC (Linux Containers)” subtitle=”توضیحات کامل”]LXC یا Linux Containers یکی از تکنولوژیهای مجازیسازی در سطح سیستمعامل است که به کاربران این امکان را میدهد که محیطهای جداگانه (همچون کانتینرها) را در سیستم لینوکس ایجاد کنند. برخلاف ماشینهای مجازی که نیاز به یک سیستمعامل کامل برای هر کدام دارند، کانتینرهای LXC از ویژگیهای کرنل لینوکس برای جداسازی محیطها استفاده میکنند، بهطوریکه منابع سیستم مانند CPU، حافظه، و فضای دیسک بین کانتینرها به اشتراک گذاشته میشود، اما هر کانتینر بهطور مستقل از یکدیگر اجرا میشود.
LXC با استفاده از ویژگیهای کرنل لینوکس مانند cgroups و namespaces به کاربران این امکان را میدهد که محیطهای ایزولهشده ایجاد کنند که شبیه به اجرای سیستمعاملهای مجزا هستند، بدون آنکه نیازی به استفاده از ماشینهای مجازی و بارگذاری سیستمعاملهای اضافی باشد.
ویژگیها و قابلیتهای LXC:
- استفاده از منابع مشترک: برخلاف ماشینهای مجازی که هرکدام نیاز به سیستمعامل خاص خود دارند، کانتینرهای LXC از منابع کرنل میزبان بهطور مشترک استفاده میکنند.
- کارایی بالا: به دلیل استفاده از کرنل میزبان و نبود نیاز به بارگذاری سیستمعامل مجزا، کانتینرهای LXC عملکرد بهتری در مقایسه با ماشینهای مجازی دارند.
- ایزولاسیون: کانتینرهای LXC بهطور مؤثری از یکدیگر ایزوله میشوند و این ایزولاسیون به کمک ویژگیهایی مانند namespaces و cgroups فراهم میشود.
- قابلیت مقیاسپذیری: میتوان تعداد زیادی کانتینر را روی یک سیستم با منابع محدود بهراحتی اجرا کرد.
تفاوت LXC با دیگر تکنولوژیهای کانتینر:
- LXC vs Docker: در حالی که Docker برای کار با اپلیکیشنهای میکروسرویسی و برنامههای سبک و ساده طراحی شده است، LXC بهعنوان یک پلتفرم مجازیسازی سبکتر، بیشتر برای ایجاد محیطهای مشابه به ماشینهای مجازی بهکار میرود. در واقع، LXC بهطور کلی سیستمعاملهای کامل را بهطور جداگانه شبیهسازی میکند، در حالی که Docker معمولاً برای برنامههای خاص در داخل کانتینرها کاربرد دارد.
- LXC vs KVM: KVM (Kernel-based Virtual Machine) بهطور کامل یک ماشین مجازی را با استفاده از سیستمعامل مجزا اجرا میکند، در حالی که LXC تنها از کرنل میزبان برای ایجاد محیطهای ایزولهشده استفاده میکند.
مزایا و معایب LXC:
مزایا:
- استفاده بهینه از منابع: به دلیل اشتراک منابع کرنل میزبان، مصرف منابع در LXC بسیار کمتر از ماشینهای مجازی است.
- عملکرد بالا: LXC معمولاً نسبت به ماشینهای مجازی عملکرد بهتری دارد زیرا نیازی به بارگذاری سیستمعامل مجزا نیست.
- ایزولاسیون: LXC بهطور مؤثری محیطهای ایزولهشده ایجاد میکند که این برای تست و توسعه بسیار مفید است.
معایب:
- محدودیت در ایزولاسیون: اگرچه LXC ایزولاسیون فراهم میکند، اما به اندازه ماشینهای مجازی از لحاظ امنیتی جدا نیست. از آنجایی که کانتینرها از همان کرنل میزبان استفاده میکنند، در صورت آسیبپذیری کرنل، تمام کانتینرها در معرض خطر قرار میگیرند.
- پشتیبانی محدود از برخی نرمافزارها: برخی از نرمافزارها ممکن است در محیطهای LXC بهدرستی کار نکنند، چرا که این محیطها بهطور دقیقتری نیازمند پیکربندی و تنظیمات خاص هستند.
جمعبندی
LXC یک راهکار عالی برای ایجاد محیطهای ایزولهشده در لینوکس است که از کرنل میزبان برای مدیریت منابع استفاده میکند. این تکنولوژی برای سناریوهای مختلف مانند توسعه و تست مناسب است، اما در برخی موارد ممکن است نسبت به ماشینهای مجازی از لحاظ امنیتی و ایزولاسیون محدودیتهایی داشته باشد.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تعریف LXD بهعنوان لایه مدیریتی پیشرفته برای LXC” subtitle=”توضیحات کامل”]LXD (Linux Container Daemon) یک لایه مدیریتی پیشرفته برای LXC است که امکان مدیریت کانتینرهای لینوکس را با ویژگیهایی اضافی مانند دسترسی آسانتر، امنیت بهتر و مقیاسپذیری بیشتر فراهم میآورد. در واقع، LXD بهعنوان یک ابزار مدیریت و اورکستراسیون برای LXC عمل میکند که به کاربران این امکان را میدهد تا از کانتینرها بهصورت سادهتر و با امکانات بیشتری استفاده کنند.
LXD بر پایه LXC ساخته شده است و تمامی ویژگیهای آن را حفظ میکند، اما با استفاده از یک API RESTful و ابزارهای خط فرمان پیشرفته، محیطی کاربرپسندتر برای مدیریت کانتینرها فراهم میآورد.
ویژگیها و قابلیتهای LXD:
- مدیریت آسانتر کانتینرها: LXD از یک API RESTful برای مدیریت کانتینرها پشتیبانی میکند، که امکان مدیریت کانتینرها از طریق دستورهای سادهتر و دسترسی از راه دور را فراهم میآورد.
- مقیاسپذیری بهتر: LXD بهطور خاص برای مقیاسپذیری و پشتیبانی از سیستمهای بزرگ طراحی شده است، بنابراین میتوان آن را برای مدیریت تعداد زیادی کانتینر در یک محیط بزرگ استفاده کرد.
- پشتیبانی از شبکههای پیشرفته: LXD به شما این امکان را میدهد که شبکههای پیشرفتهتری را برای کانتینرها ایجاد کنید، مانند ساخت شبکههای بریج (bridge) و یا شبکههای فیلترشده (filtered).
- پشتیبانی از پلتفرمهای مختلف: LXD بهطور کامل از سیستمعاملهای مختلف مانند Ubuntu، CentOS، Debian، و سایر توزیعهای لینوکس پشتیبانی میکند.
تفاوت LXD با LXC:
- LXC یک ابزار سطح پایین است که برای ایجاد و مدیریت کانتینرهای لینوکس استفاده میشود. در مقابل، LXD یک لایه مدیریتی است که امکانات بیشتر و مدیریت سادهتر کانتینرها را فراهم میآورد. LXD به کاربران این امکان را میدهد که کانتینرها را با دستورات سادهتر و بدون نیاز به پیکربندیهای پیچیده، مدیریت کنند.
- LXD میتواند بهطور خودکار پیکربندیهای شبکه، ذخیرهسازی و امنیت را انجام دهد، در حالی که در LXC این کار باید بهصورت دستی انجام شود.
مزایا و معایب LXD:
مزایا:
- مدیریت سادهتر: LXD دستورات و ابزارهای مدیریتی پیشرفتهتری برای LXC فراهم میکند که مدیریت کانتینرها را آسانتر میکند.
- پشتیبانی از ویژگیهای پیشرفته: مانند قابلیتهای شبکهای پیشرفته و پشتیبانی از ذخیرهسازی و لایهبندیهای مختلف.
- ایزولاسیون و امنیت بهتر: LXD با پشتیبانی از ویژگیهای امنیتی اضافی مانند پروفایلهای امنیتی (security profiles) به افزایش امنیت کانتینرها کمک میکند.
- API و CLI قوی: LXD با استفاده از API RESTful و ابزارهای خط فرمان قدرتمند، امکان مدیریت از راه دور و بهصورت خودکار را برای کانتینرها فراهم میآورد.
معایب:
- پیچیدگی بیشتر در استفاده از برخی ویژگیها: برخی از ویژگیهای پیشرفته LXD ممکن است برای کاربران مبتدی پیچیده به نظر برسد.
- نیاز به منابع بیشتر: بهدلیل استفاده از لایه مدیریتی اضافی، LXD ممکن است در مقایسه با استفاده مستقیم از LXC منابع بیشتری مصرف کند.
جمعبندی
LXD بهعنوان لایه مدیریتی پیشرفته برای LXC امکانات بیشتری برای مدیریت کانتینرها فراهم میآورد. این لایه از قابلیتهایی مانند API قدرتمند، پشتیبانی از شبکههای پیشرفته و امنیت بهتر بهرهمند است و میتواند برای محیطهای بزرگتر و مقیاسپذیرتر مفید باشد. LXD، در حالی که امکان مدیریت سادهتر و خودکارسازی را فراهم میآورد، همچنان از ویژگیهای اصلی LXC استفاده میکند و با آن سازگار است.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”معرفی اجزای اصلی LXC (Container runtime، Templates، CLI)” subtitle=”توضیحات کامل”]LXC یکی از ابزارهای قدرتمند و سبک برای ایجاد و مدیریت کانتینرهای لینوکس است. این ابزار بهطور گستردهای برای ایزولاسیون محیطها در سیستمهای لینوکسی استفاده میشود و سه جزء اصلی دارد که عبارتند از: Container runtime، Templates، و CLI.
در این بخش، بهطور کامل هر یک از این اجزا را بررسی میکنیم.
1. Container Runtime
Container runtime هسته اصلی LXC است که مسئول اجرای و مدیریت کانتینرها است. این جزء بهطور مستقیم با هسته سیستمعامل (Linux Kernel) تعامل دارد و فرآیندهایی که درون کانتینرها اجرا میشوند را مدیریت میکند.
- وظیفه: LXC runtime به شما این امکان را میدهد که کانتینرهای مختلف را با منابع متفاوت (مانند پردازنده، حافظه و شبکه) اجرا کنید.
- چگونگی کار: LXC runtime به کمک امکاناتی مانند cgroups و namespaces در لینوکس، ایزولاسیون کانتینرها را فراهم میآورد. این اجزا به کانتینرها اجازه میدهند تا منابع سیستم را بهطور مؤثر و جداگانه از یکدیگر مصرف کنند.
- مسیر پیکربندی: برای پیکربندی LXC container runtime، فایلهای اصلی تنظیمات در مسیر
/etc/lxcقرار دارند. تنظیمات مرتبط با هر کانتینر خاص نیز درون دایرکتوریهای مجزای خود قرار میگیرند.مثال: برای پیکربندی کانتینری به نامmycontainer، میتوانید فایل تنظیمات آن را در مسیر زیر ویرایش کنید:/etc/lxc/mycontainer.conf
2. Templates
Templates بهعنوان الگوهایی برای ایجاد کانتینرهای جدید در LXC عمل میکنند. این الگوها شامل مجموعهای از فایلها و تنظیمات هستند که بهطور پیشفرض، یک محیط پایه برای کانتینر فراهم میکنند.
- وظیفه: Templates به شما این امکان را میدهند که کانتینرهای مختلفی را به سرعت و بر اساس نیاز خود راهاندازی کنید. این الگوها شامل سیستمعاملهای مختلف (مانند Ubuntu، CentOS، Alpine و غیره) هستند.
- چگونگی کار: وقتی شما یک کانتینر جدید با استفاده از یک Template ایجاد میکنید، LXC تمام پیکربندیهای لازم برای ایجاد سیستم فایل و نصب بستهها را طبق الگو انجام میدهد.
- مسیر فایلها: Templates در مسیر
/usr/share/lxc/templates/قرار دارند و میتوانند برای ایجاد کانتینرهای جدید استفاده شوند.مثال: برای ایجاد یک کانتینر جدید با استفاده از Template Ubuntu، دستور زیر را اجرا میکنید:lxc-create -n mycontainer -t ubuntuاین دستور یک کانتینر جدید با نام
mycontainerایجاد میکند که سیستمعامل Ubuntu در آن نصب شده است.
3. CLI (Command Line Interface)
CLI یا رابط خط فرمان ابزاری است که به شما این امکان را میدهد تا کانتینرها را مدیریت کنید و عملیات مختلفی مانند ایجاد، راهاندازی، توقف، و حذف کانتینرها را انجام دهید.
- وظیفه: CLI LXC تمام دستوراتی که برای مدیریت کانتینرها نیاز دارید را فراهم میکند. این دستورات شامل مواردی مانند مدیریت شبکه، ذخیرهسازی، وضعیت کانتینرها و پیکربندیهای دیگر است.
- چگونگی کار: با استفاده از دستورات خط فرمان، میتوانید کانتینرها را مدیریت کنید و وضعیت آنها را بررسی نمایید. این دستورات با LXC runtime در تعامل هستند و به شما اجازه میدهند که کانتینرها را بهصورت مستقیم کنترل کنید.
- مسیر نصب: ابزارهای CLI معمولاً در بسته نصب LXC گنجانده میشوند و نیازی به پیکربندی خاصی ندارند.مثال: برای لیست کردن تمام کانتینرهای فعال، دستور زیر را وارد میکنید:
lxc-ls --fancyاین دستور تمامی کانتینرهای فعال را بهصورت مرتب و با جزئیات نمایش میدهد.
جمعبندی
اجزای اصلی LXC شامل Container runtime، Templates و CLI هستند.
- Container runtime مسئول مدیریت و اجرای کانتینرهاست.
- Templates الگوهایی هستند که برای ایجاد سریع کانتینرها از سیستمعاملهای مختلف استفاده میشوند.
- CLI ابزار خط فرمانی است که برای مدیریت کانتینرها از طریق دستورات مختلف بهکار میرود.
با استفاده از این اجزا، LXC یک ابزار قدرتمند و انعطافپذیر برای ایجاد و مدیریت کانتینرهای لینوکس فراهم میآورد.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”معماری LXD (Daemon، REST API، Storage، Network، Profiles)” subtitle=”توضیحات کامل”]LXD یک ابزار مدیریت پیشرفته برای LXC است که به کاربران این امکان را میدهد تا کانتینرهای لینوکس را بهطور مؤثرتر و با ویژگیهای بیشتری مدیریت کنند. معماری LXD شامل چندین مؤلفه کلیدی است که به یکپارچگی بهتر و قابلیت مدیریت پیشرفتهتر کانتینرها کمک میکند. این مؤلفهها شامل Daemon، REST API، Storage، Network و Profiles هستند که هرکدام نقش خاصی در مدیریت کانتینرها دارند.
1. Daemon
Daemon در LXD هسته اصلی این سیستم است که تمامی درخواستهای ورودی را دریافت کرده و آنها را پردازش میکند. Daemon مسئول تمامی عملیاتهای پسزمینه است و بهعنوان یک سرویس در سیستم اجرا میشود.
- وظیفه: Daemon بهعنوان رابط اصلی برای ارتباط با کانتینرها عمل میکند. این مؤلفه درخواستها را از طریق REST API دریافت کرده و برای اجرا، آنها را به دیگر مؤلفهها (مانند شبکه، ذخیرهسازی، و مدیریت پروفایل) ارسال میکند.
- چگونگی کار: LXD Daemon معمولاً با نام
lxdاجرا میشود و بهصورت یک فرآیند سیستمعاملی در پسزمینه فعال است. این Daemon کانتینرها را ایجاد، پیکربندی و مدیریت میکند. - مسیر پیکربندی: فایلهای پیکربندی مربوط به LXD در مسیر
/etc/lxd/قرار دارند و امکان تنظیمات مختلف Daemon از جمله پیکربندیهای شبکه و ذخیرهسازی را فراهم میکنند.مثال: برای مشاهده وضعیت Daemon LXD، دستور زیر را وارد میکنید:systemctl status lxd
2. REST API
REST API در LXD یک رابط برنامهنویسی است که به کاربران و برنامهها این امکان را میدهد تا بهصورت مستقیم با Daemon ارتباط برقرار کنند. این API بهطور ویژه برای یکپارچهسازی LXD با سایر سیستمها و ابزارهای مدیریت کانتینر طراحی شده است.
- وظیفه: REST API تمامی عملیاتهای موردنیاز برای مدیریت کانتینرها را از جمله ایجاد، حذف، شروع و توقف کانتینرها، پیکربندی ذخیرهسازی و شبکه، و مدیریت پروفایلها انجام میدهد.
- چگونگی کار: API LXD از متدهای استاندارد HTTP مانند GET، POST، PUT و DELETE استفاده میکند تا عملیاتها را انجام دهد. این API میتواند برای خودکارسازی فرآیندها یا یکپارچگی با ابزارهای دیگر مورد استفاده قرار گیرد.
- مسیر ارتباط: درخواستهای API معمولاً از طریق پورتهای مشخص ارسال میشوند. برای دسترسی به API LXD میتوانید از ابزارهایی مانند
curlیا کتابخانههای مختلف در زبانهای برنامهنویسی استفاده کنید.مثال: برای دریافت اطلاعات کانتینر با استفاده از REST API، دستور زیر را میتوانید اجرا کنید:curl -s --unix-socket /var/snap/lxd/common/lxd/unix.socket "https://localhost:8443/1.0/containers/mycontainer"
3. Storage
Storage یکی از اجزای اصلی LXD است که مسئول مدیریت ذخیرهسازی کانتینرها و دادههای آنها میباشد. LXD از چندین روش ذخیرهسازی مختلف پشتیبانی میکند که شامل ذخیرهسازی محلی (Local Storage) و ذخیرهسازی شبکهای (Network Storage) میشود.
- وظیفه: این بخش مسئول ایجاد، مدیریت و تخصیص فضا به کانتینرها است. LXD میتواند از فرمتهای مختلف ذخیرهسازی مانند
btrfs,zfs,lvm, وdirبرای نگهداری دادهها استفاده کند. - چگونگی کار: هنگامی که یک کانتینر ایجاد میشود، LXD فضایی در سیستم ذخیرهسازی مشخص شده اختصاص میدهد. این ذخیرهسازی میتواند با استفاده از ابزارهای خاص (مانند
btrfsوzfs) قابلیتهای پیشرفتهای مانند اسنپشاتها (Snapshots) و کپی بر روی نوشتن (Copy-on-write) را فراهم کند. - مسیر پیکربندی: تنظیمات ذخیرهسازی LXD معمولاً در فایلهای پیکربندی LXD قرار دارند و میتوانند از طریق دستور
lxd initتنظیم شوند.مثال: برای مشاهده تنظیمات ذخیرهسازی، دستور زیر را وارد کنید:lxc storage list
4. Network
Network در LXD بهعنوان یک مؤلفه مدیریت شبکه برای کانتینرها عمل میکند. این جزء به کانتینرها این امکان را میدهد تا به شبکهها متصل شوند و منابع شبکهای مانند آدرسهای IP را دریافت کنند.
- وظیفه: مدیریت شبکه در LXD به شما این امکان را میدهد که شبکههای مختلفی برای کانتینرها ایجاد کنید، از جمله شبکههای بریج (Bridge) یا مجازی.
- چگونگی کار: LXD بهطور پیشفرض از یک شبکه بریج برای اتصال کانتینرها استفاده میکند، اما شما میتوانید شبکههای مختلفی با استفاده از ابزارهایی مانند
brctlیاlxc networkایجاد و مدیریت کنید. - مسیر پیکربندی: تنظیمات شبکه در LXD معمولاً در مسیر
/etc/lxd/networks/قرار دارند و میتوانند از طریق دستورlxc networkمدیریت شوند.مثال: برای ایجاد یک شبکه بریج جدید در LXD، از دستور زیر استفاده کنید:lxc network create mybridge
5. Profiles
Profiles در LXD بهعنوان الگوهایی برای پیکربندی کانتینرها عمل میکنند. هر پروفایل شامل تنظیمات شبکه، ذخیرهسازی و دیگر ویژگیها است که به یک یا چند کانتینر اختصاص داده میشود.
- وظیفه: پروفایلها به شما این امکان را میدهند که پیکربندیهای پیشفرض برای کانتینرها ایجاد کرده و بهطور متمرکز آنها را مدیریت کنید. شما میتوانید پروفایلها را بر اساس نیازهای خاص خود (مثل پروفایلهای شبکهای یا منابع پردازشی) تنظیم کنید.
- چگونگی کار: هنگام ایجاد یک کانتینر، میتوانید پروفایلهای خاصی را به آن اختصاص دهید. پروفایلها میتوانند شامل تنظیمات مختلفی باشند، مانند اندازه حافظه یا نوع ذخیرهسازی.
- مسیر پیکربندی: پروفایلها در مسیر
/etc/lxd/profiles/ذخیره میشوند و میتوانند از طریق دستورات LXD یا API ایجاد و مدیریت شوند.مثال: برای ایجاد یک پروفایل جدید با نامmyprofile، دستور زیر را وارد کنید:lxc profile create myprofile
جمعبندی
معماری LXD شامل پنج مؤلفه اصلی است که بهطور یکپارچه به مدیریت کانتینرها و منابع آنها کمک میکنند:
- Daemon که فرآیند اصلی مدیریت کانتینرها را بر عهده دارد.
- REST API که بهعنوان رابط برنامهنویسی برای تعامل با LXD عمل میکند.
- Storage که مدیریت فضای ذخیرهسازی کانتینرها را انجام میدهد.
- Network که به کانتینرها شبکه و منابع شبکهای اختصاص میدهد.
- Profiles که به ایجاد و مدیریت پروفایلهای پیکربندی برای کانتینرها کمک میکند.
این اجزا بهطور مؤثر به مدیریت کانتینرها کمک کرده و LXD را به ابزاری پیشرفته برای کار با کانتینرهای لینوکس تبدیل میکنند.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تفاوت LXC و LXD از منظر طراحی و کاربرد” subtitle=”توضیحات کامل”]LXC و LXD دو فناوری مرتبط هستند که در دنیای کانتینرها برای اجرای و مدیریت کانتینرهای لینوکس استفاده میشوند. با اینکه این دو ابزار بسیاری از قابلیتها و اصول مشابه را به اشتراک میگذارند، اما تفاوتهای عمدهای از نظر طراحی و کاربرد دارند که موجب میشود هر کدام برای نیازهای خاص متفاوت مناسبتر باشند. در این بخش، به مقایسه دقیق این دو از منظر طراحی و کاربرد خواهیم پرداخت.
1. طراحی
LXC یک ابزار پایهای برای مدیریت کانتینرهای لینوکس است که بهطور مستقیم از هسته لینوکس استفاده میکند. در واقع، LXC یک روش ساده برای استفاده از ویژگیهای هسته لینوکس مانند namespaces، cgroups و قابلیتهای دیگر برای ایزوله کردن فرآیندها و اجرای کانتینرها است. LXC از سطح پایینتری از مدیریت کانتینر برخوردار است و معمولاً برای کاربران با تجربهتر مناسب است که نیاز به کنترل دقیقتری روی ویژگیهای سیستمعامل دارند.
LXD در واقع یک لایه مدیریتی پیشرفتهتر و کاربرپسندتر برای LXC است. LXD بهعنوان یک ابزار مدیریت کانتینر، سعی دارد تا استفاده از LXC را سادهتر و راحتتر کند. LXD ویژگیهایی مانند API RESTful، پشتیبانی از شبکههای مجازی پیشرفته، ذخیرهسازی و مدیریت پروفایلها را برای کاربران فراهم میکند. به عبارت دیگر، LXD به کاربران این امکان را میدهد که با استفاده از یک رابط کاربری سادهتر و API قوی، کانتینرهای LXC را بهطور مؤثرتر مدیریت کنند.
2. کاربرد
- LXC: از آنجا که LXC بهطور مستقیم با ویژگیهای هسته لینوکس تعامل دارد و برای کاربران پیشرفته طراحی شده است، بیشتر در سناریوهایی که نیاز به تنظیمات دقیق و کنترل کامل بر نحوه اجرای کانتینرها وجود دارد، استفاده میشود. LXC برای مواردی که به نیازهای خاص و پیچیده در سطح سیستمعامل نیاز دارند، مناسب است.مثال کاربرد LXC:
- مدیریت تعداد زیاد کانتینرهای جداگانه برای اجرای سرویسهای مختلف روی همان سیستم.
- محیطهای تست و توسعه که نیاز به تنظیمات پیچیده و قابل تنظیم دارند.
- سناریوهایی که در آنها نیاز به استفاده از ویژگیهای خاص لینوکس مانند cgroups و namespaces در سطح سیستمعامل باشد.
- LXD: LXD بیشتر برای کاربرانی که بهدنبال یک ابزار ساده و پیشرفته برای مدیریت کانتینرها هستند مناسب است. این ابزار بهویژه برای استفاده در محیطهای تولید و همچنین در سناریوهایی که نیاز به اتوماسیون و یکپارچگی با ابزارهای دیگر (مانند CI/CD) وجود دارد، توصیه میشود.مثال کاربرد LXD:
- استقرار و مدیریت کانتینرها در مقیاس بزرگ با استفاده از APIها برای خودکارسازی فرآیندها.
- استفاده در محیطهای staging و production برای کانتینرهای برنامهنویسی و وبسرویسها.
- بهکارگیری در محیطهای چند کانتینری که نیاز به مدیریت شبکه و ذخیرهسازی پیشرفته دارند.
3. ویژگیهای کلیدی
LXC:
- سادگی در استفاده، ولی نیاز به پیکربندی دقیقتر.
- بیشتر به کاربران حرفهای و کسانی که میخواهند تنظیمات خود را بهطور دقیق مدیریت کنند، مناسب است.
- هیچ رابط کاربری گرافیکی یا API بهطور پیشفرض ندارد.
- عملیاتهایی مانند مدیریت شبکه، ذخیرهسازی و ایجاد کانتینرها از طریق CLI انجام میشود.
LXD:
- فراهم کردن رابط کاربری سادهتر از طریق CLI و REST API.
- پشتیبانی از قابلیتهای پیشرفته مانند ذخیرهسازی، شبکه و پروفایلها.
- قابلیت مدیریت کانتینرها با استفاده از API، که برای یکپارچهسازی با ابزارهای خارجی مفید است.
- ابزار مدیریتی پیشرفتهای برای استفاده در سناریوهای مقیاس بزرگ و استفاده تجاری.
4. کار با ذخیرهسازی و شبکه
LXC: در LXC، کاربران باید خودشان پیکربندیهای مربوط به ذخیرهسازی و شبکه را بهطور دستی انجام دهند. این ممکن است برای کاربرانی که به کنترل دقیقتری نیاز دارند مفید باشد، اما نیاز به تجربه بیشتری دارد.
LXD: در LXD، ذخیرهسازی و شبکه بهصورت پیشفرض و از قبل پیکربندی شدهاند، و کاربران میتوانند این تنظیمات را از طریق CLI یا API تنظیم و مدیریت کنند. این باعث میشود LXD برای کاربران مبتدیتر و کسانی که به سادگی در مدیریت کانتینرها نیاز دارند، جذابتر باشد.
5. امنیت
LXC: از آنجا که LXC بهطور مستقیم با هسته لینوکس ارتباط دارد، کاربران میتوانند سطح کنترل بیشتری روی امنیت کانتینرها و تنظیمات دسترسی داشته باشند. با این حال، ممکن است برای پیکربندی صحیح نیاز به تخصص و دانش عمیق از ویژگیهای امنیتی لینوکس باشد.
LXD: LXD نیز از همان ویژگیهای امنیتی LXC استفاده میکند، اما همچنین بهعنوان یک ابزار مدیریتی، از برخی ابزارهای امنیتی اضافی برای تسهیل در پیکربندیهای امنتر برخوردار است. این ابزار بهویژه برای کسانی که نیاز دارند تنظیمات پیچیده امنیتی را با سرعت بیشتری پیکربندی کنند، مناسبتر است.
جمعبندی
تفاوت اصلی بین LXC و LXD در سطح طراحی و کاربرد آنها است. LXC بیشتر بهعنوان یک ابزار پایهای برای مدیریت کانتینرها و ارائه امکانات دقیق و پیچیده به کاربران حرفهای شناخته میشود. در حالی که LXD بهعنوان یک لایه مدیریتی پیشرفتهتر و کاربرپسندتر، بهطور ویژه برای کسانی که نیاز به راحتی در استفاده از کانتینرها دارند طراحی شده است.
- LXC برای کاربران پیشرفته و نیازهای پیچیدهتر مناسب است.
- LXD برای توسعهدهندگانی که به دنبال یک ابزار سادهتر و اتوماتیک برای مدیریت کانتینرها هستند مناسبتر است.
هر دو ابزار میتوانند در پروژههای مختلف مورد استفاده قرار گیرند، اما انتخاب بین آنها بستگی به نیازهای خاص پروژه و سطح تجربه کاربر دارد.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 5. مقایسه LXC/LXD با Docker و Kubernetes”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تفاوت رویکرد در اجرای کانتینرها (System Container vs Application Container)” subtitle=”توضیحات کامل”]در دنیای کانتینرها، دو رویکرد اصلی برای اجرای کانتینرها وجود دارد: System Container و Application Container. هر یک از این رویکردها اهداف و کاربردهای خاص خود را دارند و در سناریوهای مختلف استفاده میشوند. در این بخش، بهطور دقیق به تفاوتها، ویژگیها، مزایا و معایب هر کدام از این رویکردها پرداخته میشود.
1. System Container
System Containers کانتینرهایی هستند که بهطور کامل یک سیستم عامل لینوکسی را شبیهسازی میکنند. این کانتینرها بیشتر برای ایجاد محیطهای ایزوله شده مشابه به ماشینهای مجازی استفاده میشوند، اما بهطور کارآمدتر و با مصرف منابع کمتر. این نوع کانتینرها میتوانند کل سیستم عامل را اجرا کنند و شامل همه چیزهایی هستند که برای اجرای یک محیط سیستمعامل کامل لازم است، از جمله سرویسهای سیستم، تنظیمات شبکه، و مدیریت کاربران.
ویژگیها:
- مشابه ماشینهای مجازی: System containers معمولاً مشابه ماشینهای مجازی عمل میکنند، اما بهجای استفاده از هایپروایزر، از ویژگیهای هسته لینوکس برای ایزولهسازی استفاده میکنند.
- مدیریت سیستم کامل: این نوع کانتینرها شامل تمامی سرویسها و نرمافزارهای لازم برای اجرای یک سیستمعامل کامل هستند.
- بیشتر شبیه به OS مستقل: سیستمعامل درون کانتینر میتواند یک توزیع لینوکس کامل باشد که مانند یک سرور مستقل عمل میکند.
مزایا:
- میتواند بسیاری از ابزارها و سرویسها را در یک محیط ایزوله اجرا کند.
- انعطافپذیری بالا در انتخاب و پیکربندی سیستمعامل.
- قابلیت مدیریت سیستمهای پیچیده و سرویسهای مختلف درون یک کانتینر.
معایب:
- مصرف منابع بیشتر در مقایسه با application containers.
- پیچیدگی در پیکربندی و مدیریت، چرا که بهطور کامل نیاز به پیکربندی سیستمعامل دارد.
مثالها:
- LXC (Linux Containers) یکی از نمونههای اصلی system containers است.
- OpenVZ و Solaris Zones نیز از این نوع کانتینرها محسوب میشوند.
2. Application Container
Application Containers تمرکز اصلی خود را بر ایزوله کردن و مدیریت برنامهها و سرویسهای خاص قرار میدهند. این کانتینرها برخلاف system containers، فقط شامل برنامه و وابستگیهای آن هستند، بدون اینکه یک سیستمعامل کامل را شبیهسازی کنند. این نوع کانتینرها برای محیطهای توسعه و تولیدی مناسباند که نیاز به یک محیط ایزوله شده برای اجرای برنامههای خاص دارند.
ویژگیها:
- تمرکز بر برنامهها: این کانتینرها فقط شامل برنامه و وابستگیهای آن هستند و نیازی به سیستمعامل کامل ندارند.
- سادهسازی اجرا: بهطور معمول، اجرای این کانتینرها بسیار سادهتر است زیرا فقط به اجرای برنامه خاص خود محدود میشوند.
- سبک و کممصرف: به دلیل عدم نیاز به سیستمعامل کامل، این کانتینرها بسیار سبکتر و سریعتر از system containers هستند.
مزایا:
- منابع کمتری مصرف میکنند زیرا تنها به وابستگیها و نیازهای یک برنامه خاص محدود میشوند.
- بهراحتی میتوانند در محیطهای مختلف بهویژه برای توسعه، تست، و مقیاسپذیری استفاده شوند.
- معماری میکروسرویسی را بهطور مؤثری پشتیبانی میکنند.
معایب:
- محدود به برنامهها و سرویسها است و نمیتوانند سیستمعامل کامل را شبیهسازی کنند.
- در برخی سناریوهای پیچیده که نیاز به دسترسی به سرویسهای سیستمعامل دارند، ممکن است محدودیتهایی داشته باشند.
مثالها:
- Docker یکی از شناختهشدهترین نمونههای application container است.
- Kubernetes که برای اورکستراسیون کانتینرها استفاده میشود، بهویژه برای مدیریت application containers طراحی شده است.
3. مقایسه و تفاوتها
| ویژگی | System Container | Application Container |
|---|---|---|
| محتویات | شامل سیستمعامل کامل و تمامی سرویسها | شامل فقط برنامه و وابستگیهای آن |
| مصرف منابع | بیشتر (چرا که نیاز به سیستمعامل کامل دارد) | کمتر (به دلیل عدم شبیهسازی سیستمعامل) |
| مقیاسپذیری | معمولاً پیچیدهتر و سنگینتر | سبکتر و به راحتی مقیاسپذیر |
| پیچیدگی | بیشتر بهدلیل نیاز به پیکربندی سیستمعامل | سادهتر و سریعتر در راهاندازی |
| کاربرد اصلی | ایجاد محیطهای ایزوله شبیه به ماشین مجازی | اجرای برنامهها و سرویسهای خاص |
| نمونهها | LXC، OpenVZ، Solaris Zones | Docker، Podman |
4. انتخاب رویکرد مناسب
- System Containers معمولاً در سناریوهایی استفاده میشوند که نیاز به اجرای یک سیستمعامل کامل یا محیطهای پیچیدهتری دارند، مثلاً زمانی که چندین سرویس مختلف باید در یک کانتینر اجرا شوند یا نیاز به شبیهسازی کامل یک سیستمعامل باشد.
- Application Containers بیشتر برای سناریوهایی که فقط نیاز به اجرای یک برنامه یا سرویس خاص دارند، مناسب هستند. این کانتینرها بهویژه در معماریهای میکروسرویسی و توسعه نرمافزار مورد استفاده قرار میگیرند و در این زمینه انعطافپذیری بالایی دارند.
جمعبندی
انتخاب بین system container و application container بستگی به نیازهای خاص پروژه و مقیاس آن دارد. اگر شما به یک محیط سیستمعاملی کامل نیاز دارید که چندین سرویس مختلف را اجرا کند، system container گزینه بهتری خواهد بود. در مقابل، اگر هدف شما اجرای یک برنامه خاص با وابستگیهای محدود است، application container انتخاب مناسبی خواهد بود.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”موارد استفاده برای هر ابزار در پروژههای واقعی” subtitle=”توضیحات کامل”]در دنیای واقعی، انتخاب ابزار مناسب برای هر پروژه میتواند تأثیر زیادی بر عملکرد، مقیاسپذیری، و مدیریت منابع پروژه داشته باشد. در این بخش، به بررسی برخی از ابزارهای رایج در مدیریت کانتینرها و استفادههای متداول آنها در پروژههای واقعی خواهیم پرداخت.
1. Docker
Docker یکی از شناختهشدهترین و پرکاربردترین ابزارهای مدیریت کانتینر است که در زمینههای مختلفی از جمله توسعه نرمافزار، تست، و اورکستراسیون استفاده میشود.
موارد استفاده:
- توسعه و تست: Docker به توسعهدهندگان کمک میکند تا محیطهای یکسانی برای اجرای برنامهها در سیستمهای مختلف ایجاد کنند. با استفاده از Docker، میتوان محیطهای توسعهای یکسان را برای همه اعضای تیم ایجاد کرد که در نتیجه توسعه سریعتر و عاری از مشکلات محیطی میشود.
- میکروسرویسها: Docker بهطور گسترده در معماری میکروسرویسی استفاده میشود. هر میکروسرویس در یک کانتینر جداگانه اجرا میشود که به افزایش مقیاسپذیری، ایزولهسازی و سهولت در توسعه کمک میکند.
- تست خودکار: Docker به تیمهای QA این امکان را میدهد که محیطهای تست یکسانی را بهسرعت ایجاد و حذف کنند و به این ترتیب، فرآیند تست خودکار را تسهیل میکند.
مثالهای واقعی:
- در شرکتهایی مانند Spotify و Netflix، از Docker برای اجرای و مدیریت میکروسرویسها و برنامههای مقیاسپذیر استفاده میشود.
- در فرآیند CI/CD برای تست کدها و محیطهای توسعه ایزوله، Docker بهطور وسیع استفاده میشود.
2. Kubernetes
Kubernetes یک ابزار قدرتمند برای اورکستراسیون کانتینرها است که برای مدیریت و اتوماسیون عملیات کانتینرها در مقیاس بزرگ طراحی شده است. Kubernetes ابزار مورد انتخاب برای محیطهای تولیدی پیچیده است که به مقیاسپذیری، خودکارسازی، و نظارت نیاز دارند.
موارد استفاده:
- مدیریت مقیاسپذیری: Kubernetes این امکان را میدهد که کانتینرها بهطور خودکار مقیاسپذیر شوند، یعنی میتوانید تعداد کانتینرها را بهطور خودکار افزایش یا کاهش دهید تا به تقاضای ترافیک پاسخ دهید.
- نظارت و مدیریت سلامت: Kubernetes با استفاده از ابزارهایی مانند liveness probes و readiness probes به مدیران سیستم این امکان را میدهد که سلامت کانتینرها را نظارت کرده و در صورت لزوم، اقداماتی برای بازیابی خودکار انجام دهند.
- استقرار خودکار: Kubernetes بهطور کامل استقرار خودکار و مدیریت چرخه عمر کانتینرها را فراهم میکند، بهطوریکه میتوان بهراحتی نسخههای جدید برنامهها را استقرار داده و نسخههای قدیمی را حذف کرد.
مثالهای واقعی:
- Airbnb و Uber از Kubernetes برای مدیریت زیرساختهای خود در مقیاس وسیع استفاده میکنند.
- بسیاری از شرکتهای SaaS مانند Shopify از Kubernetes برای مقیاسپذیری و مدیریت کانتینرها در محیطهای تولیدی خود بهره میبرند.
3. LXC (Linux Containers)
LXC یک سیستمعامل ایزولهشده است که از کانتینرها برای فراهمکردن محیطهای شبیه به ماشینهای مجازی استفاده میکند. این ابزار بهویژه در محیطهایی که به ایزولهسازی سیستمهای مختلف نیاز دارند، مفید است.
موارد استفاده:
- محیطهای توسعه و آزمایش: LXC برای اجرای سیستمهای مجازیشده سبکتر در پروژههای توسعهای و آزمایشی مفید است. بهویژه برای تست و بررسی نرمافزار در شرایط متفاوت بدون نیاز به سیستمعاملهای کامل.
- توسعه سیستمعامل: LXC به توسعهدهندگان سیستمعامل این امکان را میدهد که بهطور ایزولهسازی شده روی هسته سیستمعامل توسعه دهند و محیطهایی شبیه به سرورهای واقعی ایجاد کنند.
- شبکهبندی و سرویسدهی: LXC برای ساخت و آزمایش محیطهای شبکهای ایزوله استفاده میشود، بهویژه زمانی که نیاز به تست سیستمها در محیطهای پیچیده با قوانین فایروال خاص باشد.
مثالهای واقعی:
- شرکتهایی که نیاز به محیطهای سبک و ایزوله دارند، مانند Canonical (شرکت مادر Ubuntu)، برای تست سیستمعاملها و سرویسهای مختلف از LXC استفاده میکنند.
- برخی شرکتها از LXC برای ایجاد محیطهای تست ایزولهشده و بررسی مشکلات شبکه و سرویسها استفاده میکنند.
4. OpenVZ
OpenVZ یک فناوری مجازیسازی سطح سیستم است که امکان اجرای چندین کانتینر بر روی یک هسته لینوکس را فراهم میکند. برخلاف کانتینرهای سنتی که از سیستمعامل کامل استفاده میکنند، OpenVZ اجازه میدهد تا چندین محیط ایزولهشده در یک هسته مشترک اجرا شوند.
موارد استفاده:
- میزبانی وب و سرورهای اشتراکی: OpenVZ بهویژه برای ارائه خدمات میزبانی وب در سطح سرورهای اشتراکی و مقیاسپذیری بالا مفید است.
- سیستمهای ایزولهشده در تولید: OpenVZ در محیطهای تولیدی استفاده میشود که به تعداد زیادی محیط ایزولهشده با منابع مشترک نیاز دارند.
مثالهای واقعی:
- شرکتهای میزبانی وب مانند Veerotech از OpenVZ برای ارائه سرورهای مجازی خصوصی (VPS) با منابع مشترک استفاده میکنند.
- Virtuozzo، که نسخهای از OpenVZ است، برای ارائه خدمات VPS در مراکز داده استفاده میشود.
جمعبندی
- Docker بیشتر در محیطهای توسعه، تست، و میکروسرویسها استفاده میشود.
- Kubernetes در مقیاسگذاری و اورکستراسیون کانتینرها در محیطهای تولیدی پیچیده بهویژه در سیستمهای ابری نقش اساسی دارد.
- LXC برای ایجاد محیطهای ایزولهشده و سبک، که نیاز به سیستمعامل کامل ندارند، مناسب است.
- OpenVZ در پروژههایی که به محیطهای ایزولهشده با منابع مشترک نیاز دارند، از جمله در خدمات میزبانی وب، کاربرد دارد.
با توجه به نیازهای پروژه، انتخاب ابزار مناسب میتواند تأثیر قابلتوجهی در عملکرد و مقیاسپذیری سیستم داشته باشد.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”بررسی اجمالی عملکرد LXD بهعنوان جایگزینی برای Docker در برخی سناریوها” subtitle=”توضیحات کامل”]LXD و Docker هر دو از ابزارهای کانتینریسازی در دنیای لینوکس هستند، اما تفاوتهای قابلتوجهی در طراحی، عملکرد و موارد استفاده دارند. در این بخش، به بررسی اجمالی عملکرد LXD بهعنوان جایگزینی برای Docker در برخی سناریوها پرداخته میشود و مزایا و معایب هر یک در این سناریوها مقایسه میشود.
LXD vs Docker: طراحی و مفاهیم پایه
- Docker عمدتاً برای اجرای برنامهها در Application Containers طراحی شده است که بهطور خاص برای اجرای یک برنامه یا سرویس مستقل و ایزولهشده از سایر بخشهای سیستمعامل ساخته شدهاند. Docker به توسعهدهندگان این امکان را میدهد که محیطهایی کاملاً ایزوله و سریع برای اجرای کدها ایجاد کنند.
- LXD بر مبنای LXC (Linux Containers) کار میکند و بیشتر بهعنوان System Container شناخته میشود. این کانتینرها میتوانند تمام سیستمعاملها یا خدمات را بهطور کامل در یک محیط ایزولهشده اجرا کنند، نه فقط یک برنامه خاص. این یعنی LXD میتواند بهعنوان یک ماشین مجازی سبک عمل کند که سیستمعامل کامل را در خود جای میدهد.
1. مدیریت سیستمهای کامل بهجای فقط برنامهها
در سناریوهایی که نیاز به اجرای یک سیستم کامل با هسته و برنامهها در یک محیط ایزولهشده باشد، LXD گزینه بهتری نسبت به Docker است. بهویژه در مواردی که نیاز به اجرای محیطهای شبیه به سرورهای واقعی باشد، LXD توانایی اجرای سیستمعاملهای مختلف را در کنار یکدیگر دارد.
مثال:
- در برخی از پروژههای تست سیستمعامل، LXD میتواند بهعنوان یک جایگزین مناسب برای ماشینهای مجازی کامل عمل کند، زیرا میتوان از آن برای اجرای چندین سیستمعامل بهطور همزمان استفاده کرد.
2. مقیاسپذیری و اورکستراسیون
در صورتی که مقیاسپذیری و اورکستراسیون کانتینرها برای مدیریت تعداد زیادی از کانتینرهای ایزولهشده برای پروژههای بزرگ اهمیت داشته باشد، Docker همچنان گزینه پیشفرض است. Docker به همراه ابزارهایی مانند Docker Compose و Kubernetes برای مقیاسپذیری و اورکستراسیون کانتینرها بسیار مناسب است.
اما اگر بهجای اجرای سرویسهای مجزا، نیاز به ساخت محیطهای کاملتر و پیچیدهتری داشته باشیم که شامل تمام سیستمها، شبکهها و ذخیرهسازیها باشد، LXD میتواند برای این نوع سناریوها مناسبتر باشد.
مثال:
- Kubernetes برای مدیریت Docker در مقیاس بزرگ مورد استفاده قرار میگیرد، اما در صورتی که بخواهیم تمام سیستمها را در یک محیط ایزوله و با مقیاسپذیری بالا اجرا کنیم، LXD میتواند با ابزارهایی مانند LXD clustering و LXD images محیطهای سیستمعاملهای متنوع را بهصورت مقیاسپذیر مدیریت کند.
3. نیاز به اتصال مستقیم به هارد دیسک و منابع سیستم
Docker برای استفاده از سیستمعاملهای سبکتری طراحی شده است که به صورت مستقیم به منابع سیستم مانند هارد دیسک یا شبکه دسترسی ندارند. این در حالی است که LXD بهعنوان یک سیستم کانتینری کاملتر، میتواند به منابع سیستم مانند فضای ذخیرهسازی، حافظه و پردازندهها بهطور مستقیم دسترسی داشته باشد.
اگر در پروژهای نیاز به تعامل مستقیمتر با سیستمعامل اصلی و استفاده از منابع بهطور کاملتر باشد، LXD بهتر از Docker عمل میکند.
مثال:
- در پروژههای تست یا توسعهای که نیاز به آزمایش سیستمعاملها یا پیکربندیهای پیچیده دارند، LXD بهخوبی میتواند منابع را بهطور مستقیم و ایزوله در اختیار کانتینرها قرار دهد.
4. عملکرد و سرعت
یکی از نقاط قوت Docker سرعت بالای آن در راهاندازی و اجرای کانتینرها است، زیرا Docker کانتینرها را روی هسته سیستمعامل اصلی اجرا میکند و نیازی به لایههای اضافی ندارد.
از سوی دیگر، LXD به دلیل شباهتهای بیشتر با ماشینهای مجازی از نظر ساختاری، ممکن است از نظر عملکرد نسبت به Docker کمی کندتر باشد. این بهویژه در سناریوهایی که نیاز به راهاندازی سریع کانتینرها و مقیاسپذیری بالا دارند، میتواند یک نقطه ضعف باشد.
مثال:
- برای پروژههای بزرگ میکروسرویسها که نیاز به کانتینرهای کوچک و سبک دارند، Docker بهدلیل سرعت و کارایی بالا نسبت به LXD ترجیح داده میشود.
5. نگهداری و پشتیبانی
Docker بهعنوان یک ابزار بسیار محبوب، دارای پشتیبانی گستردهای از جامعه و منابع مستندات است. بسیاری از تیمها به راحتی از Docker برای پروژههای خود استفاده میکنند و مشکلات آن را حل میکنند. LXD، در مقایسه، ممکن است جامعهای کوچکتر و منابع کمتری داشته باشد، اما همچنان بهدلیل پیچیدگی و تواناییهایش، ابزار مفیدی برای استفاده در سناریوهای خاص است.
جمعبندی
- Docker برای پروژههایی که نیاز به اجرای برنامهها بهصورت ایزوله، سبک، و سریع دارند، بهترین انتخاب است.
- LXD بهویژه در پروژههایی که نیاز به اجرای سیستمعاملها و محیطهای ایزولهشده کامل دارند، مناسبتر است.
- در سناریوهای مقیاسپذیری بالا و نیاز به اورکستراسیون پیچیده، Docker و ابزارهای مرتبط با آن همچنان گزینههای بهتری هستند.
- LXD برای پروژههایی که نیاز به دسترسی مستقیم به منابع سیستم و پیکربندیهای پیچیدهتر دارند، میتواند جایگزین مناسبی برای Docker باشد.
بهطور کلی، انتخاب بین Docker و LXD بستگی به نیازهای خاص پروژه، مقیاس، و نوع استفاده دارد.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”قابلیتهای Kubernetes در مدیریت کلاسترهای کانتینری در مقابل LXD Clustering” subtitle=”توضیحات کامل”]Kubernetes و LXD Clustering هر دو ابزارهایی برای مدیریت کلاسترهای کانتینری هستند، اما هرکدام ویژگیهای خاص خود را دارند که بسته به نیاز پروژهها و سناریوهای مختلف، انتخاب بهترین گزینه را تعیین میکند. در این بخش به مقایسه عملکرد و قابلیتهای این دو ابزار پرداخته خواهد شد.
1. معرفی Kubernetes و LXD Clustering
- Kubernetes یک سیستم مدیریت کانتینرهای باز و متنباز است که برای مدیریت و مقیاسپذیری اتوماتیک کانتینرها طراحی شده است. این سیستم توانایی مدیریت هزاران کانتینر را در یک کلاستر دارد و قابلیتهایی مانند خودکارسازی نصب، مقیاسپذیری، و مدیریت منابع را ارائه میدهد.
- LXD Clustering، از طرف دیگر، بهطور خاص برای ایجاد و مدیریت کلاسترهای LXC containers طراحی شده است. LXD Clustering محیطهای کانتینری را که بهطور مستقیم به سیستمعامل وابسته هستند، مدیریت میکند. در حالی که LXD تمرکز بیشتری بر روی مدیریت سیستمعاملهای کامل دارد، Kubernetes بیشتر روی مدیریت برنامهها و سرویسها در محیطهای ایزولهشده تمرکز میکند.
2. مقیاسپذیری و خودکارسازی
- Kubernetes به دلیل قابلیتهای پیشرفته خود در مقیاسپذیری، میتواند بهطور خودکار تعداد کانتینرها را افزایش یا کاهش دهد. این ویژگی باعث میشود که Kubernetes بهترین گزینه برای پروژههایی باشد که نیاز به مقیاسپذیری بالا دارند. همچنین Kubernetes از Horizontal Pod Autoscaling برای مقیاسپذیری خودکار استفاده میکند.
- LXD Clustering نیز به شما این امکان را میدهد که چندین نود را به یک کلاستر اضافه کنید، اما برخلاف Kubernetes، لایههای مدیریتی خودکار برای مقیاسپذیری و مدیریت منابع به اندازه Kubernetes پیچیده و پیشرفته نیست. LXD بیشتر برای استفاده در سناریوهایی که به یک سیستمعامل کامل و ایزولهشده نیاز دارند، مناسب است.
مثال:
- در پروژهای که نیاز به مقیاسپذیری بالا و تغییرات سریع در تعداد کانتینرها وجود دارد (مانند سرویسهای میکروسرویس)، Kubernetes به دلیل امکانات پیشرفته مقیاسپذیری خود بهطور گستردهتر استفاده میشود.
3. مدیریت منابع و تخصیص آنها
- Kubernetes سیستمهای پیچیدهای برای تخصیص منابع دارد. میتوانید برای هر کانتینر یا سرویس میزان خاصی از منابع مانند CPU و حافظه را اختصاص دهید. Kubernetes همچنین برای اطمینان از اینکه منابع بهطور بهینه استفاده میشوند، از ویژگیهایی مانند Resource Requests و Limits بهره میبرد.
- در LXD Clustering، مدیریت منابع بیشتر بهصورت دستی انجام میشود. شما میتوانید منابعی مانند حافظه، پردازنده و ذخیرهسازی را به هر کانتینر اختصاص دهید، اما در مقایسه با Kubernetes، این امکانات در LXD محدودتر هستند و قابلیت خودکارسازی کمتری دارند.
مثال:
- اگر در حال اجرای چندین اپلیکیشن با نیازهای منابع مختلف هستید، Kubernetes میتواند منابع را بهطور خودکار تخصیص دهد تا به بهترین شکل ممکن از سختافزار استفاده شود.
4. استقرار و نگهداری
- Kubernetes به دلیل ویژگیهای پیچیدهاش، نیاز به پیکربندی و نگهداری گستردهای دارد. برای استقرار و نگهداری Kubernetes معمولاً از ابزارهایی مانند Helm و kubectl استفاده میشود. همچنین Kubernetes از قابلیتهای پیشرفتهای مانند Rolling Updates و Self-healing برای بهروز رسانی و اطمینان از عملکرد مداوم استفاده میکند.
- LXD Clustering نسبت به Kubernetes سادهتر است، اما همچنان نیاز به مدیریت دستی دارد. در LXD میتوان چندین نود را بهطور دستی به کلاستر اضافه کرد و آنها را مدیریت کرد. نگهداری LXD در مقایسه با Kubernetes بهطور کلی راحتتر است، اما به دلیل نداشتن قابلیتهای پیشرفته مدیریت خودکار، نیاز به دخالت دستی بیشتری دارد.
مثال:
- اگر بهدنبال استقرار و نگهداری سادهتر هستید، ممکن است LXD Clustering گزینه بهتری باشد، اما برای پروژههای بزرگتر که نیاز به مدیریت پیشرفتهتری دارند، Kubernetes انتخاب بهتری است.
5. پشتیبانی از میکروسرویسها و اپلیکیشنهای توزیعشده
- Kubernetes بهطور خاص برای مدیریت میکروسرویسها طراحی شده است و از معماری Pod-based برای مدیریت سرویسهای مختلف استفاده میکند. این ویژگی به شما این امکان را میدهد که میکروسرویسها را در کنار هم قرار دهید و آنها را بهصورت مقیاسپذیر مدیریت کنید.
- در حالی که LXD Clustering نیز میتواند برای میکروسرویسها استفاده شود، تمرکز آن بیشتر بر روی ایجاد سیستمعاملهای ایزولهشده است. این ویژگی باعث میشود که LXD برای سناریوهایی که به سیستمعاملهای کامل نیاز دارند، مناسب باشد، اما ممکن است بهاندازه Kubernetes برای مدیریت میکروسرویسها و اپلیکیشنهای توزیعشده مناسب نباشد.
مثال:
- در پروژههایی که نیاز به مدیریت میکروسرویسها و مقیاسپذیری بالایی دارند (مانند پلتفرمهای SaaS)، Kubernetes گزینه بهتری است.
جمعبندی
- Kubernetes برای پروژههایی که نیاز به مدیریت پیچیده، مقیاسپذیری بالا، و خودکارسازی دارند، بهترین گزینه است. این سیستم بهویژه برای مدیریت میکروسرویسها و اپلیکیشنهای توزیعشده بسیار مناسب است.
- LXD Clustering برای سناریوهایی که به محیطهای ایزولهشده و سیستمعاملهای کامل نیاز دارند، گزینه بهتری است. اگرچه LXD امکاناتی برای مقیاسپذیری و مدیریت منابع فراهم میکند، اما این امکانات بهاندازه Kubernetes پیشرفته نیست.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 6. موقعیت LXC/LXD در اکوسیستم کانتینری لینوکس”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”پشتیبانی توسط شرکت Canonical و جامعه متنباز” subtitle=”توضیحات کامل”]LXC و LXD در اکوسیستم کانتینری لینوکس جایگاه ویژهای دارند، بهویژه به دلیل پشتیبانی قوی از سوی Canonical و مشارکت فعال جامعه متنباز. این ابزارها بهعنوان بخشی از ابزارهای اصلی برای مجازیسازی سبک و مدیریت کانتینرهای سیستمعامل به شمار میروند و جایگاه خود را در میان سایر تکنولوژیهای کانتینری، مانند Docker و Kubernetes، پیدا کردهاند.
۱. پشتیبانی توسط Canonical
Canonical، شرکتی که توزیع محبوب لینوکس Ubuntu را توسعه میدهد، نقش مهمی در توسعه و پشتیبانی از LXC و LXD ایفا کرده است. در حالی که LXC از ابتدای راه خود بهعنوان یک پروژه متنباز توسط جامعه لینوکس توسعه مییافت، Canonical وارد این عرصه شد تا آن را به یک پلتفرم مدیریت کانتینر پیشرفتهتر تبدیل کند. LXD که بهعنوان یک لایه مدیریتی پیشرفته برای LXC توسعه یافته است، توسط Canonical پشتیبانی میشود و تمرکز آن بیشتر بر ایجاد تجربه کاربری سادهتر و مدیریتی قدرتمندتر برای کانتینرهای سیستمعامل است.
Canonical نه تنها LXC و LXD را در Ubuntu ادغام کرده است، بلکه ابزارهای مدیریتی و اسکریپتهای پشتیبانیکننده برای تسهیل استفاده از این تکنولوژیها را فراهم کرده است. در نتیجه، این دو ابزار در دنیای لینوکس، بهویژه در میان کاربران Ubuntu، بهعنوان گزینههای اصلی برای مجازیسازی سیستمعامل و مدیریت کانتینرها شناخته میشوند.
۲. جامعه متنباز و مشارکت فعال
یکی از مزیتهای اصلی LXC و LXD این است که بهطور کامل متنباز هستند و بهطور فعال توسط جامعهای از توسعهدهندگان و مهندسان در سراسر جهان توسعه مییابند. این موضوع به این معناست که هر کسی میتواند در پروژه مشارکت کند، مشکلات را گزارش دهد و ویژگیهای جدیدی به این ابزار اضافه کند. در نتیجه، LXC و LXD از روز به روز بهبود مییابند و بهروزرسانیهای منظم و ویژگیهای جدید در آنها عرضه میشود.
LXC بهعنوان یک پروژه متنباز توسط جامعه توسعهدهندگان کانتینری بهطور گسترده استفاده میشود. با این حال، LXD که بهعنوان یک ابزار مدیریت کانتینر برای LXC توسعه یافته است، بهویژه بهواسطه پشتیبانی Canonical به مراتب بیشتر مورد توجه قرار گرفته است. جامعه متنباز بهویژه برای LXD مفید است، چرا که قابلیتهای LXD را بهطور مداوم بهبود داده و آن را برای استفاده در محیطهای متنوع بهینه میکند.
در این راستا، مستندات رسمی، آموزشها، و انجمنهای آنلاین میتوانند منابع بسیار مفیدی برای یادگیری و پیادهسازی LXC و LXD فراهم کنند. در این انجمنها کاربران میتوانند مشکلات خود را مطرح کنند، سوالات فنی بپرسند و راهحلهای مختلف را مورد بررسی قرار دهند.
۳. موقعیت LXC/LXD در اکوسیستم کانتینری
- LXC و LXD بهعنوان گزینههایی برای سیستم کانتینر (System Container) شناخته میشوند که در آنها یک سیستمعامل کامل و ایزوله در هر کانتینر اجرا میشود. این در مقابل کانتینرهای برنامهای (Application Containers) مانند Docker قرار دارد که فقط یک اپلیکیشن را در داخل کانتینر اجرا میکنند.
- LXD بهطور خاص از LXC برای ایجاد و مدیریت کانتینرهای سیستمعامل استفاده میکند و یک لایه مدیریتی سادهتر و کاربرپسندتر از LXC ارائه میدهد. این امر باعث شده تا LXD برای استفاده در محیطهای پیچیدهتر و نیازمند به منابع سیستم کامل، مانند سرورها و دستگاههای شبکه، ایدهآل باشد.
- Docker و Kubernetes بیشتر برای میکروسرویسها و اپلیکیشنهای توزیعشده طراحی شدهاند، در حالی که LXC/LXD بیشتر برای سناریوهایی که نیاز به ایزولهسازی سیستمعاملها دارند (مثلاً برای تست و توسعه نرمافزارهایی که به محیطهای مشابه سیستمعامل واقعی نیاز دارند) مناسب هستند.
- LXD در بسیاری از سناریوهای جدید بهعنوان یک جایگزین قدرتمند برای VMware و سایر تکنولوژیهای ماشین مجازی استفاده میشود، زیرا از ویژگیهای مشابه برای اجرای سیستمعاملهای کامل بهره میبرد، در حالی که از مزایای کانتینرها برای بهرهوری بیشتر در منابع استفاده میکند.
جمعبندی
LXC و LXD جایگاه خود را در اکوسیستم کانتینری لینوکس بهعنوان ابزاری کارآمد و قابلاعتماد در مدیریت کانتینرهای سیستمعامل پیدا کردهاند. پشتیبانی فعال از سوی Canonical و مشارکت گسترده جامعه متنباز باعث شده تا این ابزارها بهطور پیوسته توسعه یابند و در سناریوهای مختلف مورد استفاده قرار گیرند. از این رو، انتخاب میان LXC/LXD و سایر ابزارهای کانتینری مانند Docker بستگی به نیازهای خاص پروژهها و سناریوهای استفاده دارد.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”استفاده در سیستمهای مبتنی بر cloud و edge” subtitle=”توضیحات کامل”]LXC و LXD بهعنوان ابزارهای قدرتمند برای مجازیسازی سبک و مدیریت کانتینرها، در سیستمهای مبتنی بر cloud و edge کاربردهای بسیاری دارند. این ابزارها بهویژه در این محیطها به دلیل کارایی بالا، مقیاسپذیری و انعطافپذیری که فراهم میآورند، مورد توجه قرار گرفتهاند.
۱. استفاده در سیستمهای مبتنی بر Cloud
در محیطهای cloud، هدف اصلی کاهش هزینهها، افزایش مقیاسپذیری و بهبود کارایی است. LXC/LXD بهعنوان ابزارهای کانتینری سیستمعامل، این امکان را میدهند که چندین کانتینر سیستمعامل ایزولهشده را در یک سرور فیزیکی اجرا کنید، بدون اینکه نیاز به ماشینهای مجازی کامل داشته باشید. این ویژگیها بهویژه در cloudهایی مانند OpenStack و Ubuntu Cloud بسیار مفید است.
- پشتیبانی از multi-cloud: با توجه به قابلیت LXC/LXD در ایجاد و مدیریت کانتینرهای سیستمعامل، این ابزارها به راحتی میتوانند در محیطهای چندابری (multi-cloud) و چندسرویسمحور (multi-service) مورد استفاده قرار گیرند. این ویژگی به سازمانها این امکان را میدهد که منابع محاسباتی خود را بین ارائهدهندگان مختلف cloud تقسیم کنند.
- مقیاسپذیری بهینه: LXD، بهویژه، بهعنوان یک لایه مدیریتی برای LXC بهخوبی در مقیاسهای بزرگ با بسیاری از کانتینرهای سیستمعامل ایزولهشده به کار میآید. این ابزار بهراحتی میتواند در محیطهای cloud با تعداد زیادی کانتینر مورد استفاده قرار گیرد.
- مدیریت آسان و خودکار: استفاده از LXD در cloudها به توسعهدهندگان این امکان را میدهد که از ابزارهای خودکارسازی مانند Ansible، Chef یا Puppet برای مدیریت کانتینرها و تنظیمات شبکه، ذخیرهسازی و منابع استفاده کنند.
۲. استفاده در سیستمهای مبتنی بر Edge
در edge computing، که تمرکز آن بر روی پردازش دادهها در نزدیکی منبع داده است، LXC و LXD به دلیل عملکرد بالا و نیاز کمتر به منابع نسبت به ماشینهای مجازی، میتوانند نقش بسیار مهمی ایفا کنند. این ابزارها برای راهحلهای edge که به فضای ذخیرهسازی و پردازش فشرده نیاز دارند، گزینه مناسبی هستند.
- محیطهای ایزولهشده در edge: در سیستمهای edge که باید دادهها را محلی پردازش کنند، امکان استفاده از کانتینرهای ایزولهشده از اهمیت بالایی برخوردار است. با استفاده از LXD، میتوان مجموعهای از کانتینرها را برای پردازش محلی در هر نقطه از شبکه راهاندازی کرده و بدون وابستگی به منابع مرکزی cloud، عملکرد بهینه را برای کاربردهای خاص در edge فراهم کرد.
- کارایی و کاهش تأخیر: با توجه به اینکه LXD و LXC منابع کمی را مصرف میکنند و نیازی به ماشینهای مجازی با منابع سنگین ندارند، این ابزارها میتوانند در edge برای پردازشهای سریع و پاسخدهی به تأخیر پایین استفاده شوند.
- مدیریت مقیاسپذیر در edge: استفاده از LXD برای مدیریت چندین کانتینر در محیطهای edge، بدون نیاز به ماشینهای مجازی سنگین، بهویژه در دستگاههای کممصرف و محیطهای توزیعشده، کارایی بالایی را فراهم میآورد.
۳. مزایای LXC/LXD در این محیطها
- پشتیبانی از شبکههای پیشرفته: LXD برای مدیریت شبکههای پیشرفته در محیطهای cloud و edge از جمله استفاده از bridge networks و macvlan بهطور پیشرفته پشتیبانی میکند، که به شما این امکان را میدهد که کانتینرها بهطور مؤثر به شبکههای خارجی متصل شوند.
- افزایش کارایی: بهدلیل ساختار سبک LXC/LXD، این ابزارها قادر به ارائه عملکرد بهینه با استفاده از منابع سیستم بهصورت بهینه هستند، که برای محیطهای cloud و edge که نیاز به کارایی بالا و مصرف کم منابع دارند، بسیار مناسب است.
- انعطافپذیری در ذخیرهسازی: در محیطهای cloud و edge، LXD پشتیبانی خوبی از انواع مختلف ذخیرهسازی از جمله ذخیرهسازی محلی، شبکهای و ابری را دارد. این ویژگی به شما این امکان را میدهد که سیستم ذخیرهسازی خود را بسته به نیاز و محیط پیادهسازی انتخاب کنید.
جمعبندی
LXC/LXD بهعنوان ابزارهایی سبک، مقیاسپذیر و با کارایی بالا در محیطهای cloud و edge بهویژه برای پردازشهای محلی و مدیریت کانتینرهای سیستمعامل ایزولهشده مورد استفاده قرار میگیرند. این ابزارها بهخوبی میتوانند در سناریوهایی که نیاز به پردازش دادهها در نزدیکی منبع داده یا توزیع منابع در چندین cloud یا محیطهای edge وجود دارد، جایگزین مناسبی برای ماشینهای مجازی سنگین و سایر ابزارهای کانتینری باشند. پشتیبانی از شبکههای پیچیده، ذخیرهسازی انعطافپذیر و کاهش تأخیر در پردازش، از جمله ویژگیهایی هستند که LXC و LXD را به گزینههایی ایدهآل برای چنین محیطهایی تبدیل میکنند.
[/cdb_course_lesson][cdb_course_lesson title=”بررسی موارد کاربردی مانند:”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”اجرای سیستمهای کامل لینوکس در یک کانتینر (System Containers)” subtitle=”توضیحات کامل”]System Containers به کانتینرهایی گفته میشود که نه تنها برای اجرای یک برنامه یا سرویس خاص، بلکه برای اجرای سیستمعامل کامل لینوکس در یک محیط ایزولهشده طراحی شدهاند. در این نوع کانتینرها، تمام اجزای لازم برای راهاندازی یک سیستم لینوکس بهطور کامل و مجزا از سیستم میزبان، از جمله هسته لینوکس، سرویسهای سیستم، و نرمافزارهای پایه اجرا میشوند.
در این بخش از آموزش های ارائه شده توسط فرازنتورک، به بررسی سیستمعاملهای مجازیسازی شده توسط System Containers پرداخته میشود و نحوه پیادهسازی آنها در ابزارهایی مانند LXC و LXD شرح داده میشود.
۱. ویژگیهای سیستمعاملهای کانتینری (System Containers)
- اجرای کامل سیستمعامل: برخلاف کانتینرهای اپلیکیشنی که فقط برای اجرای برنامهها طراحی شدهاند، سیستمعاملهای کانتینری مانند LXC امکان اجرای یک سیستمعامل کامل و تمام ویژگیهای آن (مانند پشتیبانی از دیمونها، سرویسها و فرآیندهای سیستم) را فراهم میآورند.
- استقلال از سیستم میزبان: هر کانتینر سیستمعامل میتواند بهطور کامل از سیستم میزبان خود ایزوله باشد. این ایزولاسیون اجازه میدهد که چندین سیستمعامل مختلف با هستههای متفاوت بر روی یک ماشین فیزیکی یا مجازی اجرا شوند، بدون اینکه تداخل و وابستگی بین آنها وجود داشته باشد.
- حمایت از زیرسیستمهای مختلف: در System Containers، میتوانید زیرسیستمهای مختلف لینوکس، از جمله دستورات CLI، مدیریت شبکه، و مدیریت ذخیرهسازی را در هر کانتینر بهطور مجزا و بهصورت کامل اجرا کنید.
۲. مزایای اجرای سیستمهای کامل لینوکس در کانتینرها
- کاهش مصرف منابع: برخلاف ماشینهای مجازی که به سیستمعامل میزبانی کامل و منابع خاصی نیاز دارند، System Containers بهطور موثری منابع سیستم را کاهش میدهند. این نوع کانتینرها نیازی به بارگذاری هسته جداگانه ندارند و میتوانند در سطح سیستمعامل اصلی اجرا شوند.
- کارایی بالا: به دلیل اینکه این کانتینرها از هسته میزبان خود استفاده میکنند، بسیار سریعتر و کارآمدتر از ماشینهای مجازی هستند، چرا که نیاز به شبیهسازی سختافزار یا اجرای چندین هسته مجزا وجود ندارد.
- مقیاسپذیری بالا: از آنجایی که System Containers سبک هستند و منابع کمتری را مصرف میکنند، میتوانند بهراحتی مقیاسپذیر باشند. این ویژگی برای محیطهای ابری و یا سرورهای مجازی که تعداد زیادی کانتینر میبایست در آنها اجرا شود، بسیار مفید است.
- انعطافپذیری در اجرای سیستمعاملهای مختلف: با استفاده از سیستمعاملهای کانتینری، میتوان سیستمهای مختلف لینوکس با نسخههای مختلف هسته و نرمافزارها را بهصورت ایزوله و در کنار یکدیگر اجرا کرد، بدون اینکه به سیستمعامل میزبان تداخل وارد شود.
۳. اجرای سیستمعامل کامل در LXC/LXD
ابزارهای LXC و LXD ابزارهای پیشرفتهای هستند که به شما امکان میدهند تا سیستمعاملهای کامل لینوکس را در کانتینرها اجرا کنید. این ابزارها بهویژه برای اجرای سیستمعاملهای ایزوله و مقیاسپذیر در محیطهای مختلف، مانند cloud و edge مفید هستند.
- راهاندازی سیستمعامل لینوکس در LXC: برای ایجاد یک سیستمعامل کامل در LXC، ابتدا باید یک کانتینر جدید از قالبهای موجود ایجاد کرد:
lxc launch ubuntu:20.04 my-containerاین دستور یک کانتینر با سیستمعامل Ubuntu 20.04 ایجاد میکند. پس از ایجاد کانتینر، میتوانید وارد آن شوید و آن را مانند یک سیستمعامل کامل لینوکس استفاده کنید:
lxc exec my-container -- /bin/bashداخل کانتینر میتوانید از تمام دستورات لینوکس و تنظیمات مشابه یک سیستم لینوکس مستقل استفاده کنید.
- راهاندازی سیستمعامل لینوکس در LXD: LXD بهعنوان یک لایه مدیریتی پیشرفته برای LXC، قابلیتهای بیشتری برای مدیریت سیستمعاملهای کانتینری ارائه میدهد. در LXD میتوان سیستمعاملهای ایزولهشده را با استفاده از ویژگیهایی مانند Profiles و Network Management بهطور پیچیدهتر مدیریت کرد.ایجاد یک کانتینر جدید با استفاده از LXD:
lxd init lxd launch ubuntu:20.04 my-lxd-containerمشابه به LXC، این کانتینر میتواند بهطور کامل بهعنوان یک سیستمعامل مجزا عمل کند و تمام ویژگیهای لازم برای مدیریت سرویسها و فرآیندهای سیستم در آن فراهم شود.
۴. موارد استفاده از سیستمعاملهای کانتینری
- تست و توسعه: System Containers برای محیطهای تست و توسعه که نیاز به راهاندازی سیستمعاملهای مختلف دارند، بسیار مفید هستند. توسعهدهندگان میتوانند به راحتی چندین نسخه از یک سیستمعامل یا چند سیستمعامل مختلف را بر روی یک سرور اجرا کنند و بدون تداخل به توسعه و تست برنامهها بپردازند.
- محیطهای تولید: در برخی سناریوها، کانتینرهای سیستمعامل ممکن است بهعنوان جایگزینی برای ماشینهای مجازی در محیطهای تولید استفاده شوند، بهویژه زمانی که نیاز به مقیاسپذیری بالا و مصرف منابع کم باشد.
- اجرای سرویسهای پیچیده: برای اجرای سرویسهای پیچیده که نیاز به دسترسی به هسته و ویژگیهای سیستمعامل دارند، System Containers یک انتخاب ایدهآل هستند. این سرویسها میتوانند بدون تأثیر بر روی سایر سیستمها، بهطور ایزوله و در محیطهای مجزا اجرا شوند.
جمعبندی
System Containers مانند LXC و LXD امکانات متعددی برای اجرای سیستمهای کامل لینوکس در یک کانتینر فراهم میآورند. این کانتینرها نه تنها امکان اجرای برنامهها بلکه اجرای یک سیستمعامل کامل با تمام ویژگیها و خدمات آن را در محیطهای ایزوله شده فراهم میکنند. مزایای آنها شامل مصرف کم منابع، مقیاسپذیری بالا، و انعطافپذیری در مدیریت سیستمعاملهای مختلف است. این ویژگیها آنها را به گزینهای عالی برای استفاده در محیطهای تست، تولید و توسعه در پروژههای پیچیده تبدیل کرده است.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”استفاده در سرویسدهی چندگانه (Multi-Tenant Hosting)” subtitle=”توضیحات کامل”]سرویسدهی چندگانه به روشی گفته میشود که در آن یک سیستم یا سرویس واحد به چندین کاربر یا مشتری (tenant) خدمات میدهد و هر یک از این مشتریان دسترسی ایزولهای به منابع و دادههای خود دارند. در این مدل، هر “tenant” میتواند تنظیمات و دادههای خود را بهطور مستقل از دیگر مشتریان مدیریت کند، اما تمام این فرآیندها تحت یک سیستم یا زیرساخت مشترک انجام میشود. در دنیای کانتینرها، این مدل از سرویسدهی میتواند با استفاده از System Containers و ابزارهایی مانند LXC و LXD بهطور مؤثر پیادهسازی شود.
۱. ویژگیهای سرویسدهی چندگانه با استفاده از کانتینرها
- ایزولاسیون کامل: یکی از مزایای اصلی استفاده از کانتینرها در سرویسدهی چندگانه، ایزوله کردن هر tenant از یکدیگر است. هر کانتینر بهعنوان یک واحد ایزوله عمل میکند، که باعث میشود هر tenant بتواند بهطور مستقل از سایرین به خدمات و دادههای خود دسترسی داشته باشد.
- اشتراکگذاری منابع: کانتینرها با استفاده از هسته سیستمعامل میزبان، منابع مانند CPU، RAM، و Storage را بهطور بهینه تقسیم میکنند. این ویژگی باعث میشود که استفاده از منابع در سرویسدهی چندگانه بسیار کارآمد باشد، بدون اینکه هر tenant بهطور جداگانه نیاز به سیستمعامل مجزا داشته باشد.
- مقیاسپذیری بالا: در محیطهای سرویسدهی چندگانه، نیاز به مقیاسپذیری بسیار مهم است. کانتینرها به دلیل کمحجم بودن و نیاز کم به منابع میتوانند بهراحتی مقیاسپذیر باشند. این ویژگی بهویژه در هنگام برخورد با تعداد زیادی tenant که نیاز به راهاندازی کانتینرهای متعدد دارند، بسیار مفید است.
- مدیریت آسان: استفاده از ابزارهای مدیریت کانتینر مانند LXC و LXD به مدیران سیستم اجازه میدهد تا بهراحتی تعداد زیادی کانتینر را برای tenantهای مختلف ایجاد و مدیریت کنند. این ابزارها امکاناتی برای تخصیص منابع، ایزولاسیون شبکه، و تنظیمات امنیتی فراهم میآورند که برای پیادهسازی سرویسدهی چندگانه ضروری است.
۲. مزایای استفاده از کانتینرها در سرویسدهی چندگانه
- کاهش هزینهها: به دلیل اشتراکگذاری منابع و نبود نیاز به اجرای سیستمعاملهای جداگانه برای هر tenant، کانتینرها میتوانند بهطور چشمگیری هزینهها را کاهش دهند. این کاهش هزینه بهویژه در سرویسدهی ابری و در مقیاسهای بزرگ قابلمشاهده است.
- انعطافپذیری در تخصیص منابع: در سرویسدهی چندگانه، هر tenant میتواند منابع خاص خود را بهطور جداگانه و با توجه به نیازهای خود تنظیم کند. این تنظیمات میتوانند شامل تخصیص دقیق CPU، RAM، و فضای ذخیرهسازی برای هر tenant باشد.
- بروزرسانی و نگهداری سادهتر: با توجه به اینکه هر tenant در یک کانتینر جداگانه قرار دارد، بروزرسانیها و نگهداریها بهصورت ایزوله و بدون تأثیرگذاری بر سایر tenants انجام میشود. بهعنوان مثال، در صورتی که یکی از tenantها نیاز به بهروزرسانی یا تغییرات سیستمعامل داشته باشد، این تغییرات تنها بر روی کانتینر آن tenant تأثیر میگذارد.
- مقیاسپذیری و عملکرد بالا: کانتینرها به دلیل سبک بودن و سرعت بالای اجرا، برای مقیاسپذیری بسیار مناسب هستند. هنگامی که تعداد زیادی tenant در یک سیستم نیاز به پشتیبانی دارند، میتوان بهراحتی کانتینرهای جدید راهاندازی کرد و از منابع بهطور مؤثر استفاده کرد.
۳. چالشهای استفاده از کانتینرها در سرویسدهی چندگانه
- مدیریت شبکه پیچیده: هر tenant ممکن است نیاز به تنظیمات شبکهای خاص داشته باشد. بنابراین، لازم است که از ابزارهای مدیریتی پیشرفته برای ایزولهسازی شبکهها و تأمین امنیت ارتباطات بین کانتینرها استفاده شود. ابزارهایی مانند LXD امکاناتی برای مدیریت شبکههای ایزولهشده و تنظیمات فایروال را ارائه میدهند.
- امنیت: هرچند کانتینرها از ایزولاسیون بالایی برخوردارند، اما در برخی شرایط ممکن است نقاط ضعف امنیتی بین tenants ایجاد شود. به همین دلیل، برای سرویسدهی چندگانه، مدیریت امنیت کانتینرها و اعمال پیکربندیهای امنیتی دقیق بر روی هر کانتینر ضروری است.
- محدودیتهای سختافزاری: در برخی موارد، ممکن است محدودیتهای سختافزاری برای اجرای تعداد زیادی کانتینر بهصورت همزمان وجود داشته باشد. در این صورت، نیاز به زیرساختهای سختافزاری با ظرفیت بالا و امکان توزیع منابع بهطور بهینه برای پشتیبانی از تعداد زیاد tenant ضروری است.
۴. چگونه از LXC/LXD برای سرویسدهی چندگانه استفاده کنیم؟
LXC و LXD بهعنوان ابزارهایی برای پیادهسازی کانتینرها، امکانات بسیاری برای راهاندازی و مدیریت سرویسدهی چندگانه فراهم میآورند. با استفاده از این ابزارها، میتوان برای هر tenant یک کانتینر مستقل ایجاد کرد و آن را از سایر tenants ایزوله کرد.
برای راهاندازی یک کانتینر در LXC و تخصیص منابع به آن:
lxc launch ubuntu:20.04 tenant1
برای تخصیص منابع خاص به یک tenant (مثلاً تخصیص RAM و CPU بهطور محدود):
lxc config set tenant1 limits.memory 2GB
lxc config set tenant1 limits.cpu 2
این دستورها کانتینری برای tenant1 راهاندازی میکنند و منابع مورد نیاز آن را محدود میکنند.
در LXD، برای تنظیم شبکههای ایزوله و پیکربندیهای پیچیدهتر، میتوان از پروفایلها و شبکههای مجازی استفاده کرد:
lxd init
lxd launch ubuntu:20.04 tenant1 --profile multi-tenant-profile
پروفایلهای اختصاصی میتوانند تنظیمات شبکه و امنیت را برای هر tenant مدیریت کنند.
جمعبندی
استفاده از کانتینرها در سرویسدهی چندگانه یکی از راهکارهای مؤثر برای ارائه خدمات ایزولهشده، مقیاسپذیر و با هزینه کمتر است. ابزارهایی مانند LXC و LXD امکانات مناسبی برای مدیریت کانتینرهای ایزولهشده در محیطهای چندگانه فراهم میآورند. این روش بهویژه در محیطهای ابری و سرویسدهی به مشتریان متعدد بسیار مفید است و با استفاده از قابلیتهایی مانند تخصیص منابع و تنظیمات امنیتی، امکان مدیریت و نگهداری بهینه سیستمها را فراهم میکند.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”جایگزینی سبکوزن برای VM در محیطهای CI/CD و تست” subtitle=”توضیحات کامل”]در محیطهای CI/CD (Continuous Integration/Continuous Deployment) و تست، سرعت و کارایی از اهمیت ویژهای برخوردار هستند. در این محیطها، نیاز به استفاده از ابزارهایی است که بتوانند با حداقل مصرف منابع، بیشترین عملکرد را در فرآیندهای پیوسته و اتوماتیک ارائه دهند. یکی از راهکارهای مؤثر برای بهبود کارایی در این محیطها، استفاده از کانتینرها بهجای ماشینهای مجازی (VMs) است.
۱. مزایای کانتینرها در CI/CD و تست
- سبکوزن بودن: یکی از اصلیترین ویژگیهای کانتینرها، سبکوزن بودن آنهاست. برخلاف ماشینهای مجازی که برای هر instance نیاز به سیستمعامل کامل دارند، کانتینرها از هسته سیستمعامل میزبان استفاده میکنند و تنها شامل کتابخانهها و برنامههای مورد نیاز برای اجرای اپلیکیشن هستند. این ویژگی باعث میشود که کانتینرها از نظر مصرف منابع بسیار بهینهتر از VMs باشند.
- راهاندازی سریع: کانتینرها بهسرعت و بهطور تقریبی آنی راهاندازی میشوند. این ویژگی بهویژه در CI/CD که نیاز به اجرای مداوم تستها و ساختهای نرمافزار است، بسیار مفید است. با کانتینرها میتوان چندین محیط تست ایزولهشده را بهسرعت راهاندازی و بررسی کرد.
- ایزولاسیون و تکرارپذیری: کانتینرها بهطور کامل از هم ایزوله شدهاند و امکان ایجاد محیطهای تست مستقل را برای هر build فراهم میآورند. این ویژگی برای اجرای تستها در CI/CD pipelines بسیار مفید است زیرا میتوان محیطهای مختلف (مثلاً تست، staging و production) را بدون تداخل بین آنها ایجاد و آزمایش کرد.
- صرفهجویی در منابع: از آنجا که کانتینرها تنها منابعی که برای اجرای برنامه نیاز دارند را مصرف میکنند، این تکنولوژی نسبت به ماشینهای مجازی که منابع زیادی از جمله CPU، RAM و ذخیرهسازی را اشغال میکنند، به مراتب کارآمدتر است.
- قابلیت حملپذیری و سازگاری: کانتینرها میتوانند در هر محیطی از جمله local development machines، cloud platforms و on-premise servers بدون تغییرات زیاد اجرا شوند. این قابلیت باعث میشود که در فرآیندهای CI/CD که نیاز به همخوانی بین محیطهای مختلف دارند، کانتینرها گزینه بسیار مناسبی باشند.
۲. مزایای کانتینرها در تستهای خودکار (Automated Testing)
- همزمانی بالا: در فرآیندهای تست خودکار، نیاز است که تستها بهطور همزمان بر روی چندین محیط مختلف اجرا شوند. به دلیل سبک بودن کانتینرها، میتوان چندین کانتینر را بهطور همزمان راهاندازی کرده و بر روی آنها تستهای مختلف را انجام داد، بدون اینکه فشار زیادی به منابع وارد شود.
- همخوانی محیطهای تست: یکی از مشکلاتی که در تست نرمافزار با آن مواجه هستیم، تفاوت بین محیطهای توسعه، تست و production است. کانتینرها به ما این امکان را میدهند که محیطهای مشابه برای هر تست ایجاد کنیم، که به نتایج دقیقتر و قابلاطمینانتر منجر میشود.
- انعطافپذیری و مقیاسپذیری: به راحتی میتوان تعداد زیادی کانتینر را برای اجرای تستهای همزمان راهاندازی کرد. این ویژگی بهویژه در هنگام اجرای تستهای واحد، تستهای عملکرد و load testing بسیار مهم است.
۳. مقایسه کانتینرها با ماشینهای مجازی در CI/CD و تست
در حالی که ماشینهای مجازی برای بسیاری از سناریوها مفید هستند، برای محیطهای CI/CD و تست استفاده از کانتینرها مزایای خاصی دارد:
- زمان راهاندازی: کانتینرها در مقایسه با ماشینهای مجازی زمان راهاندازی بسیار کمتری دارند. این ویژگی در CI/CD pipelines که نیاز به زمان سریع برای اجرای build و تستها دارند، بسیار حیاتی است.
- مصرف منابع: کانتینرها منابع کمتری نسبت به ماشینهای مجازی مصرف میکنند. ماشینهای مجازی نیاز به سیستمعامل کامل دارند، در حالی که کانتینرها از هسته سیستمعامل میزبان استفاده میکنند و بهطور مؤثرتری منابع را به اشتراک میگذارند.
- مدیریت آسانتر: در محیطهای CI/CD که نیاز به مقیاسپذیری و انعطافپذیری دارند، کانتینرها با ابزارهایی مثل Docker و Kubernetes میتوانند بهراحتی مدیریت و مقیاسبندی شوند، در حالی که ماشینهای مجازی نیاز به مدیریت پیچیدهتر دارند.
۴. چگونه از کانتینرها در CI/CD استفاده کنیم؟
برای استفاده از کانتینرها در CI/CD pipelines، معمولاً از ابزارهایی مانند Docker یا Kubernetes استفاده میشود. این ابزارها امکاناتی برای ساخت، آزمایش و استقرار اپلیکیشنها در محیطهای ایزولهشده فراهم میکنند.
برای راهاندازی یک CI pipeline با استفاده از Docker:
- ابتدا Docker را روی سیستم نصب کنید.
- یک Dockerfile برای محیط تست ایجاد کنید:
FROM ubuntu:20.04
RUN apt-get update && apt-get install -y build-essential
WORKDIR /app
COPY . .
RUN make
CMD ["./run_tests.sh"]
- سپس در محیط CI (برای مثال، در GitLab CI یا Jenkins)، از این Dockerfile برای ساخت و تست اپلیکیشن استفاده کنید:
stages:
- build
- test
build:
stage: build
script:
- docker build -t myapp .
test:
stage: test
script:
- docker run myapp ./run_tests.sh
این CI pipeline بهصورت خودکار اپلیکیشن را میسازد و تستها را در یک محیط ایزولهشده (کانتینر) اجرا میکند.
جمعبندی
استفاده از کانتینرها بهجای ماشینهای مجازی در محیطهای CI/CD و تست باعث افزایش کارایی، کاهش هزینهها، و فراهم آوردن مقیاسپذیری بالا میشود. کانتینرها به دلیل ویژگیهای سبکوزن بودن، سرعت راهاندازی بالا و ایزولاسیون مناسب، گزینههای بسیار مناسبی برای مدیریت و اجرای اتوماتیک تستها در محیطهای توسعه و تولید هستند. با ابزارهایی مانند Docker و Kubernetes میتوان فرآیندهای CI/CD را بهطور مؤثر و بهینهتری پیادهسازی کرد.
[/cdb_course_lesson][/cdb_course_lessons]
نسخه کرنل لینوکس
LXC و LXD به ویژگیهای خاصی در کرنل لینوکس وابسته هستند که امکان اجرای کانتینرها را فراهم میآورد. بنابراین، باید از کرنل لینوکس با نسخه و پیکربندی مناسب برای این ابزارها استفاده کنید.
- نسخههای پشتیبانیشده کرنل:
برای استفاده از LXC و LXD، باید از نسخههای کرنل لینوکس 3.8 یا بالاتر استفاده کنید. در صورتی که از نسخههای قدیمیتر کرنل استفاده میکنید، برخی از ویژگیها و قابلیتهای ضروری برای کانتینرها فعال نخواهند بود.
برای بررسی نسخه کرنل لینوکس، از دستور زیر استفاده کنید:
uname -r
اگر نسخه کرنل شما قدیمیتر از 3.8 است، باید آن را به نسخهای جدیدتر ارتقا دهید تا از قابلیتهای لازم برای اجرای کانتینرها بهرهمند شوید.
فعال بودن قابلیتهای cgroups و namespaces
LXC و LXD برای اجرای کانتینرها نیاز به قابلیتهایی در کرنل لینوکس دارند که بهطور عمده شامل cgroups و namespaces است. این قابلیتها به کرنل لینوکس این امکان را میدهند که منابع سیستم را برای هر کانتینر ایزوله کرده و بهطور مجزا تخصیص دهد.
- Cgroups:
Cgroups (Control Groups) ابزاری است که به کرنل لینوکس این امکان را میدهد که منابع سیستم مانند CPU، حافظه، و I/O را بین فرآیندها و کانتینرها تقسیم کند. به این ترتیب، هر کانتینر میتواند منابع اختصاصی خود را داشته باشد و بر عملکرد سایر فرآیندها تاثیر نگذارد.
برای بررسی فعال بودن cgroups در سیستم خود، میتوانید از دستور زیر استفاده کنید:
ls /sys/fs/cgroup
اگر دایرکتوریهای مختلفی مانند cpu, memory, blkio و غیره را مشاهده کردید، به این معنی است که قابلیت cgroups فعال است.
- Namespaces:
Namespaces یک ویژگی کرنل لینوکس است که امکان ایزولهسازی منابع مختلف سیستم (مانند فضای نام شبکه، فرایندها، فایلسیستمها و…) را برای هر کانتینر فراهم میآورد. این ویژگی باعث میشود که هر کانتینر بهطور مستقل از دیگر کانتینرها عمل کند.
برای بررسی فعال بودن namespaces، شما میتوانید با استفاده از دستور زیر بررسی کنید که آیا کرنل شما از namespaces پشتیبانی میکند:
grep CONFIG_NAMESPACES /boot/config-$(uname -r)
اگر خروجی بهصورت CONFIG_NAMESPACES=y باشد، به این معنی است که کرنل شما از namespaces پشتیبانی میکند.
جمعبندی
برای استفاده از LXC و LXD، باید سیستم شما پیشنیازهایی مانند نسخه مناسب کرنل (3.8 یا بالاتر) و فعال بودن قابلیتهای cgroups و namespaces را داشته باشد. این قابلیتها به کرنل لینوکس این امکان را میدهند که منابع سیستم را بهطور موثر بین کانتینرها تقسیم و ایزوله کرده و اجرای آنها را در محیطی مجزا و کارآمد مدیریت کند. پس از اطمینان از این پیشنیازها، میتوانید به مرحله نصب و پیکربندی LXC و LXD بپردازید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”چک کردن ویژگیهای مورد نیاز با استفاده از lxc-checkconfig” subtitle=”توضیحات کامل”]برای اطمینان از اینکه سیستم شما تمام پیشنیازهای لازم برای اجرای LXC و LXD را داراست، ابزار lxc-checkconfig به شما کمک میکند تا بررسی کنید که آیا کرنل لینوکس شما از ویژگیهای ضروری مانند cgroups، namespaces و سایر ویژگیهای مورد نیاز پشتیبانی میکند یا خیر.
استفاده از دستور lxc-checkconfig
دستور lxc-checkconfig یک ابزار مفید است که برای بررسی قابلیتهای کرنل استفاده میشود و میتواند به شما اطلاعات کاملی در مورد پشتیبانی سیستم از ویژگیهای مختلف لازم برای اجرای کانتینرها ارائه دهد. این دستور میتواند بهویژه برای بررسی پیشنیازهای LXC و LXD بسیار مفید باشد.
برای استفاده از این دستور، کافی است آن را در ترمینال وارد کنید:
lxc-checkconfig
این دستور خروجیای مشابه به شکل زیر تولید میکند:
LXC version : 3.0.3
Kernel version : 5.4.0-42-generic
LXC features : cgroups, namespaces, etc.
در این خروجی، شما خواهید دید که چه قابلیتهایی در کرنل شما فعال هستند و آیا سیستم شما از ویژگیهای مورد نیاز برای اجرای LXC و LXD پشتیبانی میکند یا خیر.
تحلیل خروجی دستور
در خروجی دستور lxc-checkconfig، بهطور خاص به چندین بخش توجه کنید:
- LXC version: نسخه نصبشده LXC را نشان میدهد.
- Kernel version: نسخه کرنل لینوکس شما را نشان میدهد.
- LXC features: لیستی از ویژگیهایی است که در کرنل شما فعال هستند. این ویژگیها ممکن است شامل cgroups, namespaces, user namespaces, cgroup controllers و سایر قابلیتهای مورد نیاز باشند.
مثال بررسی ویژگیهای مورد نیاز
در صورتی که کرنل شما تمام ویژگیهای ضروری را پشتیبانی کند، خروجی مشابه به این خواهد بود:
LXC version : 3.0.3
Kernel version : 5.4.0-42-generic
LXC features : cgroups, namespaces, user namespaces, cgroup controllers
اما اگر یکی از ویژگیهای ضروری غیرفعال باشد، ممکن است در خروجی چیزی شبیه به این مشاهده کنید:
LXC version : 3.0.3
Kernel version : 5.4.0-42-generic
LXC features : cgroups, namespaces, user namespaces, cgroup controllers (some features disabled)
در این صورت، باید بررسی کنید که چرا ویژگیهای لازم غیرفعال هستند و آنها را در کرنل لینوکس خود فعال کنید.
جمعبندی
استفاده از دستور lxc-checkconfig یک راه ساده و مؤثر برای بررسی قابلیتهای کرنل و اطمینان از پشتیبانی سیستم از ویژگیهای مورد نیاز برای LXC و LXD است. با اجرای این دستور، شما میتوانید بهسرعت مشکلات احتمالی را شناسایی کرده و از فعال بودن تمام پیشنیازها مطمئن شوید تا مراحل نصب و پیکربندی را بدون مشکل ادامه دهید.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 2. نصب LXC و LXD در توزیعهای مختلف لینوکس”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”نصب LXC و LXD در Ubuntu با استفاده از snap و apt” subtitle=”توضیحات کامل”]برای نصب LXC و LXD در سیستمهای مبتنی بر Ubuntu، دو روش اصلی وجود دارد: Snap و APT. هرکدام از این روشها مزایا و ویژگیهای خاص خود را دارند. در این بخش به بررسی نحوه نصب این دو ابزار بهوسیله این دو روش خواهیم پرداخت.
نصب LXC و LXD با استفاده از Snap
Snap یک ابزار بستهبندی برای سیستمعاملهای مبتنی بر لینوکس است که به شما اجازه میدهد نرمافزارها را بهصورت مستقل از توزیعها نصب کنید. نصب LXC و LXD از طریق Snap بسیار ساده است و همیشه بهروزترین نسخهها را دریافت میکنید.
برای نصب LXC و LXD با استفاده از Snap، مراحل زیر را دنبال کنید:
- ابتدا باید مطمئن شوید که Snap روی سیستم شما نصب شده است. اگر Snap را نصب نکردید، با استفاده از دستور زیر آن را نصب کنید:
sudo apt update sudo apt install snapd - پس از نصب Snap، برای نصب LXC و LXD از دستورات زیر استفاده کنید:برای نصب LXC:
sudo snap install lxcبرای نصب LXD:
sudo snap install lxd - پس از نصب، شما میتوانید از LXC و LXD استفاده کنید. برای اطمینان از نصب موفق، میتوانید نسخههای نصبشده را بررسی کنید:
lxc --version lxd --versionاین دستورات باید نسخههای نصبشده را نمایش دهند.
نصب LXC و LXD با استفاده از APT
اگر شما تمایل دارید از APT (مدیر بسته استاندارد Ubuntu) برای نصب LXC و LXD استفاده کنید، میتوانید بهراحتی از مخازن پیشفرض Ubuntu استفاده کنید. این روش معمولاً نسخههای بهروزتری نسبت به Snap ندارد، اما برای نصب سریع و استاندارد بسیار مناسب است.
برای نصب LXC و LXD با استفاده از APT، مراحل زیر را دنبال کنید:
- ابتدا باید مخازن سیستم خود را بهروز کنید:
sudo apt update - برای نصب LXC:
sudo apt install lxc - برای نصب LXD:
sudo apt install lxd - پس از نصب، میتوانید نسخههای نصبشده را با دستورات زیر بررسی کنید:
lxc --version lxd --version
جمعبندی
در این بخش، نحوه نصب LXC و LXD بر روی سیستمهای Ubuntu با استفاده از دو روش مختلف Snap و APT توضیح داده شد. هر دو روش نصب بهراحتی قابل انجام هستند، اما استفاده از Snap همیشه شما را به آخرین نسخه نرمافزار هدایت میکند. در حالی که نصب از طریق APT گزینهای متداولتر و استاندارد برای توزیعهای مبتنی بر Ubuntu است. بسته به نیاز خود میتوانید از هرکدام از این روشها استفاده کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”نصب LXC و LXD در Debian و CentOS” subtitle=”توضیحات کامل”]در این بخش، نحوه نصب LXC و LXD در سیستمهای Debian و CentOS بررسی میشود. این دو سیستمعامل محبوب برای استفاده از LXC و LXD نیاز به تنظیمات خاص خود دارند. در ادامه، هرکدام از این روشها را بهطور مفصل توضیح خواهیم داد.
نصب LXC و LXD در Debian
برای نصب LXC و LXD در Debian، شما میتوانید از دو روش APT و Snap استفاده کنید. در اینجا، روش نصب از طریق APT و Snap آورده شده است.
نصب LXC و LXD با استفاده از APT در Debian
- ابتدا سیستم خود را بهروز کنید:
sudo apt update sudo apt upgrade - برای نصب LXC:
sudo apt install lxc - برای نصب LXD:
sudo apt install lxd - پس از نصب، برای بررسی نسخهها از دستورات زیر استفاده کنید:
lxc --version lxd --version
نصب LXC و LXD با استفاده از Snap در Debian
برای استفاده از Snap، ابتدا باید Snapd را نصب کنید، سپس از آن برای نصب LXC و LXD استفاده کنید.
- نصب Snapd در Debian:
sudo apt install snapd - پس از نصب Snapd، برای نصب LXC و LXD:نصب LXC:
sudo snap install lxcنصب LXD:
sudo snap install lxd - پس از نصب، میتوانید نسخهها را با دستور زیر بررسی کنید:
lxc --version lxd --version
نصب LXC و LXD در CentOS
برای نصب LXC و LXD در CentOS، نیز میتوانید از دو روش DNF (مدیر بسته CentOS) و Snap استفاده کنید. بهطور کلی، برای نصب از Snap نیاز به نصب Snapd دارید، اما اگر میخواهید از DNF استفاده کنید، باید چند مرحله اضافی را طی کنید.
نصب LXC و LXD با استفاده از DNF در CentOS
- ابتدا باید مخازن مورد نیاز را نصب کنید. برای نصب مخازن EPEL در CentOS:
sudo dnf install epel-release - پس از نصب مخزن EPEL، برای نصب LXC و LXD از دستور زیر استفاده کنید:نصب LXC:
sudo dnf install lxcنصب LXD:
sudo dnf install lxd - پس از نصب، برای بررسی نسخهها از دستور زیر استفاده کنید:
lxc --version lxd --version
نصب LXC و LXD با استفاده از Snap در CentOS
برای نصب Snapd در CentOS، ابتدا باید مراحل زیر را دنبال کنید:
- نصب Snapd در CentOS:
sudo dnf install epel-release sudo dnf install snapd - پس از نصب Snapd، باید آن را فعال کنید:
sudo systemctl enable --now snapd.socket - نصب LXC و LXD از طریق Snap:نصب LXC:
sudo snap install lxcنصب LXD:
sudo snap install lxd - پس از نصب، میتوانید نسخهها را با دستور زیر بررسی کنید:
lxc --version lxd --version
جمعبندی
در این بخش، نحوه نصب LXC و LXD در سیستمهای Debian و CentOS توضیح داده شد. هر دو سیستمعامل از دو روش APT و Snap برای نصب پشتیبانی میکنند. نصب با استفاده از APT در Debian و DNF در CentOS استاندارد و متداول است، در حالی که استفاده از Snap به شما این امکان را میدهد که بهروزرسانیهای خودکار و نسخههای جدیدتر را دریافت کنید. انتخاب روش مناسب بسته به نیاز و ترجیحات شما خواهد بود.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”بررسی تفاوت نسخههای LXD (snap vs apt)” subtitle=”توضیحات کامل”]در این بخش، به بررسی تفاوتهای اصلی میان نسخههای LXD که از طریق Snap و APT نصب میشوند خواهیم پرداخت. این دو روش نصب از نظر عملکرد و ویژگیها تفاوتهایی دارند که باید در هنگام انتخاب مناسبترین روش نصب برای سیستم خود به آنها توجه کنید.
1. نسخههای موجود در Snap vs APT
- Snap:
- نسخههای Snap معمولاً جدیدترین نسخههای LXD را ارائه میدهند. این نسخهها معمولاً بهطور خودکار بهروزرسانی میشوند و همواره جدیدترین ویژگیها و اصلاحات امنیتی را دارند.
- از آنجایی که Snap بستههای خود را بهطور مستقل از سیستم مدیریت بستههای سیستمعامل (مانند APT) نصب میکند، بهروزرسانیهای Snap بهطور مداوم و خودکار انجام میشوند.
- در نتیجه، اگر شما به جدیدترین ویژگیها و بهروزرسانیها نیاز دارید، استفاده از Snap پیشنهاد میشود.
- APT:
- نسخههای APT که از مخازن رسمی سیستمعامل مانند Debian و Ubuntu نصب میشوند معمولاً بهروزرسانیهایی را که از سوی تیم توزیع سیستمعامل منتشر میشوند دریافت میکنند.
- این نسخهها ممکن است کمی قدیمیتر باشند، زیرا در فرآیند ارزیابی و تست برای تطابق با نسخههای پایدار سیستمعامل زمان بیشتری صرف میشود.
- این روش مناسبتر برای کاربرانی است که نیاز به پایداری و ثبات در سیستم خود دارند و نمیخواهند با ویژگیهای جدیدتری که ممکن است مشکلاتی ایجاد کنند، روبرو شوند.
2. بهروزرسانیها و مدیریت بسته
- Snap:
- Snap بهطور خودکار بهروزرسانیهای خود را نصب میکند. این ویژگی به این معنی است که LXD همیشه در جدیدترین نسخه در دسترس خواهد بود.
- اما این امکان وجود دارد که بهروزرسانیها خودکار نباشند، زیرا Snap به کاربر این اجازه را میدهد که بهروزرسانیها را مدیریت کند، ولی بهطور کلی این بهروزرسانیها در پسزمینه انجام میشوند.
- APT:
- APT بهروزرسانیها را از مخازن توزیع خود دریافت میکند و معمولاً بهروزرسانیها پس از انتشار یک نسخه جدید توسط تیم توزیع منتشر میشوند.
- در نتیجه، اگر شما از APT استفاده کنید، باید بهطور دورهای سیستم خود را بهروزرسانی کنید تا نسخههای جدیدتر LXD را دریافت کنید.
3. وابستگیها و پیکربندیها
- Snap:
- در Snap، بستهها بهصورت خودمختار نصب میشوند و تمامی وابستگیهای مورد نیاز برای LXD به همراه آن نصب میشوند. به این معنا که نسخههای نصبشده از Snap معمولاً از سیستمعامل مستقل هستند و ممکن است نیازی به وابستگیهای سیستمعامل نداشته باشند.
- این ویژگی باعث میشود که Snap سریعتر و سادهتر نصب شود، اما از طرفی ممکن است کمی فضای بیشتری از سیستم شما مصرف کند.
- APT:
- بستههای APT برای نصب وابستگیهای سیستمعامل به آن وابسته هستند. این به این معناست که LXD ممکن است برای نصب نیاز به پیکربندی و نصب سایر بستهها از مخازن توزیع داشته باشد.
- به همین دلیل، اگر از APT برای نصب استفاده کنید، ممکن است بهطور کامل با سیستمعامل خود هماهنگتر باشد، ولی این ممکن است زمان بیشتری برای نصب و پیکربندی نیاز داشته باشد.
4. پشتیبانی و ثبات
- Snap:
- بهروزرسانیهای Snap ممکن است در برخی موارد با تغییرات بیشتری در ویژگیها همراه باشند و ممکن است در نسخههای جدید مشکلاتی ایجاد کنند. به همین دلیل، Snap برای کاربران پیشرفته که به ویژگیهای جدید و آخرین نسخهها نیاز دارند مناسب است.
- APT:
- نسخههای APT معمولاً از سوی تیم توزیع لینوکس به دقت بررسی میشوند تا کاملاً پایدار باشند. این به این معناست که کاربران توزیعهایی که به پایداری اهمیت میدهند، مانند Debian یا Ubuntu LTS، ممکن است ترجیح دهند که از نسخههای APT استفاده کنند.
5. نصب و پیکربندی
- Snap:
- نصب Snap ساده است و نیاز به پیکربندی زیادی ندارد. میتوانید بهسادگی از دستور زیر برای نصب LXD استفاده کنید:
sudo snap install lxd - پس از نصب، شما میتوانید از دستور زیر برای بررسی وضعیت LXD استفاده کنید:
lxd --version
- نصب Snap ساده است و نیاز به پیکربندی زیادی ندارد. میتوانید بهسادگی از دستور زیر برای نصب LXD استفاده کنید:
- APT:
- نصب LXD از طریق APT ممکن است نیاز به اضافه کردن مخازن خاص به سیستم شما داشته باشد. پس از نصب، ممکن است نیاز به پیکربندی بیشتر باشد تا سیستم بهطور کامل راهاندازی شود.نصب از طریق APT:
sudo apt update sudo apt install lxd - همچنین برای بررسی نسخه نصبشده از دستور زیر استفاده کنید:
lxd --version
- نصب LXD از طریق APT ممکن است نیاز به اضافه کردن مخازن خاص به سیستم شما داشته باشد. پس از نصب، ممکن است نیاز به پیکربندی بیشتر باشد تا سیستم بهطور کامل راهاندازی شود.نصب از طریق APT:
جمعبندی
در این بخش، تفاوتهای بین نسخههای LXD نصبشده از طریق Snap و APT بررسی شد. نسخههای Snap بهطور معمول جدیدترین ویژگیها و بهروزرسانیها را ارائه میدهند و نصب آنها سریع و ساده است، اما ممکن است با برخی مشکلات سازگاری روبرو شوید. از سوی دیگر، نسخههای APT معمولاً بهطور دقیقتری توسط تیم توزیع بررسی شده و در نتیجه برای کاربرانی که به پایداری سیستم نیاز دارند مناسبتر هستند. انتخاب روش مناسب بستگی به نیاز شما برای بهروزرسانیهای سریع و جدید یا ثبات سیستم خواهد داشت.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 3. بررسی وضعیت سرویسها پس از نصب”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”فعالسازی و بررسی وضعیت daemonهای LXC و LXD” subtitle=”توضیحات کامل”]در این بخش، به بررسی چگونگی فعالسازی و بررسی وضعیت daemonهای LXC و LXD خواهیم پرداخت. این daemonها مسئول اجرای کانتینرها هستند و در فرآیندهای مختلفی از جمله مدیریت کانتینرها، اتصال به شبکه و ذخیرهسازی دادهها نقش دارند. همچنین، بررسی وضعیت این daemonها به شما کمک میکند تا از صحت عملکرد آنها اطمینان حاصل کنید.
1. فعالسازی daemonهای LXC و LXD
برای اینکه LXC و LXD بهطور صحیح در سیستم شما کار کنند، لازم است daemonهای مربوطه فعال شوند. این daemonها معمولاً بهطور خودکار با نصب LXC و LXD نصب میشوند، اما ممکن است در برخی موارد نیاز به فعالسازی دستی داشته باشند.
- فعالسازی daemon LXC:LXC بهطور پیشفرض از طریق systemd مدیریت میشود. شما میتوانید با استفاده از دستور زیر، وضعیت daemon LXC را بررسی کنید:
sudo systemctl status lxcبرای فعالسازی خودکار daemon LXC پس از راهاندازی سیستم، دستور زیر را اجرا کنید:
sudo systemctl enable lxcبرای شروع بهصورت دستی daemon LXC، از دستور زیر استفاده کنید:
sudo systemctl start lxc - فعالسازی daemon LXD:برای LXD، مانند LXC، از systemd برای مدیریت daemon استفاده میشود. شما میتوانید با دستور زیر وضعیت daemon LXD را بررسی کنید:
sudo systemctl status lxdبرای فعالسازی خودکار daemon LXD پس از راهاندازی سیستم، دستور زیر را اجرا کنید:
sudo systemctl enable lxdبرای شروع بهصورت دستی daemon LXD، از دستور زیر استفاده کنید:
sudo systemctl start lxd
2. بررسی وضعیت daemonهای LXC و LXD
برای بررسی وضعیت daemonهای LXC و LXD، از ابزارهای مختلفی میتوان استفاده کرد که به شما کمک میکنند تا از فعالیت صحیح این daemonها مطمئن شوید.
- بررسی وضعیت daemon LXC:برای بررسی وضعیت LXC بهصورت کلی، میتوانید از دستور زیر استفاده کنید:
sudo systemctl status lxcاین دستور اطلاعاتی در مورد وضعیت daemon LXC، مانند اینکه آیا در حال اجرا است یا خیر، به شما میدهد. اگر daemon در حال اجرا نباشد، میتوانید از دستور
systemctl start lxcبرای شروع آن استفاده کنید. - بررسی وضعیت daemon LXD:برای بررسی وضعیت LXD نیز میتوانید از دستور مشابه زیر استفاده کنید:
sudo systemctl status lxdهمچنین، برای اطمینان از کارکرد صحیح LXD میتوانید از دستورات LXD استفاده کنید. برای بررسی اطلاعات پایه در مورد وضعیت سیستم LXD، دستور زیر مفید است:
lxd infoاین دستور اطلاعات مفصلی در مورد وضعیت LXD، مانند نسخه نصبشده، وضعیت شبکهها و ذخیرهسازی، به شما میدهد.
- بررسی وضعیت کانتینرهای LXC:برای بررسی وضعیت کانتینرهای LXC، میتوانید از دستور زیر استفاده کنید:
sudo lxc listاین دستور لیستی از تمامی کانتینرهای LXC به همراه وضعیت آنها (در حال اجرا یا متوقف) به شما نمایش میدهد.
- بررسی وضعیت کانتینرهای LXD:مشابه LXC، برای بررسی وضعیت کانتینرهای LXD میتوانید از دستور زیر استفاده کنید:
sudo lxc listاین دستور لیستی از تمامی کانتینرهای LXD و وضعیت آنها را نمایش میدهد. همچنین برای اطلاعات بیشتر در مورد هر کانتینر خاص، میتوانید از دستور زیر استفاده کنید:
lxc info <container-name>
3. لاگها و خطاهای daemonهای LXC و LXD
لاگها میتوانند کمک زیادی به شناسایی مشکلات احتمالی در daemonهای LXC و LXD کنند. برای مشاهده لاگها از systemd میتوانید از دستور زیر استفاده کنید:
- برای مشاهده لاگهای LXC:
sudo journalctl -u lxc - برای مشاهده لاگهای LXD:
sudo journalctl -u lxd
این دستورات شما را قادر میسازند تا پیامهای لاگ مربوط به هر daemon را مشاهده کنید. اگر مشکلی در سیستم وجود داشته باشد، این لاگها معمولاً اطلاعات مفیدی را برای رفع مشکل ارائه میدهند.
جمعبندی
در این بخش، نحوه فعالسازی و بررسی وضعیت daemonهای LXC و LXD توضیح داده شد. فعالسازی این daemonها از طریق systemd انجام میشود و شما میتوانید وضعیت آنها را با استفاده از دستوراتی مانند systemctl status بررسی کنید. همچنین، برای بررسی وضعیت کانتینرهای LXC و LXD میتوانید از دستور lxc list استفاده کنید. در نهایت، بررسی لاگهای سیستم از طریق journalctl به شما کمک میکند تا مشکلات احتمالی را شناسایی و رفع کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تست اجرای اولیه دستورات پایه” subtitle=”توضیحات کامل”]در این بخش، به تست اجرای اولیه دستورات پایه برای LXC و LXD خواهیم پرداخت. این دستورات به شما کمک میکنند تا از نصب صحیح و پیکربندی صحیح سیستمهای LXC و LXD اطمینان حاصل کنید و بتوانید کانتینرها را بهراحتی مدیریت کنید.
1. تست دستورات LXC
- لیست کردن کانتینرهای LXC:برای لیست کردن تمامی کانتینرهای LXC که در سیستم شما وجود دارند، از دستور زیر استفاده کنید:
sudo lxc listاین دستور باید لیستی از کانتینرها را نمایش دهد، حتی اگر هیچ کانتینری در حال حاضر در سیستم وجود نداشته باشد.
- ایجاد یک کانتینر جدید LXC:برای تست توانایی ایجاد یک کانتینر جدید، از دستور زیر استفاده کنید:
sudo lxc launch ubuntu:20.04 my-containerدر این دستور:
ubuntu:20.04تصویری است که برای ساخت کانتینر استفاده میشود.my-containerنام کانتینری است که ایجاد خواهد شد.
پس از اجرای این دستور، کانتینر باید ایجاد شده و بهطور خودکار شروع به کار کند.
- دسترسی به کانتینر LXC:پس از ایجاد کانتینر، میتوانید به آن وارد شوید و محیط آن را مشاهده کنید:
sudo lxc exec my-container -- /bin/bashاین دستور شما را به محیط bash کانتینر هدایت میکند.
- متوقف کردن کانتینر LXC:برای متوقف کردن یک کانتینر فعال، از دستور زیر استفاده کنید:
sudo lxc stop my-container - حذف کانتینر LXC:پس از متوقف کردن کانتینر، میتوانید آن را حذف کنید:
sudo lxc delete my-container
2. تست دستورات LXD
- لیست کردن کانتینرهای LXD:برای لیست کردن تمامی کانتینرهای LXD، دستور زیر را اجرا کنید:
sudo lxc listاین دستور مشابه دستور LXC است و کانتینرهای موجود در LXD را نمایش میدهد.
- ایجاد یک کانتینر جدید LXD:برای تست ایجاد یک کانتینر جدید در LXD، از دستور زیر استفاده کنید:
sudo lxc launch ubuntu:20.04 my-lxd-containerمشابه دستورات LXC، این دستور یک کانتینر از تصویر ubuntu:20.04 ایجاد میکند و آن را با نام
my-lxd-containerراهاندازی میکند. - دسترسی به کانتینر LXD:مشابه LXC، برای دسترسی به محیط کانتینر LXD از دستور زیر استفاده کنید:
sudo lxc exec my-lxd-container -- /bin/bashبا این دستور، شما وارد محیط bash کانتینر LXD میشوید.
- متوقف کردن کانتینر LXD:برای متوقف کردن کانتینر LXD، از دستور زیر استفاده کنید:
sudo lxc stop my-lxd-container - حذف کانتینر LXD:برای حذف کانتینر LXD پس از متوقف کردن آن، از دستور زیر استفاده کنید:
sudo lxc delete my-lxd-container
3. بررسی وضعیت کانتینرها
برای بررسی وضعیت کانتینرها در سیستم خود، میتوانید از دستور زیر استفاده کنید:
- برای LXC:
sudo lxc list - برای LXD:
sudo lxc list
هر دو دستور اطلاعات مربوط به کانتینرهای موجود، وضعیت آنها (در حال اجرا یا متوقف)، و سایر اطلاعات مرتبط با کانتینرها را نمایش میدهند.
4. استفاده از دستورات کمکی LXC و LXD
برای دریافت اطلاعات بیشتر در مورد نحوه استفاده از دستورات LXC و LXD، میتوانید از دستورات کمکی زیر استفاده کنید:
- برای LXC:
lxc --help - برای LXD:
lxc --help
این دستورات اطلاعات کاملی درباره دستورات مختلف موجود و نحوه استفاده از آنها را به شما ارائه میدهند.
جمعبندی
در این بخش، نحوه تست اجرای اولیه دستورات پایه برای LXC و LXD توضیح داده شد. شما میتوانید با استفاده از دستورات ساده مانند lxc list و lxc launch کانتینرهای جدید ایجاد کنید و وضعیت آنها را بررسی کنید. همچنین برای دسترسی به محیط کانتینر از دستور lxc exec استفاده میشود. تمامی این دستورات به شما کمک میکنند تا از صحت عملکرد نصب و پیکربندی LXC و LXD اطمینان حاصل کنید و بتوانید بهراحتی کانتینرها را مدیریت کنید.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 4. راهاندازی اولیه LXD با دستور lxd init”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”پیکربندی Storage (ZFS، dir، btrfs، LVM)” subtitle=”توضیحات کامل”]در این بخش از آموزش های ارائه شده توسط فرازنتورک، به بررسی پیکربندی انواع سیستمهای ذخیرهسازی مختلف در LXC و LXD خواهیم پرداخت. این سیستمهای ذخیرهسازی شامل ZFS، dir، btrfs، LVM هستند که هرکدام ویژگیهای خاص خود را دارند و برای نیازهای مختلف در پروژههای کانتینری مورد استفاده قرار میگیرند.
1. پیکربندی سیستم ذخیرهسازی dir (پیشفرض)
سیستم ذخیرهسازی dir بهطور پیشفرض در LXD استفاده میشود و برای ذخیرهسازی دادهها از دایرکتوریهای معمولی در سیستم فایل استفاده میکند.
- نصب LXD (در صورت نیاز):اگر هنوز LXD را نصب نکردهاید، میتوانید آن را با استفاده از دستور زیر نصب کنید:
sudo apt install lxd - پیکربندی ذخیرهسازی dir:بهطور پیشفرض LXD از dir بهعنوان سیستم ذخیرهسازی استفاده میکند. برای مشاهده وضعیت آن میتوانید از دستور زیر استفاده کنید:
sudo lxd storage listبرای تغییر سیستم ذخیرهسازی به dir، دستور زیر را وارد کنید:
sudo lxd storage create default dirاین دستور یک storage pool به نام
defaultاز نوع dir ایجاد میکند. dir بهسادگی از دایرکتوریهای معمولی در سیستم استفاده میکند.
2. پیکربندی سیستم ذخیرهسازی ZFS
ZFS یک سیستم ذخیرهسازی قدرتمند است که از ویژگیهای پیشرفتهای مانند deduplication، compression، و snapshot پشتیبانی میکند. این سیستم ذخیرهسازی برای محیطهای کانتینری که نیاز به کارایی بالا و ذخیرهسازی ایمن دارند، بسیار مناسب است.
- نصب ZFS:برای نصب ZFS در سیستم، از دستور زیر استفاده کنید:
sudo apt install zfsutils-linux - ایجاد یک pool ذخیرهسازی با ZFS:پس از نصب ZFS، میتوانید یک storage pool جدید از نوع ZFS ایجاد کنید. فرض کنید دیسک
/dev/sdbبهعنوان دیسک ذخیرهسازی انتخاب شده است:sudo zpool create lxd_pool /dev/sdbاین دستور یک pool ذخیرهسازی به نام
lxd_poolایجاد میکند که از دیسک/dev/sdbاستفاده میکند. - ایجاد یک storage pool در LXD با استفاده از ZFS:برای ایجاد یک storage pool در LXD از نوع ZFS، از دستور زیر استفاده کنید:
sudo lxd storage create default zfs source=lxd_poolاین دستور یک pool ذخیرهسازی به نام
defaultاز نوع ZFS در LXD ایجاد میکند که به poollxd_poolمتصل است. - مشاهده وضعیت ZFS:برای مشاهده وضعیت pool ذخیرهسازی ZFS، از دستور زیر استفاده کنید:
sudo zpool status
3. پیکربندی سیستم ذخیرهسازی btrfs
btrfs یکی دیگر از سیستمهای ذخیرهسازی مدرن است که ویژگیهایی مانند snapshot و volume management را ارائه میدهد. این سیستم ذخیرهسازی مناسب برای محیطهایی است که نیاز به کارایی بالا و قابلیتهای مدیریتی پیشرفته دارند.
- نصب btrfs:برای نصب btrfs در سیستم، از دستور زیر استفاده کنید:
sudo apt install btrfs-progs - ایجاد یک pool ذخیرهسازی با btrfs:پس از نصب btrfs، میتوانید یک pool ذخیرهسازی جدید ایجاد کنید. بهعنوان مثال، اگر دیسک
/dev/sdcرا برای ایجاد pool انتخاب کردهاید، دستور زیر را اجرا کنید:sudo mkfs.btrfs /dev/sdc - ایجاد یک storage pool در LXD با استفاده از btrfs:پس از فرمت کردن دیسک با btrfs، میتوانید یک storage pool در LXD ایجاد کنید:
sudo lxd storage create default btrfs source=/dev/sdcاین دستور یک pool ذخیرهسازی به نام
defaultاز نوع btrfs ایجاد میکند و از دیسک/dev/sdcبهعنوان منبع استفاده میکند. - مشاهده وضعیت btrfs:برای مشاهده وضعیت btrfs، از دستور زیر استفاده کنید:
sudo btrfs filesystem df /dev/sdc
4. پیکربندی سیستم ذخیرهسازی LVM
LVM (Logical Volume Management) یک روش پیشرفته برای مدیریت فضای ذخیرهسازی است که به شما اجازه میدهد فضای دیسک را بهصورت پویا مدیریت کنید. این سیستم ذخیرهسازی برای محیطهایی که نیاز به انعطافپذیری بیشتر در مدیریت فضای ذخیرهسازی دارند، مناسب است.
- نصب LVM:برای نصب ابزارهای مورد نیاز LVM در سیستم، از دستور زیر استفاده کنید:
sudo apt install lvm2 - ایجاد یک volume group (VG):ابتدا باید یک volume group (VG) ایجاد کنید. فرض کنید دیسک
/dev/sddرا انتخاب کردهاید:sudo pvcreate /dev/sdd sudo vgcreate lxd_vg /dev/sdd - ایجاد یک logical volume (LV):بعد از ایجاد volume group، یک logical volume (LV) ایجاد میکنید:
sudo lvcreate -n lxd_lv -L 20G lxd_vgاین دستور یک logical volume به نام
lxd_lvبه اندازه ۲۰ گیگابایت در volume grouplxd_vgایجاد میکند. - ایجاد یک storage pool در LXD با استفاده از LVM:برای ایجاد یک pool ذخیرهسازی در LXD با استفاده از LVM، از دستور زیر استفاده کنید:
sudo lxd storage create default lvm source=/dev/lxd_vg/lxd_lvاین دستور یک pool ذخیرهسازی به نام
defaultاز نوع LVM ایجاد میکند و از logical volumelxd_lvاستفاده میکند.
جمعبندی
در این بخش، به بررسی نحوه پیکربندی چهار نوع سیستم ذخیرهسازی مختلف در LXD پرداخته شد: dir، ZFS، btrfs و LVM. هرکدام از این سیستمها ویژگیهای خاص خود را دارند و برای سناریوهای مختلف میتوانند انتخاب مناسبی باشند. از جمله ویژگیهای کلیدی که در این پیکربندیها مشاهده کردید، قابلیتهای مدیریتی و انعطافپذیری است که در هر سیستم ذخیرهسازی ارائه میشود. پس از ایجاد و پیکربندی هر سیستم ذخیرهسازی، میتوانید با استفاده از دستورات مربوطه وضعیت آن را بررسی کرده و بهراحتی از آن در پروژههای کانتینری خود استفاده کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”پیکربندی Network (bridge داخلی، اتصال به LAN)” subtitle=”توضیحات کامل”]در این بخش به نحوه پیکربندی شبکه در LXC و LXD خواهیم پرداخت. پیکربندی شبکه بهویژه برای ایجاد ارتباط بین کانتینرها و همچنین اتصال کانتینرها به شبکه LAN (Local Area Network) اهمیت زیادی دارد. دو روش رایج برای پیکربندی شبکه در این محیطها عبارتاند از: bridge داخلی و اتصال به LAN.
1. پیکربندی شبکه Bridge داخلی
شبکههای bridge به کانتینرها این امکان را میدهند که از یک رابط شبکه مجازی مشترک استفاده کنند. این نوع پیکربندی برای ایجاد شبکههای مجازی بین کانتینرها و یا حتی ایجاد ارتباط میان کانتینرها و شبکه خارجی (LAN یا اینترنت) مناسب است.
- ایجاد یک bridge داخلی در LXD:ابتدا، یک bridge داخلی برای اتصال کانتینرها به یکدیگر یا به اینترنت نیاز است. برای ایجاد این bridge، از دستور زیر استفاده میکنیم:
sudo lxd network create lxdbr0 bridgeاین دستور یک شبکه به نام
lxdbr0از نوع bridge ایجاد میکند. - تنظیمات bridge:حالا که یک bridge به نام
lxdbr0ایجاد شده است، میتوانیم تنظیمات مختلفی را برای آن اعمال کنیم. برای مشاهده تنظیمات فعلی bridge میتوان از دستور زیر استفاده کرد:sudo lxd network show lxdbr0برای تغییر پیکربندی bridge میتوانید از دستور زیر استفاده کنید. بهعنوان مثال، برای غیرفعال کردن DHCP و تنظیم آدرس IP به صورت دستی:
sudo lxd network set lxdbr0 ipv4.address 10.10.10.1/24 sudo lxd network set lxdbr0 ipv4.dhcp falseاین تنظیمات به LXD دستور میدهند که آدرسهای IPv4 را در رنج
10.10.10.1/24بهصورت دستی اختصاص دهد و سرویس DHCP را غیرفعال کند. - اتصال کانتینر به bridge:برای اتصال یک کانتینر به شبکه
lxdbr0، از دستور زیر استفاده کنید:sudo lxd launch ubuntu:20.04 my-container -n lxdbr0در این دستور، کانتینر
my-containerبه شبکهlxdbr0متصل خواهد شد. - مشاهده وضعیت شبکه:برای مشاهده وضعیت شبکههای موجود در LXD و اطلاعات مربوط به bridgeها، از دستور زیر استفاده کنید:
sudo lxd network list
2. اتصال به LAN (شبکه محلی)
برای اتصال کانتینر به یک شبکه محلی یا LAN، نیاز به یک bridge خواهید داشت که به شبکه محلی متصل باشد. این کار به کانتینرها این امکان را میدهد که در شبکه LAN موجود، مانند یک دستگاه واقعی، عمل کنند.
- ایجاد Bridge برای اتصال به LAN:فرض کنید که شبکه LAN شما از طریق رابط
eth0در دسترس است. برای ایجاد یک bridge که به شبکه LAN متصل باشد، ابتدا باید bridge را بسازید:sudo lxd network create lan-bridge bridgeسپس باید رابط شبکه
eth0را به این bridge متصل کنید. برای انجام این کار از دستور زیر استفاده کنید:sudo lxd network set lan-bridge bridge.external_interfaces eth0با این دستور، bridge
lan-bridgeبه رابط شبکهeth0متصل میشود. - پیکربندی IP برای اتصال به LAN:پس از اینکه bridge ساخته شد و به شبکه LAN متصل شد، میتوانید برای کانتینرها آدرسهای IP از شبکه LAN بهصورت DHCP یا دستی اختصاص دهید. بهعنوان مثال، برای غیرفعال کردن DHCP و تنظیم آدرس IP به صورت دستی، از دستورات زیر استفاده میکنیم:
sudo lxd network set lan-bridge ipv4.address 192.168.1.1/24 sudo lxd network set lan-bridge ipv4.dhcp false - اتصال کانتینر به LAN:پس از ایجاد bridge و پیکربندی آن، میتوانید کانتینرها را به شبکه LAN متصل کنید. برای این کار، از دستور زیر استفاده کنید:
sudo lxd launch ubuntu:20.04 my-container -n lan-bridgeبا این دستور، کانتینر
my-containerبه شبکه LAN متصل خواهد شد و قادر به ارتباط با سایر دستگاههای موجود در شبکه خواهد بود. - مشاهده وضعیت شبکه LAN:برای مشاهده وضعیت شبکه
lan-bridgeو جزئیات اتصال آن به LAN، میتوانید از دستور زیر استفاده کنید:sudo lxd network show lan-bridge
3. بررسی وضعیت شبکه و کانتینرها
بعد از پیکربندی شبکه، میتوانید وضعیت کانتینرها و اتصال آنها به شبکهها را بررسی کنید. برای این کار از دستورات زیر استفاده کنید:
- نمایش وضعیت کانتینرها:برای نمایش وضعیت کانتینرهای در حال اجرا و اطلاعات شبکه مربوط به آنها، از دستور زیر استفاده کنید:
sudo lxc list - نمایش تنظیمات شبکه کانتینر:برای مشاهده تنظیمات شبکه مربوط به هر کانتینر، دستور زیر را وارد کنید:
sudo lxc network list
جمعبندی
در این بخش، نحوه پیکربندی شبکه در LXD و LXC از طریق استفاده از bridge داخلی و اتصال به شبکه LAN بررسی شد. پیکربندی bridge داخلی به شما این امکان را میدهد که کانتینرها را در یک شبکه مجازی از یکدیگر جدا کرده و حتی آنها را به اینترنت یا شبکههای دیگر متصل کنید. همچنین، اتصال به شبکه LAN به کانتینرها این امکان را میدهد که بهطور مستقیم در شبکه محلی فعالیت کنند و به سایر دستگاهها در آن شبکه متصل شوند. این قابلیتها برای پیادهسازی انواع سناریوهای شبکهای در پروژههای کانتینری و محیطهای مبتنی بر LXD و LXC بسیار مفید و کاربردی هستند.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”ایجاد اولین پروفایل پیشفرض” subtitle=”توضیحات کامل”]پروفایلها در LXD بهعنوان یک ابزار برای مدیریت پیکربندیهای مختلف استفاده میشوند و به شما این امکان را میدهند که تنظیمات شبکه، ذخیرهسازی، و منابع سیستم را برای کانتینرها یا ماشینهای مجازی بهصورت مرکزی مدیریت کنید. این پروفایلها میتوانند بهطور ویژه برای هر کانتینر یا ماشین مجازی تنظیم شوند و از آنها میتوان بهعنوان تنظیمات پایه برای هر نوع کانتینر یا ماشین مجازی استفاده کرد.
در این بخش، نحوه ایجاد اولین پروفایل پیشفرض در LXD را بررسی میکنیم.
1. مشاهده پروفایلهای موجود
برای مشاهده پروفایلهای پیشفرض موجود در سیستم خود، میتوانید از دستور زیر استفاده کنید:
sudo lxc profile list
این دستور، لیستی از پروفایلهای موجود را نشان خواهد داد. در این مرحله، پروفایل پیشفرض بهطور معمول default خواهد بود که LXD بهصورت پیشفرض برای تمام کانتینرها و ماشینهای مجازی جدید ایجاد میکند.
2. ایجاد پروفایل جدید
برای ایجاد اولین پروفایل پیشفرض، ابتدا باید از دستور lxc profile create استفاده کنید. بهطور معمول، این پروفایل میتواند شامل تنظیمات شبکه، ذخیرهسازی، و منابع سیستم باشد.
برای ایجاد یک پروفایل جدید به نام myprofile از دستور زیر استفاده کنید:
sudo lxc profile create myprofile
این دستور یک پروفایل به نام myprofile ایجاد میکند که میتوانید تنظیمات مختلف را در آن اعمال کنید.
3. پیکربندی پروفایل
حالا که پروفایل خود را ایجاد کردهاید، میتوانید تنظیمات مختلفی را به آن اضافه کنید. بهعنوان مثال، میتوانید تنظیمات شبکه را برای پروفایل خود پیکربندی کنید.
برای اضافه کردن تنظیمات به پروفایل، از دستور lxc profile edit استفاده کنید:
sudo lxc profile edit myprofile
این دستور ویرایشگر پیشفرض را باز میکند (معمولاً YAML) که در آن میتوانید تنظیمات مختلف شبکه، منابع و ذخیرهسازی را وارد کنید. بهعنوان مثال، برای اضافه کردن یک شبکه داخلی به پروفایل، میتوانید تنظیمات زیر را بهطور دستی در فایل YAML وارد کنید:
config: {}
description: My first profile
devices:
eth0:
nictype: bridged
parent: lxdbr0
type: nic
name: myprofile
در اینجا، eth0 بهعنوان رابط شبکه در پروفایل تنظیم شده و به شبکه lxdbr0 که قبلاً ایجاد کردهایم متصل میشود.
4. انتساب پروفایل به کانتینر
پس از ایجاد و پیکربندی پروفایل، میتوانید آن را به یک کانتینر جدید اختصاص دهید. برای این کار از دستور زیر استفاده میکنیم:
sudo lxc launch ubuntu:20.04 mycontainer -p myprofile
در این دستور:
ubuntu:20.04نام الگوی سیستم عامل است.mycontainerنام کانتینر است.-p myprofileبهمعنی این است که پروفایلmyprofileبه کانتینر اختصاص داده شود.
5. مشاهده پروفایلهای کانتینر
برای مشاهده پروفایلهایی که به کانتینر اختصاص داده شده است، میتوانید از دستور زیر استفاده کنید:
sudo lxc config show mycontainer
این دستور تمامی تنظیمات مربوط به کانتینر mycontainer را نمایش میدهد که شامل پروفایلهایی است که به آن اختصاص داده شده است.
6. ویرایش پروفایلهای پیشفرض
در صورتی که بخواهید پروفایل پیشفرض (که معمولاً default نام دارد) را ویرایش کنید و آن را به پروفایل جدید خود تغییر دهید، میتوانید از دستور زیر استفاده کنید:
sudo lxc profile edit default
در اینجا میتوانید تنظیمات شبکه، ذخیرهسازی، و سایر منابع را بهطور دلخواه تغییر دهید.
جمعبندی
در این بخش، نحوه ایجاد اولین پروفایل پیشفرض در LXD توضیح داده شد. پروفایلها ابزارهای قدرتمندی برای مدیریت تنظیمات شبکه، ذخیرهسازی، و منابع سیستم در LXD هستند. با استفاده از پروفایلها، میتوان تنظیمات را برای کانتینرها بهطور مرکزی و یکپارچه مدیریت کرد و به راحتی آنها را به کانتینرهای جدید اختصاص داد. این روش باعث میشود که مدیریت کانتینرها سادهتر و انعطافپذیرتر باشد.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 5. مسیر فایلهای پیکربندی و ساختار دایرکتوریها”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”ساختار فایلها در مسیر /etc/lxd, /var/snap/lxd, /var/lib/lxc” subtitle=”توضیحات کامل”]در هنگام کار با LXD و LXC، شما با مسیرهای مختلفی روبهرو خواهید شد که هرکدام وظایف خاصی دارند. این مسیرها شامل فایلهای پیکربندی، دادهها، و فایلهای سیستم کانتینرها هستند. در این بخش، به بررسی ساختار فایلها در مسیرهای مهم /etc/lxd, /var/snap/lxd, و /var/lib/lxc خواهیم پرداخت.
1. مسیر /etc/lxd
مسیر /etc/lxd شامل فایلهای پیکربندی LXD است که در آن تنظیمات سیستم مدیریت کانتینر، پروفایلها، و سایر پیکربندیهای مربوط به سیستم LXD ذخیره میشود. این مسیر معمولاً شامل فایلهای زیر است:
- lxd.conf: این فایل تنظیمات عمومی و پیکربندیهای مرتبط با LXD را نگه میدارد.
- profile.yaml: فایلهایی که پروفایلهای مختلف کانتینرها را در بر دارند. هر پروفایل تنظیمات خاصی برای کانتینرها، مانند شبکه، منابع و ذخیرهسازی دارد.
- config: فایلهایی که تنظیمات مختلف برای daemon LXD را ذخیره میکنند. این فایل شامل تنظیمات پیشفرض، پیکربندیهای شبکه و ذخیرهسازی، و موارد مشابه است.
نمونه ساختار فایلها در /etc/lxd:
/etc/lxd/
├── lxd.conf
├── config
└── profiles/
└── default.yaml
- lxd.conf: تنظیمات اصلی مربوط به نحوه کار LXD را نگه میدارد.
- profiles/default.yaml: پروفایل پیشفرض کانتینرها.
2. مسیر /var/snap/lxd
اگر از snap برای نصب LXD استفاده کرده باشید، مسیر /var/snap/lxd محل نصب و فایلهای پیکربندی مربوط به نسخه snap LXD خواهد بود. این مسیر شامل تمام دادهها و تنظیمات مربوط به LXD که توسط snap مدیریت میشود است. برخلاف نصب معمولی LXD، این نسخه بهطور خاص در مسیرهایی که توسط snap مدیریت میشوند قرار میگیرد.
فایلهای موجود در /var/snap/lxd:
- /var/snap/lxd/common/: شامل تنظیمات و فایلهای پیکربندی برای LXD.
- /var/snap/lxd/current/: این مسیر شامل نسخه جاری نصبشده از LXD است.
- /var/snap/lxd/current/daemon/: تنظیمات مربوط به daemon LXD.
نمونه ساختار فایلها در /var/snap/lxd:
/var/snap/lxd/
├── current/
│ ├── daemon/
│ ├── common/
│ └── lxd.socket
└── var/
- daemon: شامل فایلهای مربوط به فرآیند daemon LXD.
- common: شامل تنظیمات و دادههای عمومی LXD است.
- lxd.socket: فایل مربوط به ارتباطات بین daemon و سایر بخشها.
3. مسیر /var/lib/lxc
مسیر /var/lib/lxc مخصوص LXC است و بهطور خاص برای ذخیرهسازی دادهها و پیکربندیهای مربوط به کانتینرهای LXC استفاده میشود. این مسیر شامل تمام اطلاعاتی است که مربوط به کانتینرهای فعال و غیرفعال، تصاویر و پیکربندیهای کانتینرها است.
فایلهای موجود در /var/lib/lxc:
- /var/lib/lxc/: هر کانتینر بهصورت یک دایرکتوری جداگانه در این مسیر ایجاد میشود. درون این دایرکتوری اطلاعات مربوط به کانتینر ذخیره میشود.
- config: فایل پیکربندی کانتینر که تنظیمات خاص کانتینر، مانند تنظیمات شبکه و منابع را مشخص میکند.
- rootfs: این دایرکتوری شامل فایل سیستم اصلی کانتینر است که مشابه به یک سیستم فایل معمولی عمل میکند.
- logs: در این دایرکتوری، فایلهای مربوط به لاگها و فعالیتهای کانتینر ذخیره میشود.
نمونه ساختار فایلها در /var/lib/lxc:
/var/lib/lxc/
├── mycontainer/
│ ├── config
│ ├── rootfs/
│ └── logs/
└── anothercontainer/
├── config
├── rootfs/
└── logs/
- config: فایل پیکربندی کانتینر.
- rootfs: فایل سیستم کانتینر.
- logs: فایلهای لاگ مربوط به فعالیتهای کانتینر.
جمعبندی
در این بخش، ساختار فایلها در سه مسیر مهم /etc/lxd, /var/snap/lxd, و /var/lib/lxc بررسی شد. مسیر /etc/lxd شامل فایلهای پیکربندی برای LXD است، در حالی که /var/snap/lxd برای نصبهای snap LXD استفاده میشود. مسیر /var/lib/lxc بهطور اختصاصی برای کانتینرهای LXC است که اطلاعات مربوط به کانتینرها، پیکربندیها و فایلهای سیستم کانتینرها را ذخیره میکند. آگاهی از این ساختارها به شما کمک میکند تا بتوانید بهراحتی در سیستم خود با فایلها و پیکربندیهای مختلف LXD و LXC تعامل داشته باشید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”بررسی فایل پیکربندی پیشفرض پروفایلها، شبکه و storage” subtitle=”توضیحات کامل”]در LXD، پیکربندی پروفایلها، شبکهها و ذخیرهسازی نقش مهمی در نحوهی عملکرد کانتینرها دارند. این تنظیمات بهطور پیشفرض در زمان نصب و ایجاد پروفایلها، شبکهها و منابع ذخیرهسازی برای کانتینرها تنظیم میشوند. در این بخش به بررسی فایلهای پیکربندی پیشفرض پروفایلها، شبکهها و ذخیرهسازی در LXD خواهیم پرداخت.
1. پیکربندی پیشفرض پروفایلها
پروفایلها در LXD تنظیمات پیشفرض را برای کانتینرها فراهم میکنند. این تنظیمات شامل شبکه، منابع (مانند CPU و RAM)، و ذخیرهسازی است. پروفایلها میتوانند برای کانتینرهای مختلف اعمال شوند تا تنظیمات خاص به آنها نسبت داده شود.
فایلهای پیکربندی پیشفرض پروفایلها در مسیر /etc/lxd/profiles/ ذخیره میشوند. پروفایلهای پیشفرض معمولاً شامل تنظیمات زیر هستند:
- شبکه (Network): نحوه اتصال کانتینر به شبکه را مشخص میکند. این تنظیمات ممکن است شامل استفاده از شبکه bridge، NAT یا حتی اتصال به LAN باشد.
- ذخیرهسازی (Storage): نحوه ذخیرهسازی دادههای کانتینر را مشخص میکند، مانند استفاده از
dir,btrfs,zfsیاlvm. - منابع (Resources): شامل محدودیتهای منابع مانند CPU و RAM است که برای هر کانتینر اعمال میشود.
نمونه فایل پیکربندی پروفایل پیشفرض:
فایل پیکربندی پیشفرض پروفایلها بهطور معمول به صورت YAML است که در مسیر /etc/lxd/profiles/default.yaml قرار دارد. در این فایل میتوانید تنظیمات شبکه، ذخیرهسازی، و منابع را مشاهده کنید.
config: {}
description: Default LXD profile
devices:
eth0:
name: eth0
network: lxdbr0
type: nic
root:
path: /
pool: default
type: disk
name: default
در این مثال:
- eth0: شبکه کانتینر است که به شبکه bridge به نام
lxdbr0متصل میشود. - root: فایل سیستم کانتینر است که از ذخیرهسازی به نام
defaultاستفاده میکند. - name: نام پروفایل است که در اینجا بهطور پیشفرض
defaultاست.
2. پیکربندی پیشفرض شبکه
شبکه در LXD بهطور پیشفرض از یک شبکه bridge استفاده میکند که به نام lxdbr0 شناخته میشود. این شبکه به کانتینرها این امکان را میدهد که بهصورت NAT یا در برخی سناریوها بهطور مستقیم به شبکه LAN متصل شوند.
فایل پیکربندی شبکه پیشفرض در مسیر /etc/lxd/networks/lxdbr0 قرار دارد و بهطور خودکار زمانی که LXD نصب میشود، ساخته میشود.
نمونه پیکربندی پیشفرض شبکه:
config:
ipv4.address: 10.0.0.1/24
ipv4.nat: "true"
ipv6.address: none
ipv6.nat: "false"
description: Default LXD bridge network
managed: true
name: lxdbr0
type: bridge
در این فایل:
- ipv4.address: آدرس IP برای شبکه bridge.
- ipv4.nat: فعال بودن یا نبودن NAT برای اتصال به اینترنت.
- ipv6.address: تنظیمات IPv6 که در اینجا غیرفعال است.
- name: نام شبکه، که در اینجا
lxdbr0است.
این شبکه بهطور پیشفرض به تمام کانتینرهایی که به این پروفایل تعلق دارند، اختصاص داده میشود.
3. پیکربندی پیشفرض ذخیرهسازی
در LXD، ذخیرهسازی دادهها میتواند از چندین روش مختلف انجام شود. از جمله این روشها میتوان به dir, btrfs, zfs, و lvm اشاره کرد. تنظیمات مربوط به ذخیرهسازی در مسیر /etc/lxd/storage-pools/ قرار دارند.
پیکربندی پیشفرض ذخیرهسازی برای LXD معمولاً از نوع dir است، که فایل سیستم سادهای برای ذخیره دادهها استفاده میکند. اگر شما از نوع ذخیرهسازی دیگری استفاده میکنید (مانند btrfs یا zfs)، تنظیمات متفاوت خواهند بود.
نمونه پیکربندی پیشفرض ذخیرهسازی:
config: {}
description: Default storage pool
name: default
driver: dir
mount_options: []
source: /var/snap/lxd/common/lxd/storage-pools/default
در این پیکربندی:
- driver: نوع ذخیرهسازی که در اینجا
dirاست. - source: مسیر منبع ذخیرهسازی که در اینجا به مسیر
/var/snap/lxd/common/lxd/storage-pools/defaultاشاره دارد. - mount_options: تنظیمات اضافی برای mount که در اینجا خالی است.
جمعبندی
در این بخش، بررسی فایلهای پیکربندی پیشفرض پروفایلها، شبکهها و ذخیرهسازی در LXD انجام شد. پروفایلها بهطور پیشفرض شامل تنظیمات شبکه و ذخیرهسازی هستند. شبکه پیشفرض LXD از یک bridge به نام lxdbr0 استفاده میکند که به کانتینرها این امکان را میدهد که از NAT برای دسترسی به اینترنت استفاده کنند. ذخیرهسازی بهطور پیشفرض از نوع dir است که به فایل سیستم محلی اشاره دارد. آگاهی از این پیکربندیها به شما کمک میکند تا بتوانید سیستم خود را بر اساس نیازهای خاص خود پیکربندی کنید و تنظیمات مختلف را به دلخواه خود تغییر دهید.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 6. نصب ابزارهای خط فرمان LXD (lxc CLI)”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”نصب و تست LXC در سیستم کاربر” subtitle=”توضیحات کامل”]LXC (Linux Containers) یک ابزار سبک و قدرتمند برای ایجاد و مدیریت کانتینرها در لینوکس است. در این بخش، به نحوه نصب و تست LXC در سیستم کاربر پرداخته میشود. این مراحل بهطور معمول روی سیستمهای مبتنی بر Ubuntu، Debian و CentOS انجام میشود و شامل مراحل پیکربندی ابتدایی و آزمایشهای اولیه است.
1. نصب LXC در سیستم کاربر
برای نصب LXC در سیستم لینوکسی خود، شما میتوانید از دو روش مختلف استفاده کنید: استفاده از apt یا استفاده از snap.
نصب با استفاده از apt (در سیستمهای مبتنی بر Ubuntu یا Debian)
- ابتدا باید مخازن سیستم خود را بهروزرسانی کنید:
sudo apt update - سپس میتوانید بسته LXC را نصب کنید:
sudo apt install lxc
نصب با استفاده از snap (برای نصب نسخههای جدیدتر LXC)
- ابتدا باید
snapdرا نصب کنید اگر قبلاً نصب نشده باشد:sudo apt install snapd - سپس با استفاده از دستور
snapمیتوانید LXC را نصب کنید:sudo snap install lxc
2. تست نصب LXC
پس از نصب LXC، برای اطمینان از نصب صحیح و انجام یک تست ابتدایی، میتوانید از دستورات زیر استفاده کنید.
بررسی نسخه نصبشده
برای بررسی نسخه LXC که بر روی سیستم نصب شده است، از دستور زیر استفاده کنید:
lxc --version
این دستور نسخه نصبشده LXC را نمایش میدهد و میتوانید مطمئن شوید که LXC بهدرستی نصب شده است.
بررسی وضعیت کانتینرها
برای اطمینان از اینکه LXC بهدرستی کار میکند، میتوانید لیستی از کانتینرهای موجود را با دستور زیر مشاهده کنید:
lxc list
اگر هیچ کانتینری نصب نشده باشد، پیامی مشابه با این دریافت خواهید کرد:
+------+---------+------+------+-----------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOT |
+------+---------+------+------+-----------+-----------+
+------+---------+------+------+-----------+-----------+
ایجاد اولین کانتینر
برای ایجاد یک کانتینر جدید و آزمایش نصب، میتوانید از دستور زیر استفاده کنید:
lxc launch ubuntu:20.04 my-container
این دستور یک کانتینر با نام my-container از تصویر Ubuntu 20.04 ایجاد میکند.
بررسی وضعیت کانتینر
برای بررسی وضعیت کانتینرهای در حال اجرا، از دستور زیر استفاده کنید:
lxc list
شما باید نام کانتینری که ایجاد کردهاید (در اینجا my-container) را در لیست ببینید که وضعیت آن RUNNING است.
ورود به داخل کانتینر
برای ورود به کانتینر و دسترسی به محیط آن، از دستور زیر استفاده کنید:
lxc exec my-container -- /bin/bash
پس از این دستور، وارد محیط کانتینر خواهید شد و میتوانید دستورات مورد نظر خود را اجرا کنید.
توقف و حذف کانتینر
پس از اتمام تستها، میتوانید کانتینر را متوقف کرده و حذف کنید:
- توقف کانتینر:
lxc stop my-container - حذف کانتینر:
lxc delete my-container
جمعبندی
در این بخش، نحوه نصب و تست LXC در سیستم کاربر مورد بررسی قرار گرفت. شما میتوانید با استفاده از روشهای apt یا snap LXC را نصب کرده و سپس با استفاده از دستورات پایهای مانند lxc list، lxc launch و lxc exec عملکرد صحیح آن را بررسی کنید. همچنین، برای آزمایش عملی، یک کانتینر جدید ایجاد کردید و بهراحتی وارد محیط آن شدید و دستورات مختلف را اجرا کردید. این مراحل ساده و سریع به شما امکان میدهند تا بهراحتی از LXC برای مدیریت کانتینرهای لینوکسی استفاده کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”بررسی نسخه LXC و LXD با دستور lxc version” subtitle=”توضیحات کامل”]برای بررسی نسخههای نصبشده LXC و LXD در سیستم، میتوانید از دستور lxc version استفاده کنید. این دستور اطلاعات مفیدی را در مورد نسخههای مختلف LXC و LXD که بر روی سیستم شما نصب شدهاند، نمایش میدهد.
1. اجرای دستور lxc version
برای نمایش اطلاعات نسخههای LXC و LXD نصبشده، کافی است دستور زیر را در ترمینال وارد کنید:
lxc version
این دستور خروجیای مشابه به شکل زیر خواهد داشت:
LXC version: 4.0.1
LXD version: 4.0.1
LXD daemon version: 4.0.1
Kernel version: 5.4.0-66-generic
LXCFS version: 4.0.1
در این خروجی:
- LXC version: نسخه LXC که بر روی سیستم نصب شده است.
- LXD version: نسخه LXD که بر روی سیستم نصب شده است.
- LXD daemon version: نسخهی Daemon LXD که بهصورت اختصاصی در سیستم شما در حال اجرا است.
- Kernel version: نسخه کرنل لینوکس که سیستم شما از آن استفاده میکند.
- LXCFS version: نسخهی LXCFS که یک فایلسیستم مجازی است که برای پشتیبانی از LXC استفاده میشود.
این اطلاعات به شما کمک میکند تا بتوانید نسخههای دقیق هر یک از این ابزارها را بررسی کرده و مطمئن شوید که از نسخه مناسب برای نیازهای خود استفاده میکنید.
2. بررسی نسخه LXC و LXD در سیستمهای مختلف
در سیستمهای مختلف، بسته به نحوه نصب (با استفاده از snap یا apt)، ممکن است نسخههای متفاوتی از LXC و LXD نصب شده باشد. بهطور کلی، برای بررسی دقیقتر نسخهها، توجه به خروجی دستور lxc version که شامل اطلاعات اضافی میشود، بسیار مهم است.
جمعبندی
دستور lxc version به شما امکان میدهد تا نسخههای دقیق LXC و LXD را بررسی کنید. این اطلاعات میتواند برای اطمینان از نصب درست و نسخه مناسب در پروژههای شما مفید باشد. همچنین، میتوانید نسخههای مختلف از LXC و LXD را در سیستمهای مختلف مقایسه کرده و از نسخههایی استفاده کنید که با نیازهای شما هماهنگ هستند.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 7. پیکربندی تنظیمات پایهای و دستورات کلیدی اولیه”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”لیست کانتینرها، ایجاد نمونه اولیه، حذف و توقف” subtitle=”توضیحات کامل”]در این بخش، دستوراتی که برای مدیریت کانتینرها در LXC و LXD استفاده میشوند، شامل ایجاد، مشاهده، توقف و حذف کانتینرها توضیح داده میشوند. این دستورات به شما کمک میکنند تا با نحوه کارکرد و مدیریت کانتینرها در سیستم خود آشنا شوید.
1. لیست کانتینرها
برای مشاهده کانتینرهای موجود و وضعیت آنها، از دستور lxc list استفاده میشود. این دستور تمام کانتینرهای موجود در سیستم شما را نمایش میدهد و وضعیت هر کدام (در حال اجرا یا متوقف) را نیز نشان میدهد.
lxc list
خروجی دستور مشابه به این خواهد بود:
+----------------------+---------+-------------------+---------------------+-----------+
| Name | State | IPV4 | IPV6 | Type |
+----------------------+---------+-------------------+---------------------+-----------+
| container1 | RUNNING | 10.0.3.134 | fd42:1234::1 | container |
| container2 | STOPPED | | | container |
+----------------------+---------+-------------------+---------------------+-----------+
- Name: نام کانتینر
- State: وضعیت کانتینر (RUNNING یا STOPPED)
- IPV4: آدرس IP نسخه ۴ کانتینر
- IPV6: آدرس IP نسخه ۶ کانتینر
- Type: نوع کانتینر (که معمولاً
containerاست)
2. ایجاد نمونه اولیه کانتینر
برای ایجاد یک کانتینر جدید، از دستور lxc launch استفاده میشود. این دستور یک کانتینر جدید از یک الگو (template) مشخص ایجاد میکند.
برای ایجاد کانتینری از یک الگوی پایه مانند Ubuntu، دستور زیر را وارد کنید:
lxc launch ubuntu:20.04 my-container
در این دستور:
ubuntu:20.04الگوی کانتینر است.my-containerنام کانتینر جدید است.
پس از اجرای دستور، کانتینر شروع به ایجاد میکند و به طور خودکار در وضعیت RUNNING قرار خواهد گرفت.
3. توقف کانتینر
برای توقف یک کانتینر در حال اجرا، از دستور lxc stop استفاده میشود. این دستور کانتینر مشخصشده را متوقف میکند.
برای توقف کانتینر با نام my-container، دستور زیر را وارد کنید:
lxc stop my-container
پس از این دستور، کانتینر دیگر در وضعیت STOPPED قرار خواهد گرفت و دیگر به منابع سیستم دسترسی نخواهد داشت.
4. حذف کانتینر
برای حذف یک کانتینر، از دستور lxc delete استفاده میشود. این دستور کانتینر را از سیستم حذف میکند.
برای حذف کانتینری با نام my-container، دستور زیر را وارد کنید:
lxc delete my-container
توجه داشته باشید که این دستور کانتینر را بهطور کامل از سیستم حذف میکند، بنابراین اطمینان حاصل کنید که دادههای مهمی در کانتینر ذخیره نشده است.
جمعبندی
در این بخش، نحوه لیست کردن، ایجاد، توقف و حذف کانتینرها در LXC و LXD آموزش داده شد. با استفاده از دستورات lxc list، lxc launch, lxc stop و lxc delete، شما میتوانید کانتینرهای خود را مدیریت کنید. این دستورات برای انجام وظایف روزمره مدیریتی و حل مشکلات در محیطهای کانتینری بسیار مفید هستند.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تست اتصال به دیمون LXD” subtitle=”توضیحات کامل”]برای ارتباط و تست اتصال به دیمون LXD، باید از دستور lxd --verbose استفاده کنید تا وضعیت دیمون LXD را بررسی کرده و مطمئن شوید که به درستی در حال اجرا است. در این بخش، نحوه بررسی وضعیت اتصال و کارکرد دیمون LXD با استفاده از دستورات مختلف توضیح داده میشود.
1. تست وضعیت دیمون LXD با استفاده از دستور lxd --verbose
برای تست وضعیت دیمون LXD، از دستور lxd --verbose استفاده میشود. این دستور اطلاعات دقیقی درباره وضعیت فعلی دیمون LXD را نشان میدهد.
lxd --verbose
این دستور وضعیت دیمون LXD را بهطور کامل نمایش میدهد و به شما کمک میکند تا هرگونه مشکل یا خطا در ارتباط با دیمون را شناسایی کنید. اگر دیمون به درستی در حال اجرا باشد، پیامی مشابه زیر نمایش داده میشود:
LXD 4.0.0 is running
2. تست اتصال به دیمون LXD با استفاده از دستور lxc info
برای تست اتصال به دیمون LXD و دریافت اطلاعات درباره وضعیت آن، از دستور lxc info استفاده میشود. این دستور وضعیت دیمون LXD و همچنین اطلاعات مربوط به کانتینرها و سیستم موجود را نمایش میدهد.
lxc info
خروجی این دستور مشابه به موارد زیر خواهد بود:
info:
version: "4.0.0"
kernel: Linux 5.4.0-72-generic
server: LXD 4.0.0
storage: btrfs
network:
eth0:
type: nic
host_address: 10.0.3.134
host_name: my-host
در این خروجی:
- version: نسخه LXD که در حال اجرا است.
- kernel: نسخه کرنل لینوکس.
- server: نسخه LXD.
- storage: نوع سیستم ذخیرهسازی.
- network: اطلاعات شبکه و آدرسها.
اگر اتصال موفقیتآمیز باشد، این اطلاعات به شما نشان داده میشود و این بدان معناست که دیمون LXD به درستی کار میکند.
3. بررسی وضعیت دیمون با systemctl
دیمون LXD بهطور معمول بهصورت سرویس در سیستم لینوکس اجرا میشود. برای بررسی وضعیت سرویس دیمون LXD، از دستور systemctl استفاده کنید.
برای بررسی وضعیت سرویس LXD، دستور زیر را وارد کنید:
systemctl status lxd
این دستور وضعیت سرویس LXD را نمایش میدهد. اگر دیمون LXD در حال اجرا باشد، خروجی مشابه به زیر خواهد بود:
● lxd.service - LXD - container and virtual machine manager
Loaded: loaded (/etc/systemd/system/lxd.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2021-05-18 14:31:39 UTC; 1h 25min ago
Docs: https://linuxcontainers.org
Main PID: 11234 (lxd)
Tasks: 10
Memory: 98.2M
CGroup: /system.slice/lxd.service
└─11234 /usr/bin/lxd --logfile=/var/log/lxd/lxd.log
اگر سرویس در حال اجرا نباشد، پیامی مشابه به این نمایش داده میشود:
● lxd.service - LXD - container and virtual machine manager
Loaded: loaded (/etc/systemd/system/lxd.service; enabled; vendor preset: enabled)
Active: inactive (dead)
اگر سرویس متوقف باشد، میتوانید آن را با دستور زیر شروع کنید:
systemctl start lxd
جمعبندی
در این بخش، نحوه تست اتصال به دیمون LXD با استفاده از دستورات lxd --verbose، lxc info و systemctl status lxd بررسی شد. این دستورات به شما کمک میکنند تا وضعیت دیمون LXD را بررسی کرده و مطمئن شوید که بهدرستی کار میکند. از آنجایی که LXD یک سرویس مهم در سیستم است، باید مطمئن شوید که به درستی در حال اجرا است تا بتوانید از آن برای مدیریت کانتینرها استفاده کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”پیکربندی کامل lxd init با مثال کامل عملی (همراه با تنظیم دستی)” subtitle=”توضیحات کامل”]دستور lxd init برای پیکربندی اولیه LXD استفاده میشود. این دستور به شما این امکان را میدهد که تمامی تنظیمات اولیه LXD را بهصورت خودکار و دستی تنظیم کنید. در این بخش، پیکربندی کامل lxd init به همراه مثالهای عملی و تنظیمات دستی شرح داده خواهد شد.
1. اجرای دستور lxd init
ابتدا، برای پیکربندی LXD از دستور زیر استفاده میکنیم:
sudo lxd init
این دستور شما را از طریق یک سری پرسشهای تعاملی هدایت میکند که در آن میتوانید تنظیمات مختلف LXD را پیکربندی کنید.
2. تنظیمات خودکار lxd init
پس از اجرای دستور lxd init، سوالاتی به شما نمایش داده میشود که میتوانید پاسخ آنها را بهطور خودکار یا دستی وارد کنید. در اینجا، به بررسی گام به گام سوالات و تنظیمات پرداخته میشود:
پاسخ به سوالات مختلف در lxd init:
- آیا میخواهید LXD از پیشفرضها استفاده کند؟در این مرحله، اگر بخواهید LXD از تنظیمات پیشفرض استفاده کند، میتوانید گزینه “Yes” را انتخاب کنید. اگر بخواهید تنظیمات را بهطور دستی پیکربندی کنید، گزینه “No” را انتخاب کنید.
Do you want to configure a new storage pool? (yes/no) [default=yes]:اگر گزینه “No” را انتخاب کنید، از تنظیمات پیشفرض استفاده میشود.
- انتخاب نوع storage pool:در این قسمت از شما خواسته میشود که نوع storage pool مورد استفاده برای کانتینرها را انتخاب کنید. انواع مختلفی از این استخرها وجود دارند که عبارتند از:
dir،lvm،btrfsوzfs.به عنوان مثال، برای انتخاب
dir(که سادهترین نوع storage pool است) میتوانید پاسخ دهید:What storage backend do you want to use? (dir, btrfs, lvm, zfs) [default=dir]:پس از انتخاب نوع storage، از شما خواسته میشود که مسیر ذخیرهسازی کانتینرها را تعیین کنید. برای مثال:
Where would you like to store your containers? [default=/var/snap/lxd/common/lxd/storage-pools/default]:شما میتوانید مسیر ذخیرهسازی را به دلخواه تنظیم کنید.
- پیکربندی شبکه:در این مرحله از شما خواسته میشود که شبکه مورد استفاده برای LXD را انتخاب کنید. میتوانید از یک
bridgeشبکه یا شبکههای داخلی استفاده کنید. برای مثال، انتخابbridgeبرای اتصال به شبکه محلی (LAN) و ایجاد شبکهای برای کانتینرها:Would you like to create a new bridge network? (yes/no) [default=yes]:اگر انتخاب کنید “Yes”، شما باید نام و تنظیمات آن را وارد کنید. بهطور پیشفرض، شبکهای به نام
lxdbr0ایجاد میشود.What name should the new bridge have? [default=lxdbr0]: - فعالسازی IP forwarding و firewall:LXD بهطور پیشفرض نیاز به فعال کردن IP forwarding و پیکربندی فایروال دارد. این تنظیمات بهطور خودکار انجام میشوند، ولی میتوانید این تنظیمات را بهصورت دستی انجام دهید.
Would you like to configure a new firewall? (yes/no) [default=yes]:
3. تنظیمات دستی lxd init
در صورتی که بخواهید تنظیمات lxd init را بهصورت دستی انجام دهید، میتوانید از دستور lxd init --preseed استفاده کنید که یک فایل پیکربندی آماده به شما میدهد تا بتوانید تمام تنظیمات را بهصورت دستی و دقیق وارد کنید.
برای پیکربندی دستی از فایل preseed استفاده کنید:
- ابتدا یک فایل به نام
lxd-preseed.cfgبسازید و تنظیمات دلخواه خود را وارد کنید. در این فایل، تمامی اطلاعات مورد نیاز برای پیکربندی LXD بهصورت متنی آورده میشود.
cat > lxd-preseed.cfg <<EOF
config:
core.https_address: '[::]:8443'
storage.backend: btrfs
storage.zfs_pool_name: 'lxd_pool'
networks:
lxdbr0:
ipv4.address: 10.0.3.1/24
ipv4.nat: "true"
ipv6.address: none
ipv6.nat: "false"
profiles:
default:
config:
limits.cpu: "2"
limits.memory: 4GB
EOF
- پس از ساخت فایل پیکربندی، از دستور
lxd init --preseedبرای اعمال آن استفاده کنید.
sudo lxd init --preseed < lxd-preseed.cfg
این دستور فایل پیکربندی را وارد میکند و تنظیمات LXD را بهصورت دستی انجام میدهد.
4. بررسی و تأسیس اولین کانتینر
پس از انجام مراحل پیکربندی، میتوانید اولین کانتینر خود را ایجاد کنید. برای مثال، برای ایجاد یک کانتینر با استفاده از دستور lxc launch:
lxc launch ubuntu:20.04 my-first-container
در این دستور، ubuntu:20.04 الگوی کانتینری است که از آن استفاده میکنید و my-first-container نام کانتینر جدید شماست.
جمعبندی
در این بخش، نحوه پیکربندی LXD با استفاده از دستور lxd init و همچنین نحوه تنظیمات دستی با استفاده از فایلهای preseed بررسی شد. این روش به شما این امکان را میدهد که LXD را بهطور کامل مطابق نیازهای خود پیکربندی کرده و یک محیط کانتینری کامل و بهینه بسازید. همچنین، با ایجاد اولین کانتینر، میتوانید مطمئن شوید که تمامی تنظیمات بهدرستی اعمال شدهاند و آماده استفاده از LXD برای مدیریت کانتینرها هستید.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 8. مدیریت دسترسی و اضافه کردن کاربران به گروه lxd”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”افزودن کاربر به گروه LXD برای استفاده از دستورات بدون sudo” subtitle=”توضیحات کامل”]برای استفاده از دستورات LXD بدون نیاز به sudo، میتوانید کاربر مورد نظر را به گروه lxd اضافه کنید. این گروه بهطور پیشفرض توسط LXD برای مدیریت دسترسی به امکانات مربوط به کانتینرها ایجاد میشود. پس از اضافه کردن کاربر به این گروه، کاربر میتواند دستورات LXD را بدون نیاز به دسترسی روت یا sudo اجرا کند.
1. افزودن کاربر به گروه LXD
برای اضافه کردن کاربر به گروه lxd، از دستور usermod استفاده میکنیم. دستور زیر کاربر username را به گروه lxd اضافه میکند:
sudo usermod -aG lxd username
در اینجا:
usernameباید با نام کاربری که میخواهید آن را به گروهlxdاضافه کنید جایگزین شود.- گزینه
-aGبه این معنی است که کاربر به گروههای موجود اضافه میشود، بدون اینکه از گروههای دیگر حذف شود.
2. بازنشانی session یا ورود مجدد به سیستم
پس از افزودن کاربر به گروه lxd، برای اعمال تغییرات، کاربر باید یا سیستم را ریاستارت کند یا از سیستم خارج شده و مجدداً وارد شود. این کار به این دلیل است که تغییرات گروهها باید در جلسه جدید اعمال شوند.
برای اعمال تغییرات بلافاصله، میتوانید از دستور newgrp استفاده کنید تا گروه جاری کاربر را به lxd تغییر دهید:
newgrp lxd
3. بررسی عضویت کاربر در گروه LXD
برای اطمینان از اینکه کاربر به گروه lxd اضافه شده است، میتوانید از دستور groups استفاده کنید:
groups username
این دستور گروههای موجود برای کاربر مورد نظر را نمایش میدهد و باید گروه lxd در لیست گروهها مشاهده شود.
4. اجرای دستورات LXD بدون sudo
حالا که کاربر به گروه lxd اضافه شده است، میتواند دستورات LXD را بدون نیاز به sudo اجرا کند. به عنوان مثال، دستور زیر را میتوان بدون sudo اجرا کرد:
lxc list
این دستور لیست کانتینرهای موجود در LXD را نمایش میدهد و کاربر میتواند آن را بدون دسترسی روت اجرا کند.
جمعبندی
در این بخش، نحوه افزودن کاربر به گروه lxd برای استفاده از دستورات LXD بدون نیاز به sudo بررسی شد. با استفاده از دستور usermod، کاربر به گروه lxd اضافه میشود و پس از اعمال تغییرات گروه، میتواند از امکانات LXD استفاده کند. این تنظیمات باعث سادهتر شدن فرآیندهای اجرایی و مدیریتی میشود و به کاربران این امکان را میدهد که بهصورت مستقیم با کانتینرها و منابع مرتبط با LXD کار کنند.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”بررسی دسترسیها با id $USER” subtitle=”توضیحات کامل”]دستور id در لینوکس برای نمایش اطلاعات مربوط به کاربر فعلی یا هر کاربر دیگری استفاده میشود. این دستور بهویژه برای بررسی گروهها و شناسههای کاربری (UID) و گروهی (GID) مفید است. استفاده از id $USER بهویژه برای بررسی دسترسیها و عضویتهای گروهی کاربر فعلی مفید است.
1. دستور id برای بررسی دسترسیها
با استفاده از دستور id به همراه متغیر محیطی $USER میتوان اطلاعات مربوط به کاربر جاری را نمایش داد. متغیر $USER بهطور پیشفرض نام کاربر وارد شده به سیستم را نشان میدهد.
برای مشاهده اطلاعات کاربر فعلی، از دستور زیر استفاده کنید:
id $USER
این دستور اطلاعات زیر را نشان میدهد:
- UID (User ID): شناسه کاربری منحصر به فرد کاربر.
- GID (Group ID): شناسه گروه اصلی کاربر.
- گروهها: تمامی گروههایی که کاربر عضو آنها است.
2. مثال خروجی دستور
خروجی معمول دستور id $USER به صورت زیر خواهد بود:
uid=1001(username) gid=1001(username) groups=1001(username),27(sudo),1002(lxd)
در این مثال:
uid=1001نشاندهنده شناسه کاربری (UID) کاربر است.gid=1001شناسه گروه اصلی کاربر است.groups=1001(username),27(sudo),1002(lxd)گروههایی که کاربر عضو آنها است را نمایش میدهد. در اینجا، کاربر به گروههایusername،sudoوlxdتعلق دارد.
3. تفسیر اطلاعات خروجی
- UID (شناسه کاربری): این عدد معرف شناسه منحصر به فرد برای کاربر است.
- GID (شناسه گروه): این عدد معرف گروه اصلی کاربر است.
- گروهها: این بخش شامل تمامی گروههایی است که کاربر به آنها تعلق دارد. بهعنوان مثال، گروه
sudoبه کاربر اجازه میدهد تا دستورات را با دسترسی روت (superuser) اجرا کند، و گروهlxdبه کاربر اجازه میدهد تا از دستورات مربوط به LXD استفاده کند.
4. تست دسترسیها پس از اضافه کردن کاربر به گروه LXD
پس از افزودن کاربر به گروه lxd، میتوان از دستور id $USER برای اطمینان از اینکه کاربر به گروه lxd اضافه شده است، استفاده کرد. به عنوان مثال، اگر کاربر به گروه lxd اضافه شده باشد، باید در بخش گروهها، نام گروه lxd را مشاهده کنید.
جمعبندی
با استفاده از دستور id $USER میتوان بهراحتی تمامی اطلاعات مربوط به کاربر جاری را مشاهده کرد، از جمله UID، GID و گروههایی که کاربر عضو آنها است. این دستور بهویژه برای بررسی دسترسیها و اطمینان از اینکه کاربر به گروههای موردنظر اضافه شده است، مفید است.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 9. پیکربندی LXD از طریق فایل YAML (تنظیمات غیرتعاملی)”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”ایجاد فایل کانفیگ YAML برای نصب غیرتعاملی” subtitle=”توضیحات کامل”]در بسیاری از مواقع، نیاز است که یک برنامه یا ابزار را بدون نیاز به تعامل کاربر نصب و پیکربندی کنیم. در این زمینه، ابزارهایی مانند LXD اجازه میدهند تا فرآیند نصب را از طریق فایلهای پیکربندی YAML بهصورت خودکار انجام دهیم. این روش معمولاً برای نصبهای بزرگ یا در محیطهای خودکار (automation) بسیار مفید است.
در این بخش، نحوه ایجاد یک فایل کانفیگ YAML برای نصب غیرتعاملی LXD را بررسی خواهیم کرد.
1. فرمت فایل YAML
فایل YAML برای پیکربندی غیرتعاملی شامل مجموعهای از تنظیمات است که به LXD دستور میدهند چگونه باید نصب و پیکربندی شود. این فایل میتواند شامل اطلاعاتی نظیر انتخاب نوع ذخیرهسازی، شبکه، پروفایلها و سایر تنظیمات باشد.
ساختار فایل YAML معمولاً به این صورت خواهد بود:
config:
core.https_address: "[::]:8443"
core.trust_password: "your_secure_password"
storage.backing_filesystem: "btrfs"
storage.zfs_pool_name: "lxd_pool"
storage.driver: "btrfs"
networks:
lxdbr0:
type: bridge
config:
ipv4.address: "10.0.0.1/24"
ipv6.address: "fd42:0000:0000:0000::1/64"
ipv4.nat: "true"
profiles:
default:
config:
user.network_mode: "bridge"
devices:
eth0:
name: eth0
network: lxdbr0
type: nic
2. شرح تنظیمات در فایل YAML
در فایل YAML میتوان تنظیمات مختلفی را بهصورت غیرتعاملی برای نصب LXD تعریف کرد:
- config:
core.https_address: مشخص میکند که LXD روی چه پورت و آدرسی گوش دهد (در این مثال، پورت 8443 روی آدرس[::]).core.trust_password: رمز عبور پیشفرض برای دسترسی به LXD.storage.backing_filesystem: نوع فایل سیستم پشتیبانیشده برای ذخیرهسازی کانتینرها (در این مثال ازbtrfsاستفاده شده است).storage.zfs_pool_name: نام استخر ZFS برای ذخیرهسازی کانتینرها.storage.driver: نوع درایور ذخیرهسازی (در این مثالbtrfsاست).
- networks:
- در این بخش، یک شبکه
lxdbr0بهعنوان یک شبکهbridgeتعریف شده است. این شبکه برای اتصال کانتینرها به شبکههای خارجی استفاده میشود. - آدرسهای IP برای IPv4 و IPv6 برای شبکه
lxdbr0تنظیم شده است. ipv4.nat: تنظیمات NAT برای فعالسازی ارتباط کانتینرها با دنیای خارج.
- در این بخش، یک شبکه
- profiles:
- پروفایل
defaultتنظیم شده است که بهعنوان پروفایل پیشفرض برای تمامی کانتینرها استفاده میشود. - در این بخش، تنظیمات مربوط به شبکه برای اتصال به شبکه
lxdbr0و ارتباط از طریق شبکه بریج (bridge) اعمال شده است. - دستگاه شبکه
eth0به شبکهlxdbr0متصل شده است.
- پروفایل
3. استفاده از فایل YAML در نصب غیرتعاملی
برای استفاده از فایل YAML برای نصب غیرتعاملی، میتوانید فایل کانفیگ را در مسیر مناسب قرار داده و سپس نصب LXD را با استفاده از این فایل پیکربندی شروع کنید.
- ابتدا فایل YAML را ایجاد کنید و آن را در مسیر دلخواه ذخیره کنید. بهعنوان مثال، فایل را به نام
lxd-config.yamlذخیره کنید. - سپس برای شروع نصب غیرتعاملی LXD با استفاده از این فایل، از دستور زیر استفاده کنید:
sudo lxd init --preseed < /path/to/lxd-config.yaml
با این دستور، LXD از فایل YAML پیکربندی شده برای نصب و تنظیمات استفاده خواهد کرد و فرآیند نصب بدون نیاز به هیچگونه تعامل کاربر انجام میشود.
جمعبندی
با استفاده از فایل YAML میتوان تنظیمات مختلف LXD را بهصورت غیرتعاملی و خودکار انجام داد. این روش برای نصب و پیکربندی LXD در محیطهای خودکار بسیار مفید است و میتواند باعث کاهش زمان و خطاهای ناشی از تعاملات دستی شود. فایل YAML باید بهطور دقیق و با تنظیمات مناسب ایجاد شود تا بتوان از آن برای نصب سریع و آسان استفاده کرد.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”استفاده از آن در اسکریپتهای اتوماسیون” subtitle=”توضیحات کامل”]برای خودکارسازی فرآیند نصب و پیکربندی LXD، میتوان از فایلهای کانفیگ YAML در اسکریپتهای اتوماسیون استفاده کرد. این اسکریپتها میتوانند نصب LXD، تنظیمات شبکه، ذخیرهسازی و پروفایلها را بهطور خودکار انجام دهند و بهویژه در محیطهای تولیدی و CI/CD که نیاز به نصب و پیکربندی سریع و بدون خطا وجود دارد، بسیار مفید باشند.
در این بخش، نحوه استفاده از فایلهای YAML در اسکریپتهای اتوماسیون و نحوه پیادهسازی آن در محیطهای خودکار (automation) برای نصب و پیکربندی LXD بهصورت غیرتعاملی توضیح داده خواهد شد.
1. ایجاد اسکریپت اتوماسیون برای نصب LXD
برای استفاده از فایل YAML در اسکریپتهای اتوماسیون، ابتدا باید یک اسکریپت بنویسیم که فایل کانفیگ YAML را بهطور خودکار دانلود کرده، آن را بهدرستی پیکربندی کند و سپس فرآیند نصب LXD را انجام دهد.
نمونه اسکریپت Bash برای نصب LXD بهصورت اتوماسیون:
#!/bin/bash
# فایل کانفیگ YAML را ایجاد میکنیم
cat <<EOF > /tmp/lxd-config.yaml
config:
core.https_address: "[::]:8443"
core.trust_password: "your_secure_password"
storage.backing_filesystem: "btrfs"
storage.zfs_pool_name: "lxd_pool"
storage.driver: "btrfs"
networks:
lxdbr0:
type: bridge
config:
ipv4.address: "10.0.0.1/24"
ipv6.address: "fd42:0000:0000:0000::1/64"
ipv4.nat: "true"
profiles:
default:
config:
user.network_mode: "bridge"
devices:
eth0:
name: eth0
network: lxdbr0
type: nic
EOF
# نصب LXD و انجام تنظیمات
echo "نصب LXD و پیکربندی با فایل YAML..."
sudo apt update
sudo apt install -y lxd
# نصب غیرتعاملی LXD با استفاده از فایل کانفیگ YAML
sudo lxd init --preseed < /tmp/lxd-config.yaml
# حذف فایل کانفیگ YAML پس از نصب
rm -f /tmp/lxd-config.yaml
# تأیید نصب و پیکربندی LXD
echo "LXD نصب و پیکربندی شد!"
2. شرح مراحل اسکریپت
- ابتدا فایل YAML پیکربندی بهطور خودکار در مسیر
/tmp/lxd-config.yamlایجاد میشود. این فایل شامل تنظیمات LXD مانند آدرس HTTP، رمز عبور، ذخیرهسازی، شبکه و پروفایلها است. - سپس با استفاده از دستور
sudo apt install -y lxd، LXD نصب میشود. این دستور در محیطهای خودکار، نیازی به تأیید کاربر ندارد و بهطور خودکار نصب را انجام میدهد. - پس از نصب LXD، دستور
lxd init --preseedبههمراه فایل YAML از پیشساختهشده، پیکربندی غیرتعاملی LXD را انجام میدهد. این بخش از اسکریپت بهطور خودکار تنظیمات شبکه، ذخیرهسازی و پروفایلها را انجام میدهد بدون اینکه نیاز به تعامل کاربر باشد. - پس از انجام مراحل پیکربندی، فایل YAML حذف میشود تا از مشکلات امنیتی و بهدلیل فضای اضافی جلوگیری شود.
- در انتها، پیام موفقیتآمیز بودن نصب و پیکربندی LXD نمایش داده میشود.
3. افزودن دستورات بیشتر برای پیچیدگیهای بیشتر
در صورتی که نیاز به انجام مراحل اضافی یا تنظیمات پیچیدهتری داشته باشیم، میتوانیم دستورات بیشتری به اسکریپت اضافه کنیم. بهعنوان مثال، ایجاد کانتینرها، تنظیمات شبکه پیشرفته یا اضافه کردن کلیدهای SSH برای دسترسی به کانتینرها میتواند به اسکریپت اضافه شود:
# ایجاد یک کانتینر جدید
lxc launch ubuntu:20.04 mycontainer
# تنظیمات پیشرفته شبکه برای کانتینر
lxc network attach lxdbr0 mycontainer eth0
# اجرای یک فرمان در داخل کانتینر
lxc exec mycontainer -- apt update
این دستورات میتوانند به اسکریپت اضافه شوند تا پس از نصب و پیکربندی اولیه، کانتینرهای جدید نیز بهصورت خودکار ایجاد شوند.
4. اجرای اسکریپت
برای اجرای اسکریپت بهصورت اتوماسیون، تنها کافی است اسکریپت را بهصورت زیر اجرا کنیم:
bash lxd-install-automation.sh
این اسکریپت تمامی مراحل نصب و پیکربندی LXD را بهطور خودکار انجام خواهد داد و پس از پایان نصب، شما یک محیط LXD کاملاً پیکربندیشده خواهید داشت.
جمعبندی
استفاده از فایلهای YAML در اسکریپتهای اتوماسیون بهعنوان یک روش بسیار کارآمد برای نصب و پیکربندی LXD بهصورت غیرتعاملی است. این روش بهویژه در محیطهای خودکار و در فرآیندهای CI/CD بسیار مفید است، زیرا تمامی مراحل بهصورت خودکار و بدون نیاز به تعامل کاربر انجام میشود. با استفاده از اسکریپتهای Bash و فایلهای YAML، میتوان فرآیند نصب، پیکربندی شبکه و ذخیرهسازی و همچنین ایجاد و پیکربندی کانتینرها را بهطور کامل خودکار کرد.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 10. بررسی نسخه LXC Legacy و LXD Modern”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تفاوتهای ساختاری بین LXC standalone و LXD-managed” subtitle=”توضیحات کامل”]LXC و LXD دو تکنولوژی مرتبط با کانتینرها در لینوکس هستند، اما در نحوه استفاده و معماری داخلی تفاوتهای زیادی دارند. در این بخش، به بررسی تفاوتهای ساختاری بین استفاده از LXC بهصورت standalone و LXD-managed خواهیم پرداخت.
1. LXC Standalone
LXC بهطور پیشفرض بهعنوان یک ابزار خط فرمان مستقل برای مدیریت کانتینرها استفاده میشود. در این حالت، LXC بهطور مستقیم از ویژگیهای سیستمعامل مانند cgroups و namespaces استفاده میکند و بهطور مستقیم با سیستمعامل ارتباط برقرار میکند. این به معنی این است که LXC standalone بیشتر در سطح پایینتری از سیستم عامل عمل میکند و در نتیجه، قابلیتهای کمتری برای مدیریت و راحتی استفاده نسبت به LXD دارد.
ویژگیها و ساختار LXC Standalone:
- استفاده مستقیم از ابزارهای سیستم: LXC بهطور مستقیم از ابزارهایی مانند
lxc-create,lxc-start,lxc-stopبرای مدیریت کانتینرها استفاده میکند. این ابزارها بهصورت دستی و در سطح سیستمعامل اجرا میشوند. - مدیریت دستی: برای پیکربندی شبکه، ذخیرهسازی، و پروفایلها باید بهصورت دستی تنظیمات انجام شود.
- ارتباط مستقیم با کرنل: LXC بهطور مستقیم به ویژگیهای کرنل لینوکس (مانند cgroups، namespaces و chroot) برای اجرای کانتینرها دسترسی دارد.
- نیاز به پیکربندی دستی: برای ایجاد شبکه، تنظیمات ذخیرهسازی و پیکربندی پروفایلها باید توسط کاربر بهصورت دستی انجام شود.
مثالهای دستوری LXC Standalone:
- ایجاد کانتینر:
lxc-create -n mycontainer -t ubuntu - شروع کانتینر:
lxc-start -n mycontainer - توقف کانتینر:
lxc-stop -n mycontainer
2. LXD-Managed Containers
LXD یک رابط کاربری و مدیریت پیشرفته برای کانتینرها است که LXC را بهعنوان بخشی از ساختار خود استفاده میکند. در این حالت، LXD بهعنوان یک daemon عمل میکند و بهطور خودکار بسیاری از تنظیمات را برای کاربر انجام میدهد. LXD در حقیقت یک لایه مدیریت اضافی برای راحتی بیشتر در استفاده از LXC است و امکان مدیریت پیچیدهتر و کارآمدتر کانتینرها را فراهم میکند.
ویژگیها و ساختار LXD-Managed:
- مدیریت خودکار: LXD بسیاری از تنظیمات را بهطور خودکار انجام میدهد. بهعنوان مثال، تنظیمات شبکه، ذخیرهسازی و پروفایلها بهطور خودکار در هنگام راهاندازی کانتینر مدیریت میشوند.
- LXD Daemon: LXD بهعنوان یک daemon (فرآیند پسزمینه) اجرا میشود که از طریق یک API RESTful یا CLI بهطور خودکار کانتینرها را مدیریت میکند.
- سادگی در استفاده: برخلاف LXC standalone که نیاز به دستورات پیچیده دارد، LXD رابط کاربری سادهتری ارائه میدهد که بهویژه برای استفاده در مقیاس بزرگتر بسیار مناسب است.
- استفاده از پروفایلها: LXD بهطور پیشفرض از پروفایلها برای مدیریت کانتینرها استفاده میکند که به کاربر امکان میدهد کانتینرها را بهراحتی با تنظیمات از پیش تعیینشده پیکربندی کند.
- شبکهسازی و ذخیرهسازی پیشرفته: LXD قابلیتهای شبکهسازی پیشرفتهتری مانند “bridging” و “NAT” را برای اتصال کانتینرها فراهم میکند. همچنین میتواند از انواع مختلف ذخیرهسازی مانند ZFS، Btrfs و LVM پشتیبانی کند.
مثالهای دستوری LXD:
- ایجاد کانتینر با استفاده از پروفایل پیشفرض:
lxc launch ubuntu:20.04 mycontainer - توقف کانتینر:
lxc stop mycontainer - بررسی وضعیت کانتینر:
lxc list
3. تفاوتها در جزئیات معماری
- Daemon (LXD): LXD بهعنوان یک daemon پسزمینه اجرا میشود و از طریق API یا CLI قابل دسترسی است. این به این معناست که LXD میتواند عملیاتهای پیچیدهتری مانند شبکهسازی و ذخیرهسازی پیشرفته را مدیریت کند. در حالی که LXC standalone بهطور مستقیم با سیستمعامل ارتباط برقرار میکند و از این نظر محدودتر است.
- مدیریت شبکه: LXD بهطور خودکار شبکهها را مدیریت میکند، در حالی که در LXC standalone، باید بهطور دستی تنظیمات شبکه انجام شود. برای مثال، LXD امکان استفاده از شبکههای bridge، macvlan و همچنین اتصال به شبکههای خارجی را بهطور سادهتری فراهم میکند.
- پروفایلها: در LXD از پروفایلها برای تعریف تنظیمات پیشفرض برای کانتینرها استفاده میشود. این پروفایلها میتوانند تنظیمات مختلفی مانند شبکه، ذخیرهسازی و پیکربندی سیستم را شامل شوند. در LXC standalone، این پروفایلها وجود ندارند و هر کانتینر باید بهطور جداگانه تنظیمات خود را دریافت کند.
- پشتیبانی از انواع ذخیرهسازی: LXD پشتیبانی از انواع مختلف ذخیرهسازی مانند ZFS، LVM و Btrfs را بهطور پیشرفتهتری نسبت به LXC standalone ارائه میدهد.
جمعبندی
تفاوتهای ساختاری میان LXC standalone و LXD-managed به تفاوت در نحوه مدیریت و پیکربندی کانتینرها مربوط میشود. LXD با ارائه یک daemon مرکزی و یک رابط کاربری سادهتر، مدیریت کانتینرها را بهطور خودکار و پیشرفتهتری انجام میدهد. از طرفی، LXC standalone بیشتر بهصورت دستی و در سطح پایینتر عمل میکند، که ممکن است برای استفادههای خاص و نیاز به انعطاف بیشتر مفید باشد. در مجموع، LXD بهعنوان یک لایه مدیریت پیشرفتهتر برای LXC طراحی شده و استفاده از آن در مقیاس بزرگتر و پیچیدهتر بسیار راحتتر است.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”انتخاب بین حالت Classic یا Daemonized” subtitle=”توضیحات کامل”]در هنگام استفاده از LXC و LXD، یکی از تصمیمات مهم برای کاربران، انتخاب بین دو حالت اجرایی اصلی است: حالت Classic و حالت Daemonized. هرکدام از این حالتها ویژگیها و مزایای خاص خود را دارند که میتوانند بر اساس نیازهای مختلف محیط کاری، پروژهها و مقیاس سیستمهای اجرایی متفاوت انتخاب شوند.
در این بخش از آموزش های ارائه شده توسط فرازنتورک، به بررسی تفاوتها، مزایا و معایب این دو حالت میپردازیم تا بتوانید انتخاب آگاهانهای داشته باشید.
1. حالت Classic (LXC standalone)
در این حالت، LXC بهعنوان یک ابزار خط فرمان مستقل برای مدیریت کانتینرها عمل میکند. این حالت بهصورت سنتی و مستقل از LXD، مدیریت کانتینرها را انجام میدهد. به عبارت دیگر، در حالت Classic، LXC تنها بهعنوان یک مجموعه ابزار برای ایجاد، راهاندازی، توقف و مدیریت کانتینرها بهصورت مستقل عمل میکند.
ویژگیها و مزایا:
- سادگی در پیادهسازی: LXC در این حالت بهطور مستقیم از ابزارهایی مانند
lxc-createوlxc-startاستفاده میکند. این ابزارها نسبتاً ساده و کمحجم هستند و به کاربر این امکان را میدهند که بهطور مستقیم به مدیریت کانتینرها بپردازد. - کنترل بیشتر: کاربران میتوانند بهطور کامل بر تمامی جزئیات پیکربندی کانتینرها کنترل داشته باشند. این شامل تنظیمات ذخیرهسازی، شبکه و دسترسی به منابع است.
- کمترین وابستگی به سیستمهای خارجی: این حالت به هیچ daemon یا فرآیند پسزمینه نیاز ندارد. تنها کافیست که ابزارهای مربوط به LXC بهطور مستقیم اجرا شوند.
معایب:
- نیاز به پیکربندی دستی: تمامی تنظیمات و پیکربندیها در این حالت بهطور دستی انجام میشوند که میتواند زمانبر باشد.
- محدودیت در مدیریت مقیاسهای بزرگ: مدیریت کانتینرها در مقیاسهای بزرگ و پیچیده در این حالت بهدلیل نبود قابلیتهای پیشرفتهای مانند مدیریت پروفایلها و شبکههای پیچیده میتواند چالشبرانگیز باشد.
- نیاز به دستورات متعدد: برای ایجاد و مدیریت کانتینرها باید از دستورات مختلف استفاده کرد که میتواند برای کاربران تازهکار کمی پیچیده باشد.
2. حالت Daemonized (LXD)
در این حالت، LXD بهعنوان یک daemon (فرآیند پسزمینه) عمل میکند و بهطور خودکار کانتینرها را مدیریت میکند. LXD یک لایه مدیریت پیشرفته برای LXC است که بهویژه برای مقیاسهای بزرگ و نیازهای پیچیده طراحی شده است. این حالت مدیریت کانتینرها را سادهتر میکند و به کاربر این امکان را میدهد که از یک رابط کاربری (CLI یا API) برای انجام عملیات استفاده کند.
ویژگیها و مزایا:
- مدیریت سادهتر: LXD بهطور خودکار تنظیمات مختلف مانند شبکه، ذخیرهسازی و پروفایلها را برای کاربران مدیریت میکند. این باعث میشود که فرایندهای پیچیدهتری مانند اتصال کانتینرها به شبکههای مختلف یا استفاده از انواع مختلف ذخیرهسازی بهطور سادهتری انجام شوند.
- پشتیبانی از پروفایلها: LXD این امکان را فراهم میآورد که پروفایلهایی با تنظیمات از پیش تعریفشده برای کانتینرها داشته باشید. این ویژگی به کاربر اجازه میدهد که کانتینرها را بهسرعت با تنظیمات خاص راهاندازی کند.
- API و CLI قدرتمند: LXD دارای یک API قدرتمند برای ارتباط با سایر سیستمها و اتوماسیون است. این ویژگی در مقیاسهای بزرگ و در پروژههای پیچیده بسیار مفید است.
- مدیریت مقیاس بزرگ: LXD برای مدیریت کانتینرها در مقیاس بزرگ بسیار مناسب است و میتواند هزاران کانتینر را بهطور همزمان مدیریت کند.
- اتصال به شبکههای پیشرفته: LXD پشتیبانی کامل از اتصال کانتینرها به شبکههای پیچیده و تنظیمات مربوط به دسترسی به شبکههای خارجی یا ایجاد شبکههای bridge را بهطور خودکار انجام میدهد.
معایب:
- وابستگی به daemon: LXD بهعنوان یک daemon پسزمینه اجرا میشود که ممکن است مصرف منابع بیشتری نسبت به حالت Classic داشته باشد.
- محدودیتهای بیشتر در کنترل دستی: برخی از کاربران ممکن است احساس کنند که LXD کنترل کمتری نسبت به جزئیات سیستم فراهم میکند، چرا که بیشتر کارها بهطور خودکار انجام میشود.
3. مقایسه حالت Classic و Daemonized
| ویژگی | Classic (LXC Standalone) | Daemonized (LXD) |
|---|---|---|
| سادگی در پیادهسازی | ساده و مستقیم | پیچیدهتر، نیاز به نصب daemon |
| مدیریت کانتینرها | دستی و مستقل | خودکار و با استفاده از ابزار مدیریت |
| پروفایلها | ندارد | پشتیبانی از پروفایلها و تنظیمات پیشفرض |
| کنترل کاربر | کاملتر | کمتر در کنترل جزئیات |
| مقیاس | مناسب برای استفادههای کوچک | مناسب برای مقیاسهای بزرگ و پیچیده |
| مدیریت شبکه و ذخیرهسازی | دستی | خودکار و پیشرفته |
| پشتیبانی از API | ندارد | پشتیبانی کامل از API |
جمعبندی
انتخاب بین حالت Classic و Daemonized بستگی به نیاز شما و محیط کاریتان دارد. اگر شما بهدنبال کنترل دقیق و تنظیمات دستی هستید و نیازی به مدیریت مقیاسهای بزرگ ندارید، حالت Classic ممکن است بهترین گزینه باشد. از طرف دیگر، اگر بهدنبال سادهسازی فرآیندهای مدیریتی و استفاده از ویژگیهای پیشرفته مانند پروفایلها، مدیریت خودکار شبکه و ذخیرهسازی هستید، حالت Daemonized (LXD) انتخاب مناسبتری خواهد بود.
[/cdb_course_lesson][/cdb_course_lessons]
در LXC، هر کانتینر در یک فضای جداگانه از منابع سیستم اجرا میشود و به طور کامل از سایر کانتینرها ایزوله است. این ایزولهسازی بهواسطه ویژگیهای هسته لینوکس مانند cgroups (کنترل گروههای فرآیندها) و namespaces (فضاهای نام) امکانپذیر است. این ویژگیها، منابع سیستم مانند CPU، حافظه و شبکه را از یکدیگر جدا میکنند و اجازه میدهند که هر کانتینر به طور مستقل و بدون تداخل با دیگران اجرا شود.
کانتینرهای LXC معمولاً برای ایجاد محیطهای ایزوله با حداقل سربار و کارایی بالا استفاده میشوند. برخلاف Docker که معمولاً برای مدیریت و اجرای اپلیکیشنها استفاده میشود، LXC بیشتر برای اجرای سیستمهای کامل لینوکس داخل کانتینرها طراحی شده است.
جایگاه LXC در لینوکس
LXC یکی از تکنولوژیهای کلیدی در دنیای لینوکس است که از همان ابتدا در هسته لینوکس گنجانده شده و به طور مستقیم با امکانات هسته لینوکس ارتباط دارد. بهعنوان یک ابزار کانتینری سبکوزن، LXC نقش مهمی در دنیای سیستمهای مجازیسازی دارد و به دلیل بهرهبرداری از قابلیتهای هسته لینوکس مانند cgroups و namespaces، جایگاه ویژهای در بین فناوریهای مجازیسازی دارد.
در لینوکس، LXC بهعنوان یک روش ایزولهسازی منابع سیستم بدون نیاز به ماشینهای مجازی سنگین مطرح است. در واقع، LXC میتواند بهعنوان یک جایگزین یا مکمل برای ماشینهای مجازی در برخی از سناریوها، مانند توسعه نرمافزار و تست، استفاده شود. با توجه به قابلیتهای LXC، میتوان از آن برای مدیریت و اجرای چندین سیستمعامل بهصورت ایزوله در یک ماشین فیزیکی استفاده کرد.
جمعبندی
LXC یک فناوری مجازیسازی در سطح سیستمعامل است که امکان ایجاد و مدیریت کانتینرهای لینوکس ایزوله را فراهم میآورد. با استفاده از ویژگیهای هسته لینوکس مانند cgroups و namespaces، این فناوری به کاربران اجازه میدهد که محیطهای مجزا و سبکوزن را بدون نیاز به ماشینهای مجازی کامل اجرا کنند. LXC در لینوکس نقش مهمی در دنیای سیستمهای ایزوله و مجازیسازی ایفا میکند و به دلیل کارایی بالا و سبک بودن، برای بسیاری از سناریوها مانند توسعه، تست و اجرای سیستمهای کامل لینوکس مناسب است.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”معماری LXC (نقش cgroups و namespaces)” subtitle=”توضیحات کامل”]LXC از معماریهای پیشرفتهای برای ایزولهسازی منابع سیستم در محیط لینوکس بهره میبرد. دو ویژگی اساسی و کلیدی که پایهگذار این معماری هستند، cgroups و namespaces میباشند. این دو تکنولوژی از هسته لینوکس برای ارائه محیطهای ایزولهشده و سبکوزن استفاده میکنند.
۱. Namespaces
Namespaces ابزاری در لینوکس هستند که به فرآیندها (پروسسها) اجازه میدهند تا دید خود از منابع سیستم را تغییر دهند. هر نوع namespace یک فضا برای فرآیندهای داخل کانتینر ایجاد میکند که اجازه میدهد این فرآیندها فقط به منابع خاص خود دسترسی داشته باشند و از دید دیگر فرآیندها پنهان باشند.
LXC از پنج نوع namespace اصلی استفاده میکند:
- Mount Namespace: این namespace به کانتینر این امکان را میدهد که سیستم فایل خودش را داشته باشد. به این معنی که فایلها و دایرکتوریهای موجود در کانتینر از دایرکتوریهای سیستم میزبان کاملاً جدا هستند. این ایزولهسازی باعث میشود که تغییرات در سیستم فایل کانتینر تأثیری بر روی سیستم میزبان یا دیگر کانتینرها نداشته باشد.
- PID Namespace: این namespace به هر کانتینر این امکان را میدهد که شماره PID (Process ID) مخصوص به خود را داشته باشد. در نتیجه، کانتینرها نمیتوانند به فرآیندهای یکدیگر دسترسی پیدا کنند و از سیستم میزبان بهصورت ایزوله عمل میکنند.
- Network Namespace: این namespace به کانتینرها اجازه میدهد که شبکه جداگانهای داشته باشند. هر کانتینر میتواند IP، دستگاههای شبکه، و پورتهای خاص خود را داشته باشد، و به این ترتیب از شبکه میزبان و دیگر کانتینرها جدا میشود.
- UTS Namespace: این namespace به کانتینرها این امکان را میدهد که نامگذاری خاص خود را در اختیار داشته باشند، بهویژه برای نام ماشین و دامنه. این ایزولهسازی برای محیطهای شبکهای که به نامها و دامنههای مختلف نیاز دارند بسیار مفید است.
- IPC Namespace: این namespace منابعی مانند صفهای پیام، نیمهپردازشها (semantics) و حافظه اشتراکی (shared memory) را بهصورت ایزوله برای هر کانتینر فراهم میآورد.
۲. Cgroups (Control Groups)
Cgroups ابزاری در لینوکس هستند که به شما این امکان را میدهند که منابع سیستم را بهصورت محدود و کنترلشده تخصیص دهید. بهعبارتدیگر، cgroups به کانتینرها این امکان را میدهند که از منابعی مانند CPU، حافظه، I/O و شبکه بهصورت جداگانه استفاده کنند.
LXC از cgroups برای اعمال محدودیتها و تخصیص منابع استفاده میکند. بهعنوان مثال، شما میتوانید برای هر کانتینر مقدار مشخصی از CPU، حافظه و دیگر منابع سیستم را تخصیص دهید و از این طریق بهطور مؤثری مدیریت منابع را انجام دهید.
کاربردهای اصلی cgroups عبارتند از:
- محدودیت منابع: شما میتوانید برای هر کانتینر حد بالایی از مصرف منابع سیستم مانند CPU، حافظه و دیسک تعیین کنید. این ویژگی بهویژه در محیطهایی که چندین کانتینر در حال اجرا هستند و نیاز به مدیریت دقیق منابع دارند، مفید است.
- حسابرسی و مانیتورینگ: cgroups به شما امکان میدهند که مصرف منابع کانتینرها را نظارت کنید. میتوانید میزان مصرف منابع را برای هر کانتینر بهطور جداگانه مشاهده کنید و در صورت نیاز آن را تنظیم کنید.
- اولویتدهی به فرآیندها: در cgroups، میتوان اولویتبندی برای استفاده از منابع را تنظیم کرد. این ویژگی به شما اجازه میدهد که بعضی از کانتینرها را به منابع بیشتری اختصاص دهید.
ترکیب Namespaces و Cgroups در LXC
LXC از ترکیب namespaces و cgroups برای فراهم آوردن ایزولهسازی کامل و کنترل دقیق منابع استفاده میکند. این ترکیب به کانتینرها این امکان را میدهد که بهطور کاملاً ایزوله از یکدیگر و از سیستم میزبان عمل کنند، در حالی که میتوان منابع سیستم را بهصورت دقیق و پویا مدیریت کرد.
جمعبندی
معماری LXC بر اساس دو ویژگی کلیدی namespaces و cgroups ساخته شده است که هریک از آنها به نوبه خود ایزولهسازی و مدیریت منابع را فراهم میکنند. Namespaces به کانتینرها این امکان را میدهند که منابع سیستم را از یکدیگر جدا کنند و هر کانتینر فضای مخصوص به خود را داشته باشد. Cgroups نیز به شما این امکان را میدهند که مصرف منابع سیستم مانند CPU، حافظه و شبکه را بهطور دقیق محدود و مدیریت کنید. ترکیب این دو فناوری باعث میشود که LXC به ابزاری قدرتمند و انعطافپذیر برای اجرای سیستمهای ایزولهشده در لینوکس تبدیل شود.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تفاوت LXC با Docker و ماشینهای مجازی” subtitle=”توضیحات کامل”]LXC ، Docker و ماشینهای مجازی (VMs) سه فناوری مختلف هستند که برای جداسازی و مدیریت منابع سیستم به کار میروند. در این بخش به بررسی تفاوتهای هر کدام از این فناوریها خواهیم پرداخت.
LXC (Linux Containers)
LXC یک فناوری کانتینری است که به شما اجازه میدهد سیستمهای لینوکسی جداگانه را در یک هسته واحد اجرا کنید. برخلاف ماشینهای مجازی که هر کدام یک هسته کامل از سیستمعامل را اجرا میکنند، LXC تنها نیازمند یک هسته است و برای هر کانتینر منابع جداگانهای مانند فضای فایل، شبکه و PID را فراهم میکند.
ویژگیها:
- هسته اشتراکی: کانتینرها از یک هسته سیستمعامل استفاده میکنند، اما از یکدیگر جدا هستند.
- سبک و سریع: از آنجا که به هسته واحد سیستمعامل وابسته است، LXC نسبت به ماشینهای مجازی منابع کمتری مصرف میکند.
- پیکربندی ساده: به راحتی میتوان کانتینرها را با استفاده از ابزارهای LXC پیکربندی و مدیریت کرد.
- مناسب برای سیستمهای لینوکسی: LXC به طور خاص برای سیستمعاملهای لینوکس طراحی شده است.
Docker
Docker یکی از محبوبترین ابزارها برای استفاده از کانتینرها است که بر روی LXC بنا شده و تجربهای سادهتر و خودکارتر را برای کاربران فراهم میکند. در حالی که LXC برای جداسازی سیستمعاملهای کامل استفاده میشود، Docker به طور خاص برای جداسازی و مدیریت اپلیکیشنها طراحی شده است.
ویژگیها:
- متمرکز بر اپلیکیشنها: Docker برای استفاده از کانتینرها جهت اجرای اپلیکیشنها بهینهسازی شده است، به طوری که هر کانتینر فقط به یک اپلیکیشن و وابستگیهای آن اختصاص دارد.
- تصویرها (Images): Docker از تصاویر برای ایجاد کانتینرها استفاده میکند. این تصاویر میتوانند به راحتی به اشتراک گذاشته شوند و کانتینرها را با تنظیمات و نرمافزارهای آماده اجرا کنند.
- بسیار مناسب برای DevOps: Docker در فرآیندهای CI/CD بسیار مفید است زیرا میتوان اپلیکیشنها را به راحتی در محیطهای مختلف اجرا و تست کرد.
ماشینهای مجازی (VM)
ماشینهای مجازی (VMs) از فناوریهای مجازیسازی برای ایجاد ماشینهای مجزا و مستقل در یک سرور فیزیکی استفاده میکنند. هر ماشین مجازی دارای یک هسته، سیستمعامل و برنامههای خود است و به طور کامل از سیستمعامل میزبان جدا میشود.
ویژگیها:
- هسته جداگانه: هر ماشین مجازی به طور کامل شامل یک سیستمعامل مستقل و هسته خود است.
- مصرف منابع زیاد: به دلیل اجرای هسته و سیستمعامل کامل برای هر VM، مصرف منابع نسبت به LXC و Docker بسیار بیشتر است.
- انعطافپذیری بیشتر: VMها انعطافپذیری بیشتری دارند زیرا میتوانند سیستمعاملهای مختلف (مثل ویندوز، لینوکس، و غیره) را اجرا کنند.
مقایسه کلیدی:
| ویژگی | LXC | Docker | ماشینهای مجازی (VM) |
|---|---|---|---|
| نوع جداسازی | سیستمعامل کامل | اپلیکیشنها و وابستگیها | سیستمعامل کامل و مستقل |
| مصرف منابع | کم | کم | زیاد |
| تعداد هستههای سیستمعامل | یک هسته برای همه کانتینرها | یک هسته برای همه کانتینرها | هر VM یک هسته جداگانه |
| عملکرد | بسیار سریع | بسیار سریع | کندتر به دلیل استفاده از هستههای جداگانه |
| مناسب برای | اجرای سیستمهای کامل لینوکس | اجرای اپلیکیشنهای مخصوص و سبکتر | محیطهای نیازمند سیستمعاملهای جداگانه |
| پشتیبانی از سیستمعاملهای مختلف | محدود به لینوکس | محدود به سیستمعاملهای مشخص (معمولاً لینوکس) | پشتیبانی از سیستمعاملهای مختلف |
جمعبندی
در نهایت، تفاوتهای کلیدی بین LXC، Docker و ماشینهای مجازی به نحوه جداسازی، مصرف منابع، و استفاده از سیستمعاملهای جداگانه برمیگردد. LXC برای مدیریت سیستمهای کامل لینوکس طراحی شده و بسیار سبکتر از ماشینهای مجازی است. Docker بر روی اپلیکیشنها متمرکز است و برای DevOps و CI/CD ایدهآل است. ماشینهای مجازی به شما امکان اجرای سیستمعاملهای کامل با منابع بیشتری را میدهند، اما مصرف منابع بالاتری دارند. انتخاب بین این تکنولوژیها به نیازهای خاص پروژه و محیط اجرایی بستگی دارد.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 2. بررسی ساختار فایلها و مسیرهای مهم LXC”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”مسیر پیشفرض کانتینرها: /var/lib/lxc/” subtitle=”توضیحات کامل”]مسیر /var/lib/lxc/ مسیر پیشفرض برای ذخیرهسازی اطلاعات و فایلهای مربوط به کانتینرهای LXC در سیستمهای لینوکسی است. این مسیر حاوی اطلاعات و پیکربندیهای لازم برای راهاندازی و مدیریت کانتینرهای LXC میباشد.
ساختار مسیر /var/lib/lxc/
در داخل این مسیر، هر کانتینر به طور جداگانه پوشهای برای خود دارد که شامل تمامی اطلاعات و تنظیمات مربوط به آن کانتینر است. به طور معمول، این ساختار شامل موارد زیر میباشد:
- پوشه کانتینرها: هر کانتینر به صورت یک پوشه مستقل در این مسیر قرار میگیرد. نام این پوشهها معمولاً مشابه نام کانتینر است.
- پیکربندی کانتینر: در داخل پوشه هر کانتینر، فایلهای پیکربندی مانند
configقرار دارند که تنظیمات مختلف کانتینر را شامل میشود. - دستورات و فایلهای سیستم: این پوشهها شامل فایلهای سیستمعاملی هستند که برای اجرای کانتینر به آنها نیاز است.
- سیستم فایل کانتینر: اگر از روشهایی مانند btrfs یا ZFS برای ذخیرهسازی استفاده کنید، فایلهای سیستمعاملی کانتینر به طور جداگانه در این بخش ذخیره خواهند شد.
ساختار و پیکربندی فایلهای موجود در پوشه کانتینر
درون پوشه هر کانتینر معمولاً فایلهای زیر یافت میشود:
- config: فایل پیکربندی اصلی کانتینر است که تنظیمات مربوط به منابع سیستم مانند پردازنده، حافظه، شبکه و سیستم فایلها را تعیین میکند.
مسیر این فایل به طور پیشفرض به شکل
/var/lib/lxc/{container_name}/configاست. - rootfs: این بخش شامل ریشه سیستمفایل کانتینر است که به عنوان محیط اجرایی کانتینر عمل میکند.
- log: برخی از فایلهای لاگ مربوط به وضعیت اجرای کانتینر ممکن است در این پوشه ذخیره شوند.
مثالهایی از استفاده و دستورات مرتبط
برای مثال، فرض کنید میخواهید یک کانتینر جدید بسازید و میخواهید مسیر پیشفرض کانتینرها را مشاهده کنید. این دستور را میتوانید اجرا کنید:
lxc launch ubuntu:20.04 my-container
در اینجا، کانتینر my-container در مسیر /var/lib/lxc/my-container/ ساخته خواهد شد و شامل تمامی پیکربندیها و فایلهای مورد نیاز برای اجرا خواهد بود.
اگر بخواهید تغییرات خاصی در پیکربندی کانتینر اعمال کنید، میتوانید فایل config را ویرایش کنید:
nano /var/lib/lxc/my-container/config
جمعبندی
مسیر /var/lib/lxc/ محل پیشفرض ذخیرهسازی و پیکربندیهای کانتینرهای LXC است که شامل تمامی اطلاعات، پیکربندیها و سیستمفایلهای مورد نیاز برای اجرای هر کانتینر میباشد. این مسیر به شما امکان مدیریت و دسترسی به تمامی اجزای کانتینر را فراهم میکند.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”فایل پیکربندی کانتینرها: /var/lib/lxc//config” subtitle=”توضیحات کامل”]فایل پیکربندی هر کانتینر LXC در مسیر /var/lib/lxc/<container-name>/config ذخیره میشود و شامل تنظیمات مختلفی است که نحوه اجرای کانتینر را کنترل میکند. این فایل نقش حیاتی در راهاندازی و پیکربندی کانتینر ایفا میکند و به طور مستقیم با منابع سیستم مانند حافظه، پردازنده، شبکه و سیستمفایلها در ارتباط است.
ساختار و محتوای فایل پیکربندی
فایل پیکربندی کانتینر به طور معمول حاوی بخشهایی است که به شما این امکان را میدهد تا منابع مختلف سیستم را برای کانتینر تنظیم کنید. این تنظیمات میتوانند شامل موارد زیر باشند:
- تنظیمات شبکه:
- تنظیمات مربوط به نحوه اتصال کانتینر به شبکه، از جمله استفاده از bridge داخلی یا اتصال به LAN.
- مثال:
lxc.network.type = veth lxc.network.link = lxcbr0 lxc.network.flags = up
- تنظیمات سیستم فایل:
- نحوه اتصال سیستم فایل کانتینر، مانند استفاده از
tmpfs,btrfs,ZFSو غیره. - مثال:
lxc.rootfs = /var/lib/lxc/my-container/rootfs
- نحوه اتصال سیستم فایل کانتینر، مانند استفاده از
- تنظیمات منابع سیستم:
- تنظیمات مرتبط با تخصیص پردازنده، حافظه و سایر منابع سیستم.
- مثال:
lxc.cgroup.memory.limit_in_bytes = 512M lxc.cgroup.cpu.shares = 512
- تنظیمات امنیتی:
- تنظیمات مربوط به محدود کردن دسترسیها و ارتقاء امنیت کانتینر.
- مثال:
lxc.seccomp.profile = /etc/lxc/default.seccomp lxc.apparmor.profile = unconfined
- تنظیمات شروع و توقف کانتینر:
- تنظیمات مربوط به نحوه شروع و متوقف کردن کانتینر، از جمله حالتهای مختلف اجرا.
- مثال:
lxc.start.auto = 1 lxc.stop.timeout = 30
ویرایش فایل پیکربندی
برای ویرایش فایل پیکربندی کانتینر، کافی است از ویرایشگر متن خود استفاده کنید. به طور مثال، برای ویرایش فایل کانتینر my-container میتوانید دستور زیر را وارد کنید:
nano /var/lib/lxc/my-container/config
در این فایل میتوانید تغییرات لازم را اعمال کرده و تنظیمات مختلفی مانند منابع، شبکه و سایر پارامترها را تنظیم کنید.
مثالهایی از تنظیمات مختلف در فایل پیکربندی
- تنظیم حافظه برای کانتینر: برای محدود کردن حافظه کانتینر به 1 گیگابایت، میتوانید این دستور را در فایل پیکربندی قرار دهید:
lxc.cgroup.memory.limit_in_bytes = 1G - تنظیم پردازنده برای کانتینر: برای تخصیص درصد خاصی از پردازنده به کانتینر، این کد را استفاده کنید:
lxc.cgroup.cpu.shares = 1024 - تنظیمات شبکه: به منظور اتصال کانتینر به شبکه
lxcbr0به عنوان bridge داخلی، از کد زیر استفاده میکنید:lxc.network.type = veth lxc.network.link = lxcbr0 lxc.network.flags = up - تنظیمات سیستمفایل: برای استفاده از یک سیستمفایل خاص برای کانتینر، میتوانید مسیری مشابه این را قرار دهید:
lxc.rootfs = /var/lib/lxc/my-container/rootfs
جمعبندی
فایل پیکربندی /var/lib/lxc/<container-name>/config حاوی تنظیمات مختلف برای مدیریت منابع، امنیت، شبکه و سیستمفایل کانتینر LXC است. این فایل به شما این امکان را میدهد که نحوه اجرای کانتینر را به دقت تنظیم کنید و پارامترهای مختلفی را برای عملکرد بهینه کانتینر مدیریت کنید. ویرایش این فایل به شما این امکان را میدهد که هر کانتینر را بر اساس نیازهای خاص خود پیکربندی کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”لاگهای مربوط به هر کانتینر: /var/log/lxc/.log” subtitle=”توضیحات کامل”]کانتینرهای LXC برای ثبت لاگها و گزارشهای اجرایی خود از فایلهای لاگ استفاده میکنند. این فایلها اطلاعات حیاتی از جمله خطاها، هشدارها، وضعیتها و سایر رویدادهای اجرایی کانتینر را ذخیره میکنند. مسیر پیشفرض برای ذخیره این لاگها در سیستم معمولاً /var/log/lxc/<container-name>.log است.
ساختار و محتوای فایل لاگ
فایل لاگ کانتینر LXC حاوی پیامهای مختلفی است که به شما کمک میکند مشکلات را شناسایی کرده و عملکرد کانتینر را رصد کنید. این لاگها به طور معمول شامل بخشهای زیر هستند:
- پیامهای خطا (Errors):
- اگر کانتینر با مشکلی مواجه شود، خطاها به طور واضح در لاگ ثبت میشوند.
- مثال:
lxc 12345 2025/04/06 14:30:01 error: lxc_start: failed to run the container
- پیامهای هشدار (Warnings):
- هشدارهایی که به شما اطلاع میدهند که ممکن است مشکلی وجود داشته باشد، اما کانتینر همچنان در حال اجرا است.
- مثال:
lxc 12345 2025/04/06 14:30:02 warning: lxc_network: config file not found
- پیامهای اطلاعاتی (Information):
- این پیامها اطلاعات عمومی و وضعیتهای اجرایی کانتینر را نشان میدهند.
- مثال:
lxc 12345 2025/04/06 14:30:03 info: lxc_start: starting container 'my-container'
- پیامهای دیباگ (Debug):
- در صورت فعال بودن حالت دیباگ، پیامهای دقیقتری در لاگ ثبت میشوند که بیشتر به توسعهدهندگان کمک میکند.
- مثال:
lxc 12345 2025/04/06 14:30:04 debug: lxc_container: running pre-start hook
- پیامهای وضعیت (Status):
- نمایش وضعیتهای مختلف کانتینر، مانند راهاندازی، توقف یا تغییر وضعیت.
- مثال:
lxc 12345 2025/04/06 14:30:05 status: container 'my-container' started
مشاهده و تحلیل لاگها
برای مشاهده لاگهای کانتینر، میتوانید از ویرایشگر متن یا دستور cat, tail یا less استفاده کنید. برای مثال:
- مشاهده کل لاگ:
cat /var/log/lxc/my-container.log - مشاهده آخرین 20 خط از لاگ:
tail -n 20 /var/log/lxc/my-container.log - مشاهده لاگ به صورت زنده و در حال تغییر:
tail -f /var/log/lxc/my-container.log
این دستورات به شما امکان میدهند تا به راحتی به اطلاعات و لاگهای مرتبط با کانتینر دسترسی داشته باشید و وضعیت یا خطاهای آن را پیگیری کنید.
تغییر تنظیمات لاگ
در صورتی که نیاز به تنظیمات خاصی برای لاگها دارید، میتوانید تنظیمات مربوط به ذخیره لاگها را در فایل پیکربندی کانتینر (موجود در /var/lib/lxc/<container-name>/config) اضافه کنید. به عنوان مثال، میتوانید سطح لاگ را تغییر دهید یا نوع خاصی از لاگ را فعال کنید:
lxc.log.level = INFO
lxc.log.file = /var/log/lxc/my-container.log
این تنظیمات باعث میشود که سطح لاگ به INFO تغییر کند و تمامی پیامهای اطلاعاتی در فایل لاگ ذخیره شوند.
جمعبندی
فایلهای لاگ کانتینرهای LXC که در مسیر /var/log/lxc/<container-name>.log قرار دارند، به شما کمک میکنند تا وضعیت، خطاها، هشدارها و سایر رویدادهای اجرایی کانتینر را بررسی کنید. این لاگها میتوانند نقش کلیدی در عیبیابی و نظارت بر عملکرد کانتینر ایفا کنند. برای مشاهده، تحلیل و تغییر تنظیمات لاگها، ابزارهای مختلفی مانند cat, tail, و less قابل استفاده هستند و شما میتوانید تنظیمات مربوط به لاگها را در فایل پیکربندی کانتینر تنظیم کنید.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 3. ایجاد کانتینر با lxc-create”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”بررسی آپشنهای –template و –name و –config” subtitle=”توضیحات کامل”]در LXC، زمانی که یک کانتینر جدید ایجاد میکنید، میتوانید از آپشنهای مختلفی استفاده کنید تا فرآیند پیکربندی کانتینر را بهصورت دقیقتری کنترل کنید. این آپشنها عبارتند از --templateو --name و --config. در این بخش به توضیح هرکدام از این آپشنها خواهیم پرداخت و نحوه استفاده از آنها را با مثالهای عملی بررسی خواهیم کرد.
آپشن –template
آپشن --template به شما امکان میدهد که هنگام ایجاد یک کانتینر از یک الگوی (template) خاص استفاده کنید. این الگو میتواند سیستمعاملی مانند Ubuntu، CentOS یا Debian باشد که بهصورت آماده برای استفاده در کانتینر موجود است. زمانی که از این آپشن استفاده میکنید، LXC کانتینر را با استفاده از سیستمعامل مورد نظر بهطور خودکار پیکربندی میکند.
نحوه استفاده:
lxc launch ubuntu:20.04 my-container --template=ubuntu
در این مثال:
ubuntu:20.04نام الگوی کانتینر (در اینجا Ubuntu نسخه 20.04) است.my-containerنام کانتینر ایجاد شده است.--template=ubuntuالگوی مورد نظر را مشخص میکند.
آپشن –name
آپشن --name به شما اجازه میدهد نام خاصی برای کانتینر تعیین کنید. این آپشن بسیار مهم است زیرا هر کانتینر باید یک نام منحصر به فرد داشته باشد تا بتوانید آن را شناسایی کنید و از سایر کانتینرها متمایز کنید.
نحوه استفاده:
lxc launch ubuntu:20.04 my-container --name=my-custom-container
در این مثال:
my-containerنام اصلی کانتینر است که در اینجا به نامmy-custom-containerتغییر داده شده است.- این نام از آن پس برای شناسایی کانتینر در دستورات مختلف استفاده خواهد شد.
آپشن –config
آپشن --config به شما این امکان را میدهد که فایل پیکربندی خاصی را برای کانتینر مشخص کنید. این آپشن میتواند برای تنظیمات دقیقتری استفاده شود که در فایل پیکربندی اصلی کانتینر قرار ندارد. با استفاده از --config میتوانید مقادیر اضافی را در هنگام ایجاد کانتینر وارد کنید.
نحوه استفاده:
lxc launch ubuntu:20.04 my-container --config=lxc.network.type=bridge
در این مثال:
lxc.network.type=bridgeیک تنظیم خاص است که نوع شبکه کانتینر را بهbridgeتغییر میدهد.--configبه شما این امکان را میدهد که پارامترهای خاص دیگری را نیز به فایل پیکربندی کانتینر اضافه کنید.
جمعبندی
آپشنهای --templateو --name و --config ابزارهای قدرتمندی برای سفارشیسازی ایجاد و پیکربندی کانتینرها در LXC هستند.
- با استفاده از
--templateمیتوانید از الگوهای آماده سیستمعامل برای ایجاد کانتینر استفاده کنید. - با
--nameنام کانتینر را مشخص میکنید تا بتوانید به راحتی آن را شناسایی کنید. - و با
--configمیتوانید تنظیمات اضافی و خاصی را برای پیکربندی دقیقتر کانتینر وارد کنید.
این آپشنها به شما کمک میکنند که به راحتی فرآیند ایجاد و مدیریت کانتینرها را سفارشیسازی کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”معرفی Templateهای موجود (ubuntu, busybox, centos و…)” subtitle=”توضیحات کامل”]در LXC، برای ایجاد کانتینرها از قالبها یا templateهای مختلف استفاده میشود که بهطور پیشفرض در سیستم موجود هستند. این templateها سیستمعاملهای مختلفی را شبیهسازی میکنند و به شما این امکان را میدهند که بهراحتی کانتینرهایی را با سیستمعاملهای مختلف ایجاد کنید. در این بخش به معرفی برخی از templateهای محبوب مانند ubuntu, busybox, و centos خواهیم پرداخت و نحوه استفاده از آنها را بررسی خواهیم کرد.
1. Ubuntu Template
Ubuntu یکی از محبوبترین سیستمعاملهای لینوکسی است که بهعنوان یک template برای ایجاد کانتینرها در LXC بسیار استفاده میشود. این template شامل سیستمعاملی با تمام قابلیتهای پایه Ubuntu است که میتوان از آن برای اجرای اپلیکیشنها و سرویسهای مختلف استفاده کرد.
نحوه استفاده: برای ایجاد کانتینری با سیستمعامل Ubuntu از template مربوطه میتوانید از دستور زیر استفاده کنید:
lxc launch ubuntu:20.04 my-ubuntu-container
در این مثال:
ubuntu:20.04به معنای استفاده از نسخه 20.04 از سیستمعامل Ubuntu است.my-ubuntu-containerنام کانتینری است که ایجاد خواهد شد.
2. BusyBox Template
BusyBox یک سیستمعامل سبک و کمحجم است که معمولاً برای محیطهای embedded و سیستمهای کوچک استفاده میشود. این template بهطور معمول در شرایطی استفاده میشود که نیاز به یک سیستمعامل ساده و کمحجم باشد. BusyBox شامل تعدادی ابزار ضروری برای کارهای پایه است.
نحوه استفاده: برای ایجاد کانتینری با سیستمعامل BusyBox میتوانید از دستور زیر استفاده کنید:
lxc launch busybox:latest my-busybox-container
در این مثال:
busybox:latestبه معنای استفاده از جدیدترین نسخه از سیستمعامل BusyBox است.my-busybox-containerنام کانتینری است که ایجاد خواهد شد.
3. CentOS Template
CentOS یکی از توزیعهای محبوب لینوکس است که بر پایه Red Hat Enterprise Linux (RHEL) ساخته شده است. این template برای کسانی که بهدنبال یک سیستمعامل پایدار و با پشتیبانی طولانیمدت هستند، مناسب است. CentOS بهطور معمول در محیطهای سروری و تولیدی استفاده میشود.
نحوه استفاده: برای ایجاد کانتینری با سیستمعامل CentOS میتوانید از دستور زیر استفاده کنید:
lxc launch centos:7 my-centos-container
در این مثال:
centos:7به معنای استفاده از نسخه 7 از سیستمعامل CentOS است.my-centos-containerنام کانتینری است که ایجاد خواهد شد.
4. Debian Template
Debian یکی دیگر از توزیعهای محبوب لینوکس است که بهطور گسترده در سرورها و سیستمهای مختلف استفاده میشود. این template معمولاً برای ایجاد سیستمهای پایهای با ویژگیهای پیشرفته و پایداری بالا استفاده میشود. Debian بهطور معمول در محیطهایی که نیاز به ثبات و انعطافپذیری دارند، مناسب است.
نحوه استفاده: برای ایجاد کانتینری با سیستمعامل Debian میتوانید از دستور زیر استفاده کنید:
lxc launch debian:10 my-debian-container
در این مثال:
debian:10به معنای استفاده از نسخه 10 از سیستمعامل Debian است.my-debian-containerنام کانتینری است که ایجاد خواهد شد.
5. Alpine Template
Alpine Linux یک سیستمعامل سبک و امن است که برای محیطهای کاربردی مانند داکر و محیطهای کلاسترینگ مناسب است. این template برای کاربران حرفهای و سیستمهایی که نیاز به یک سیستمعامل سبک و امن دارند، مناسب است.
نحوه استفاده: برای ایجاد کانتینری با سیستمعامل Alpine میتوانید از دستور زیر استفاده کنید:
lxc launch alpine:latest my-alpine-container
در این مثال:
alpine:latestبه معنای استفاده از جدیدترین نسخه از سیستمعامل Alpine است.my-alpine-containerنام کانتینری است که ایجاد خواهد شد.
جمعبندی
در LXC، با استفاده از templateهای مختلف، میتوانید کانتینرهایی با سیستمعاملهای مختلف مانند Ubuntu، BusyBox، CentOS، Debian، و Alpine ایجاد کنید. این templateها هرکدام ویژگیها و کاربردهای خاص خود را دارند:
Ubuntuبرای محیطهای عمومی و توسعه.BusyBoxبرای سیستمهای کوچک و کمحجم.CentOSبرای محیطهای تولیدی و سروری.Debianبرای سیستمهای پایدار و انعطافپذیر.Alpineبرای نیازهای سبک و امن.
استفاده از این templateها به شما این امکان را میدهد که بهراحتی کانتینرهایی با سیستمعاملهای مختلف ایجاد کرده و از آنها در پروژههای خود استفاده کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”مثال عملی از ساخت کانتینر با توزیع دلخواه” subtitle=”توضیحات کامل”]در این قسمت، قصد داریم یک کانتینر LXC با توزیع دلخواه (مثلاً توزیع Debian) بسازیم و مراحل مختلف آن را بهصورت عملی نشان دهیم. مراحل بهطور کامل و دقیق توضیح داده میشود و شامل دستوراتی است که باید در خط فرمان وارد کنید.
مراحل ایجاد کانتینر با توزیع دلخواه:
- انتخاب توزیع و نسخه مورد نظر
ابتدا باید مشخص کنید که چه توزیعی را میخواهید در کانتینر خود نصب کنید. بهطور مثال، ما از توزیع Debian نسخه 10 استفاده خواهیم کرد. توزیعها معمولاً از templateهای آماده LXC استفاده میکنند، که بهراحتی قابل دسترس هستند.
- اجرای دستور برای ایجاد کانتینر
برای ایجاد یک کانتینر جدید با توزیع دلخواه، دستور زیر را اجرا میکنیم:
lxc launch debian:10 my-debian-containerدر این دستور:
debian:10نشاندهنده استفاده از نسخه 10 از توزیع Debian است.my-debian-containerنام کانتینر جدیدی است که میخواهیم ایجاد کنیم.
این دستور باعث میشود که کانتینر جدید با توزیع Debian 10 راهاندازی شود و تمام فایلهای پیکربندی بهطور خودکار در مسیرهای مشخص ایجاد شوند.
- بررسی وضعیت کانتینر
پس از ایجاد کانتینر، میتوانیم وضعیت آن را با استفاده از دستور زیر بررسی کنیم:
lxc listاین دستور فهرستی از تمام کانتینرهای فعال و غیر فعال موجود در سیستم را نمایش میدهد. در این فهرست، کانتینر
my-debian-containerنیز باید نشان داده شود.
- ورود به کانتینر و بررسی پیکربندی آن
برای وارد شدن به داخل کانتینر، از دستور زیر استفاده میکنیم:
lxc exec my-debian-container -- /bin/bashاین دستور شما را به محیط خط فرمان کانتینر
my-debian-containerوارد میکند. در داخل کانتینر، میتوانید دستورات مختلفی را اجرا کرده و پیکربندیهای لازم را انجام دهید.برای مثال، برای بررسی نسخه سیستمعامل داخل کانتینر میتوانید دستور زیر را اجرا کنید:
cat /etc/os-releaseاین دستور اطلاعات مربوط به نسخه سیستمعامل داخل کانتینر را نمایش میدهد.
- مدیریت و پیکربندی بیشتر
پس از ورود به کانتینر، میتوانید بستهها و نرمافزارهای مورد نظر خود را نصب کرده و پیکربندیهای لازم را انجام دهید. بهعنوان مثال، برای نصب Nginx در داخل کانتینر Debian دستور زیر را وارد میکنیم:
apt update apt install nginxبا این دستور، Nginx بر روی کانتینر نصب خواهد شد و میتوانید آن را پیکربندی کرده و استفاده کنید.
- توقف و حذف کانتینر
اگر دیگر به کانتینر نیازی ندارید، میتوانید آن را متوقف کرده و حذف کنید. برای متوقف کردن کانتینر از دستور زیر استفاده کنید:
lxc stop my-debian-containerسپس برای حذف کانتینر بهطور کامل، از دستور زیر استفاده کنید:
lxc delete my-debian-containerاین دستورات کانتینر را متوقف کرده و سپس حذف میکنند.
جمعبندی
در این بخش، مراحل کامل ایجاد یک کانتینر با توزیع دلخواه (Debian 10) را بررسی کردیم. این مراحل شامل ایجاد کانتینر، ورود به آن، نصب نرمافزار، و همچنین مدیریت و حذف کانتینرها بود. این مثال عملی به شما این امکان را میدهد که بهراحتی کانتینرهایی با توزیعهای مختلف را در LXC ایجاد کرده و از آنها در پروژههای مختلف استفاده کنید.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 4. مدیریت کانتینرها”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”لیستکردن کانتینرها با lxc-ls” subtitle=”توضیحات کامل”]در LXC، برای مشاهده و لیست کردن تمامی کانتینرها میتوانید از دستور lxc-ls استفاده کنید. این دستور به شما امکان میدهد تا فهرستی از تمامی کانتینرهای موجود روی سیستم را مشاهده کرده و وضعیت هر کدام را بررسی کنید.
در این بخش، نحوه استفاده از این دستور و گزینههای مختلف آن را بررسی خواهیم کرد.
1. دستور پایه برای لیست کردن کانتینرها:
برای نمایش لیست تمام کانتینرهای موجود، از دستور زیر استفاده کنید:
lxc-ls
این دستور فقط نام کانتینرها را نمایش میدهد.
2. نمایش وضعیت کانتینرها:
برای اینکه علاوه بر نام، وضعیت هر کانتینر نیز نشان داده شود (فعال یا غیرفعال)، میتوانید از گزینه -f یا --fancy استفاده کنید:
lxc-ls -f
خروجی این دستور، اطلاعات بیشتری مانند وضعیت (running یا stopped) و دیگر جزئیات مربوط به هر کانتینر را نمایش میدهد.
3. نمایش تنها کانتینرهای در حال اجرا:
اگر تنها میخواهید کانتینرهایی که در حال اجرا هستند را مشاهده کنید، از گزینه -r استفاده کنید:
lxc-ls -r
این دستور فقط کانتینرهایی که در حال حاضر در حال اجرا هستند را لیست میکند.
4. لیست کانتینرهای توقفیافته:
برای لیست کردن تنها کانتینرهایی که متوقف شدهاند (stopped)، از گزینه -s استفاده کنید:
lxc-ls -s
این دستور تنها کانتینرهایی را که در وضعیت متوقف شده قرار دارند، نمایش میدهد.
5. نمایش اطلاعات کانتینرها بهصورت JSON:
در صورتی که بخواهید خروجی دستورات را به فرمت JSON دریافت کنید (برای استفاده در اسکریپتها یا پردازشهای بیشتر)، میتوانید از گزینه -j استفاده کنید:
lxc-ls -j
این دستور اطلاعات کانتینرها را به فرمت JSON نمایش میدهد که برای پردازشهای خودکار یا ذخیرهسازی دادهها مناسب است.
6. استفاده از الگو (Pattern Matching):
برای لیست کردن کانتینرهایی که مطابق با یک الگو (pattern) خاص هستند، میتوانید از -f همراه با یک عبارت الگوی مانند استفاده کنید:
lxc-ls -f | grep <pattern>
در اینجا <pattern> میتواند هر عبارت خاصی باشد که میخواهید کانتینرهای شما با آن تطابق داشته باشند (مثل نام یا بخشی از نام).
جمعبندی
در این قسمت، نحوه استفاده از دستور lxc-ls برای لیست کردن کانتینرها و مشاهده جزئیات مختلف آنها بررسی شد. این دستور امکانات مختلفی برای مشاهده وضعیت کانتینرها، اعمال فیلترها و فرمتهای مختلف خروجی فراهم میکند.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”بررسی وضعیت کانتینر با lxc-info” subtitle=”توضیحات کامل”]دستور lxc-info یکی از دستورات کاربردی در LXC است که به شما این امکان را میدهد تا اطلاعات و وضعیت دقیق یک کانتینر را مشاهده کنید. این دستور اطلاعاتی مانند وضعیت کانتینر (در حال اجرا یا متوقف شده)، شناسه پروسه (PID)، زمان راهاندازی و دیگر جزئیات مرتبط را نمایش میدهد.
1. دستور پایه برای بررسی وضعیت کانتینر:
برای مشاهده اطلاعات پایه یک کانتینر خاص، دستور زیر را وارد کنید:
lxc-info -n <container-name>
در اینجا <container-name> نام کانتینری است که میخواهید وضعیت آن را بررسی کنید. این دستور اطلاعات اولیهای از جمله وضعیت (running یا stopped)، PID و زمان راهاندازی کانتینر را نشان میدهد.
2. نمایش جزئیات بیشتر (جزئیات پروسه):
اگر میخواهید اطلاعات بیشتری از پروسه مربوط به کانتینر و وضعیت آن دریافت کنید، میتوانید از گزینه -i استفاده کنید:
lxc-info -n <container-name> -i
این دستور اطلاعاتی مانند PID کانتینر، زمان شروع، و مسیرهای مختلف سیستم فایل کانتینر را نمایش میدهد.
3. نمایش فقط وضعیت کانتینر:
برای مشاهده تنها وضعیت کانتینر (آیا در حال اجرا است یا متوقف شده)، میتوانید از گزینه -s استفاده کنید:
lxc-info -n <container-name> -s
این دستور فقط وضعیت کانتینر (running یا stopped) را نمایش میدهد.
4. بررسی وضعیت تمامی کانتینرها:
در صورتی که میخواهید وضعیت تمامی کانتینرهای موجود را بهطور همزمان بررسی کنید، دستور زیر را وارد کنید:
lxc-info -n $(lxc-ls)
این دستور وضعیت تمامی کانتینرها را که بهصورت همزمان اجرا میشوند، نمایش میدهد.
5. نمایش اطلاعات کانتینر از نظر مصرف منابع:
برای مشاهده اطلاعات مربوط به مصرف منابع کانتینر، میتوانید از گزینه -r برای بررسی وضعیت منابع سیستم استفاده کنید:
lxc-info -n <container-name> -r
این دستور اطلاعاتی مثل استفاده از CPU و حافظه توسط کانتینر را نمایش میدهد.
جمعبندی
در این بخش، نحوه استفاده از دستور lxc-info برای بررسی وضعیت کانتینرها توضیح داده شد. این دستور ابزار مفیدی برای مشاهده جزئیات مختلف یک کانتینر، از جمله وضعیت آن، PID، زمان راهاندازی، مصرف منابع و دیگر اطلاعات مرتبط است. با استفاده از گزینههای مختلف این دستور میتوانید گزارشهای دقیقی از وضعیت کانتینرها در سیستم خود دریافت کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”اجرای کانتینر با lxc-start” subtitle=”توضیحات کامل”]دستور lxc-start در LXC برای شروع و اجرای کانتینرها بهکار میرود. این دستور به شما این امکان را میدهد که یک کانتینر را بهطور مستقیم از خط فرمان راهاندازی کنید. با استفاده از این دستور، میتوانید کانتینر را در پسزمینه یا بهصورت تعاملی اجرا کنید.
1. اجرای کانتینر بهطور پیشفرض:
برای راهاندازی کانتینر بهطور پیشفرض (بدون تنظیمات اضافی)، کافی است از دستور زیر استفاده کنید:
lxc-start -n <container-name>
در اینجا <container-name> نام کانتینری است که میخواهید آن را راهاندازی کنید. این دستور کانتینر را در حالت پیشفرض، یعنی در پسزمینه، اجرا میکند.
2. اجرای کانتینر بهصورت تعاملی (interactive):
اگر میخواهید کانتینر را بهصورت تعاملی اجرا کنید و به ترمینال کانتینر دسترسی پیدا کنید، از گزینه -i بههمراه -t استفاده کنید:
lxc-start -n <container-name> -i -t
این دستور باعث میشود که کانتینر بهصورت تعاملی اجرا شود و شما به داخل محیط کانتینر وارد شوید. در این حالت میتوانید دستورات را مستقیماً در داخل کانتینر اجرا کنید.
3. اجرای کانتینر در پسزمینه:
برای راهاندازی کانتینر در پسزمینه (بدون دسترسی به ترمینال)، میتوانید از دستور زیر استفاده کنید:
lxc-start -n <container-name> -d
با استفاده از گزینه -d کانتینر در پسزمینه شروع به کار خواهد کرد و شما بهطور مستقیم به ترمینال سیستم میزبان باز میگردید.
4. مشاهده وضعیت کانتینر بعد از اجرای آن:
برای بررسی وضعیت کانتینر پس از اجرای آن، میتوانید از دستور lxc-info استفاده کنید:
lxc-info -n <container-name>
این دستور اطلاعات وضعیت کانتینر را به شما نمایش خواهد داد، از جمله اینکه کانتینر در حال اجرا است یا متوقف شده است.
5. مشاهده لاگهای کانتینر:
برای مشاهده لاگهای کانتینر در هنگام اجرا و بررسی مشکلات احتمالی، میتوانید به فایل لاگ کانتینر مراجعه کنید:
cat /var/log/lxc/<container-name>.log
این دستور لاگهای مربوط به کانتینر را نمایش میدهد و به شما کمک میکند تا مشکلات احتمالی را شناسایی کنید.
6. تنظیمات اضافی هنگام راهاندازی کانتینر:
شما میتوانید تنظیمات اضافی را بهصورت دستی از طریق فایل پیکربندی کانتینر تغییر دهید یا در هنگام راهاندازی از گزینههای اضافی استفاده کنید. برای مثال، اگر بخواهید منابع خاصی مانند CPU یا حافظه را برای کانتینر محدود کنید، باید از دستور lxc-start بههمراه تنظیمات موردنظر استفاده کنید. به عنوان مثال:
lxc-start -n <container-name> -l INFO -o /var/log/lxc/<container-name>.log
در این دستور، با استفاده از گزینههای -l INFO سطح لاگها را به INFO تغییر داده و با استفاده از گزینه -o مسیر فایل لاگ را مشخص میکنید.
جمعبندی
در این بخش، نحوه استفاده از دستور lxc-start برای اجرای کانتینرها توضیح داده شد. این دستور به شما این امکان را میدهد که کانتینرها را در حالتهای مختلف اجرا کنید، اعم از پیشفرض، تعاملی یا در پسزمینه. با استفاده از این دستور میتوانید به راحتی کانتینرها را راهاندازی کنید و از قابلیتهای مختلف آن برای نظارت و مدیریت بهتر کانتینرها استفاده کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”توقف و حذف کانتینرها با lxc-stop و lxc-destroy” subtitle=”توضیحات کامل”]در LXC، پس از ایجاد و راهاندازی کانتینرها، ممکن است نیاز به توقف یا حذف آنها پیدا کنید. برای این کار از دستورات lxc-stop و lxc-destroy استفاده میشود. در این بخش نحوه استفاده از این دستورات و کاربردهای آنها توضیح داده خواهد شد.
1. توقف کانتینر با lxc-stop
دستور lxc-stop برای توقف کانتینرها بهکار میرود. این دستور اجازه میدهد تا کانتینر بهصورت نرم و امن متوقف شود، بهطوری که تمام فرآیندهای در حال اجرا در داخل آن بهدرستی خاتمه یابند.
برای توقف یک کانتینر میتوانید از دستور زیر استفاده کنید:
lxc-stop -n <container-name>
در این دستور، <container-name> باید با نام کانتینری که قصد دارید متوقف کنید جایگزین شود. این دستور کانتینر را بهصورت نرم و در حالت پیشفرض متوقف میکند.
2. توقف کانتینر با استفاده از گزینههای اضافی:
در صورتی که نیاز دارید کانتینر را با تنظیمات خاصی متوقف کنید، میتوانید از گزینههای اضافی استفاده کنید:
- برای توقف کانتینر بهصورت سریع و بدون منتظر ماندن برای خاتمه یافتن فرآیندها:
lxc-stop -n <container-name> -k
گزینه -k باعث میشود که کانتینر فوراً متوقف شود و فرآیندهای آن بهطور اجباری خاتمه یابند.
- برای توقف کانتینر با دستوراتی برای زمانبندی:
lxc-stop -n <container-name> -t <seconds>
در اینجا -t زمان بهثانیه را مشخص میکند که پس از آن کانتینر بهطور خودکار متوقف خواهد شد.
3. حذف کانتینر با lxc-destroy
پس از توقف یک کانتینر، در صورتی که بخواهید کانتینر را بهطور کامل حذف کنید (شامل تمام فایلها و پیکربندیهای مربوط به آن)، از دستور lxc-destroy استفاده میشود.
برای حذف یک کانتینر، دستور زیر را وارد کنید:
lxc-destroy -n <container-name>
این دستور کانتینر را حذف میکند و تمام فایلها و پیکربندیهای مربوط به آن را از روی سیستم پاک میکند.
4. حذف کانتینر با استفاده از گزینههای اضافی:
- برای حذف کانتینر بهصورت اجباری بدون درخواست تأیید:
lxc-destroy -n <container-name> -f
گزینه -f باعث میشود که کانتینر بدون درخواست تأیید از کاربر حذف شود.
- برای حذف کانتینر و پیکربندیهای مربوط به آن در مسیر خاص:
lxc-destroy -n <container-name> -p /path/to/config
در اینجا میتوانید مسیر فایلهای پیکربندی را بهطور خاص مشخص کنید تا فقط کانتینر و پیکربندیهای مربوط به آن در مسیر موردنظر حذف شود.
5. بررسی وضعیت کانتینر بعد از توقف و حذف:
پس از اجرای دستور lxc-stop و lxc-destroy، برای اطمینان از توقف یا حذف کامل کانتینر، میتوانید از دستورات زیر استفاده کنید:
- برای بررسی وضعیت کانتینر پس از توقف:
lxc-info -n <container-name>
این دستور اطلاعات وضعیت کانتینر را نشان میدهد و نشان میدهد که کانتینر متوقف شده است یا خیر.
- برای لیستکردن تمامی کانتینرهای موجود پس از حذف:
lxc-ls
این دستور لیست کانتینرهای موجود را به شما نشان میدهد تا تأیید کنید که کانتینر حذف شده است یا خیر.
جمعبندی
در این بخش، نحوه توقف و حذف کانتینرها با استفاده از دستورات lxc-stop و lxc-destroy بررسی شد. دستور lxc-stop به شما این امکان را میدهد که کانتینرها را بهطور نرم یا اجباری متوقف کنید، در حالی که دستور lxc-destroy برای حذف کامل کانتینرها بهکار میرود. با استفاده از این دستورات، شما میتوانید به راحتی کانتینرهای مورد نظر خود را مدیریت و حذف کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”ریستارت کانتینر با lxc-restart” subtitle=”توضیحات کامل”]در محیطهای مجازیسازی و کانتینرها، گاهی نیاز به راهاندازی مجدد (ریستارت) یک کانتینر داریم. این کار ممکن است به دلایل مختلفی انجام شود، از جمله اعمال تغییرات در پیکربندی، حل مشکلات نرمافزاری، یا اعمال بروزرسانیها. در LXC، برای ریستارت یک کانتینر، از دستور lxc-restart استفاده میشود.
1. دستور lxc-restart
دستور lxc-restart برای راهاندازی مجدد یک کانتینر بهکار میرود. این دستور به شما این امکان را میدهد که کانتینر را بهصورت نرم و با حفظ تمامی تغییرات اعمالشده در آن، دوباره راهاندازی کنید.
برای ریستارت یک کانتینر، از دستور زیر استفاده میکنید:
lxc-restart -n <container-name>
در اینجا <container-name> نام کانتینری است که میخواهید آن را ریستارت کنید.
این دستور کانتینر را متوقف کرده و سپس دوباره آن را شروع میکند، بهطوری که تغییرات اعمالشده در تنظیمات کانتینر از جمله پیکربندیها، شبکه و ذخیرهسازی بهطور کامل اعمال شوند.
2. استفاده از گزینههای اضافی:
- ریستارت سریع کانتینر: در برخی موارد ممکن است بخواهید کانتینر را بهطور فوری و بدون منتظر ماندن برای خاتمهی فرآیندهای داخلی آن ریستارت کنید. برای این کار از گزینه
-kاستفاده میشود:
lxc-restart -n <container-name> -k
این گزینه باعث میشود کانتینر فوراً متوقف و دوباره راهاندازی شود.
- زمانبندی ریستارت: برای تعیین مدت زمانی که باید قبل از ریستارت کانتینر منتظر بمانید، از گزینه
-tاستفاده میکنید:
lxc-restart -n <container-name> -t <seconds>
در اینجا، -t <seconds> مدت زمانی را بهثانیه مشخص میکند که کانتینر قبل از ریستارت باید منتظر بماند.
3. بررسی وضعیت کانتینر پس از ریستارت:
پس از ریستارت کانتینر، میتوانید وضعیت آن را با استفاده از دستور lxc-info بررسی کنید:
lxc-info -n <container-name>
این دستور وضعیت کانتینر را به شما نشان میدهد و به شما اطلاع میدهد که آیا کانتینر بهدرستی راهاندازی مجدد شده است یا خیر.
4. ریستارت کانتینرهای متعدد:
در صورتی که نیاز به ریستارت چندین کانتینر بهطور همزمان دارید، میتوانید از دستور lxc-ls برای لیستکردن تمامی کانتینرها و سپس استفاده از xargs برای اعمال دستور lxc-restart بهطور همزمان برای همه کانتینرها استفاده کنید:
lxc-ls | xargs -I {} lxc-restart -n {}
این دستور تمامی کانتینرهای موجود را لیست کرده و برای هر کدام از آنها دستور ریستارت را اجرا میکند.
جمعبندی
دستور lxc-restart برای ریستارت کانتینرها در LXC بهکار میرود و به شما این امکان را میدهد که کانتینر را مجدداً راهاندازی کنید. این دستور میتواند برای اعمال تغییرات پیکربندی، حل مشکلات یا بروزرسانیهای نرمافزاری مفید باشد. همچنین با استفاده از گزینههای اضافی مانند -k برای ریستارت فوری یا -t برای تعیین زمان تا ریستارت، میتوانید فرآیند ریستارت را بهطور دقیقتری کنترل کنید.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 5. دسترسی به کنسول و ترمینال کانتینر”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”استفاده از دستور lxc-console” subtitle=”توضیحات کامل”]در LXC، دستور lxc-console برای دسترسی به کنسول یک کانتینر بهکار میرود. این دستور به شما این امکان را میدهد که مستقیماً وارد محیط کانتینر شوید و بهطور تعاملی با سیستم درون کانتینر کار کنید. این ویژگی میتواند برای عیبیابی یا مدیریت کانتینر بسیار مفید باشد.
1. دسترسی به کنسول کانتینر با lxc-console
برای وارد شدن به کنسول یک کانتینر در LXC، میتوانید از دستور زیر استفاده کنید:
lxc-console -n <container-name>
در اینجا، <container-name> نام کانتینری است که میخواهید به کنسول آن وارد شوید.
با اجرای این دستور، شما به محیط خط فرمان کانتینر دسترسی خواهید داشت، مشابه به این که در حال کار با یک سیستم مجازی یا فیزیکی هستید.
2. خروج از کنسول کانتینر
برای خروج از کنسول کانتینر و بازگشت به خط فرمان میزبان، شما باید از دستور زیر استفاده کنید:
Ctrl + a q
این دستور به شما این امکان را میدهد که از کنسول کانتینر خارج شوید بدون این که کانتینر متوقف شود یا تغییری در آن ایجاد گردد.
3. استفاده از دستورات اضافی در lxc-console
- مشاهده پیغامهای ورود به سیستم (login messages): شما میتوانید پیغامهای ورود به سیستم را مشاهده کنید که این پیغامها اطلاعات مربوط به وضعیت کانتینر و جزئیات مربوط به راهاندازی آن را نشان میدهند.
- دسترسی به کنسول با استفاده از نام کاربری و رمز عبور: به طور معمول، پس از دسترسی به کنسول کانتینر، از شما خواسته میشود که وارد نام کاربری و رمز عبور شوید. این کار به شما این امکان را میدهد که وارد محیط کاربری کانتینر شوید.
4. کاربردهای lxc-console
- عیبیابی: یکی از اصلیترین کاربردهای
lxc-console، عیبیابی کانتینرها است. شما میتوانید از این دستور برای وارد شدن به کنسول کانتینر و بررسی لاگها، فایلها و وضعیت سیستم استفاده کنید. - مدیریت کانتینر: این دستور همچنین میتواند برای انجام کارهای مدیریتی داخل کانتینر مانند نصب نرمافزارها، تغییر تنظیمات یا پیکربندیهای مختلف استفاده شود.
5. محدودیتهای استفاده از lxc-console
- عدم دسترسی به کنسول در صورتی که کانتینر در حال اجرا نباشد: اگر کانتینر در حال اجرا نباشد، شما نمیتوانید وارد کنسول آن شوید.
- عدم پشتیبانی از محیط گرافیکی: دستور
lxc-consoleفقط به محیط خط فرمان (CLI) دسترسی میدهد و نمیتوان از آن برای کار با محیطهای گرافیکی استفاده کرد.
جمعبندی
دستور lxc-console ابزار مفیدی برای دسترسی به کنسول کانتینرهای LXC است که به شما امکان میدهد بهصورت تعاملی با سیستم درون کانتینر ارتباط برقرار کنید. این دستور بهویژه برای عیبیابی و مدیریت کانتینرها مفید است. با استفاده از این دستور میتوانید بهراحتی به محیط خط فرمان کانتینر وارد شده و دستورات و تنظیمات مختلف را اجرا کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”اتصال به محیط کانتینر با lxc-attach” subtitle=”توضیحات کامل”]در LXC، دستور lxc-attach به شما این امکان را میدهد که به فرآیندهای در حال اجرای یک کانتینر متصل شوید و دستورات را در داخل کانتینر اجرا کنید. این دستور بهویژه در مواقعی مفید است که شما میخواهید به یک فرآیند در حال اجرا دسترسی داشته باشید یا کارهای مدیریتی مختلفی را داخل کانتینر انجام دهید.
1. اتصال به محیط کانتینر با دستور lxc-attach
برای اتصال به محیط کانتینر از دستور lxc-attach استفاده میشود. برای مثال:
lxc-attach -n <container-name>
در این دستور، <container-name> نام کانتینری است که میخواهید به آن متصل شوید. پس از اجرای این دستور، شما به محیط کانتینر متصل میشوید و میتوانید دستورات را بهطور مستقیم در آن اجرا کنید.
2. اتصال با اجرای یک دستور خاص
در صورتی که بخواهید به کانتینر متصل شوید و یک دستور خاص را در داخل آن اجرا کنید، میتوانید دستور مورد نظر را به انتهای دستور lxc-attach اضافه کنید. بهعنوان مثال:
lxc-attach -n <container-name> -- <command>
در اینجا، <command> دستوری است که میخواهید در داخل کانتینر اجرا کنید. بهعنوان مثال، اگر بخواهید در داخل کانتینر بهطور مستقیم به محیط شل bash وارد شوید، از دستور زیر استفاده کنید:
lxc-attach -n <container-name> -- /bin/bash
3. دسترسی به شل اصلی کانتینر
با دستور lxc-attach، شما به شل اصلی کانتینر دسترسی پیدا میکنید. در این محیط، میتوانید بهطور مستقیم با سیستم فایل کانتینر تعامل کنید، برنامهها را اجرا کنید یا تغییرات مختلفی در کانتینر اعمال کنید.
4. اتصال به کانتینر بهعنوان کاربر خاص
در صورتی که بخواهید به کانتینر بهعنوان کاربر خاصی متصل شوید، میتوانید از گزینه -u برای تعیین نام کاربری استفاده کنید. بهعنوان مثال:
lxc-attach -n <container-name> -u <username>
در اینجا، <username> نام کاربری است که میخواهید با آن وارد کانتینر شوید.
5. کاربردهای lxc-attach
- عیبیابی و مدیریت فرآیندها: از
lxc-attachمیتوانید برای متصل شدن به فرآیندهای در حال اجرای کانتینر و انجام بررسیهای عیبیابی استفاده کنید. - اجرای دستورات داخل کانتینر: شما میتوانید دستورات خاصی را در داخل کانتینر اجرا کنید، بدون اینکه لازم باشد به کنسول کانتینر متصل شوید.
- اجرای اسکریپتها: این دستور برای اجرای اسکریپتهای خودکار در داخل کانتینر نیز مفید است.
6. محدودیتهای استفاده از lxc-attach
- عدم دسترسی به محیط گرافیکی: مانند دستور
lxc-console،lxc-attachفقط برای کار با محیط خط فرمان است و بهطور مستقیم نمیتوان از آن برای دسترسی به محیطهای گرافیکی استفاده کرد. - نیاز به دسترسی مناسب: برای استفاده از
lxc-attachنیاز به دسترسی به کانتینر دارید. اگر کانتینر در حال اجرا نباشد، شما نمیتوانید به آن متصل شوید.
جمعبندی
دستور lxc-attach ابزاری مفید برای اتصال به کانتینر و دسترسی به شل آن است. این دستور به شما این امکان را میدهد که دستورات مختلف را در داخل کانتینر اجرا کنید، به فرآیندهای در حال اجرای کانتینر متصل شوید و تغییرات مدیریتی را در سیستم فایل کانتینر انجام دهید. این ویژگی بهویژه برای عیبیابی و مدیریت کانتینرها در محیطهای تولید بسیار مفید است.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 6. مدیریت منابع کانتینر”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”اعمال محدودیت CPU با ویرایش فایل کانفیگ lxc.cgroup.cpu.shares” subtitle=”توضیحات کامل”]در LXC، یکی از روشهای کنترل مصرف منابع کانتینرها، اعمال محدودیت بر روی CPU است. این کار معمولاً از طریق تنظیمات cgroup انجام میشود. با استفاده از فایل پیکربندی کانتینر، میتوانید میزان تخصیص CPU به هر کانتینر را تنظیم کنید تا منابع سیستم بهطور بهینه مدیریت شوند. یکی از مهمترین گزینهها برای محدودیت منابع CPU، استفاده از گزینه lxc.cgroup.cpu.shares در فایل پیکربندی کانتینر است.
1. تعریف lxc.cgroup.cpu.shares
گزینه lxc.cgroup.cpu.shares برای تنظیم میزان سهم از CPU که به کانتینر اختصاص داده میشود، استفاده میشود. این مقدار بهطور نسبی و بر اساس تعداد نخهای پردازشی (threads) تخصیص دادهشده به کانتینر، عمل میکند. این گزینه میزان اولویت CPU برای کانتینر را تعیین میکند.
- مقدار پیشفرض برای
lxc.cgroup.cpu.sharesمعمولاً 1024 است. - این مقدار بهطور نسبی تعیین میکند که کانتینر چقدر از CPU سیستم را میتواند مصرف کند.
- اگر بیش از یک کانتینر در حال اجرا باشد، مقدار
cpu.sharesتعیین میکند که هر کانتینر چه درصدی از CPU در دسترس را دریافت میکند.
2. نحوه تنظیم lxc.cgroup.cpu.shares
برای اعمال محدودیت CPU، ابتدا باید فایل پیکربندی کانتینر را ویرایش کنید. این فایل معمولاً در مسیر زیر قرار دارد:
/var/lib/lxc/<container-name>/config
در این فایل، شما باید گزینه lxc.cgroup.cpu.shares را تنظیم کنید. بهطور مثال، برای تخصیص 512 واحد CPU به کانتینر، بهطور زیر عمل کنید:
lxc.cgroup.cpu.shares = 512
این تنظیم به این معناست که کانتینر نسبت به سایر کانتینرهایی که در حال اجرا هستند، از 50٪ ظرفیت CPU سیستم استفاده خواهد کرد.
3. تنظیمات پیشرفتهتر
- تخصیص درصدی: برای تخصیص درصدی دقیقتر از منابع CPU، میتوانید نسبت به تعداد کانتینرهای در حال اجرا تنظیمات را تغییر دهید. برای مثال، اگر دو کانتینر در حال اجرا باشند و هرکدام
lxc.cgroup.cpu.shares = 1024داشته باشند، هرکدام 50٪ از CPU سیستم را مصرف خواهند کرد. اما اگر یکی از کانتینرهاlxc.cgroup.cpu.shares = 512داشته باشد، آن کانتینر فقط 25٪ از CPU را مصرف خواهد کرد. - مقایسه با سایر منابع: این گزینه بهطور مستقیم با سایر گزینههای cgroup نظیر
lxc.cgroup.memory،lxc.cgroup.cpu.setوlxc.cgroup.cpu.cpusمقایسه میشود. شما میتوانید بهطور همزمان از این گزینهها برای مدیریت منابع کانتینر استفاده کنید.
4. بررسی و تأثیر تغییرات
پس از ویرایش فایل پیکربندی کانتینر و اعمال تنظیمات، باید کانتینر را دوباره راهاندازی کنید تا تغییرات اعمال شوند:
lxc-stop -n <container-name>
lxc-start -n <container-name>
پس از راهاندازی مجدد کانتینر، برای مشاهده وضعیت CPU و بررسی اینکه آیا محدودیتهای اعمالشده به درستی کار میکنند، میتوانید از دستورات زیر استفاده کنید:
lxc-info -n <container-name>
این دستور اطلاعات مربوط به کانتینر را نمایش میدهد و از جمله منابع مصرفی، میزان استفاده از CPU را نیز نشان میدهد.
5. کاربردهای lxc.cgroup.cpu.shares
- مدیریت بار CPU: هنگامی که چندین کانتینر در حال اجرا هستند و ممکن است یکی از آنها بار زیادی روی CPU بگذارد، با استفاده از این تنظیم میتوانید سهم CPU هر کانتینر را مدیریت کنید تا هیچکدام از کانتینرها منابع بیش از حدی مصرف نکنند.
- تخصیص منابع برای پردازشهای حساس: اگر برخی از کانتینرها نیاز به تخصیص منابع بیشتر برای پردازشهای حساس دارند، میتوانید مقدار
lxc.cgroup.cpu.sharesرا برای این کانتینرها افزایش دهید. - بیشترین بهرهوری از منابع: این گزینه به شما این امکان را میدهد که منابع CPU را بهطور بهینه بین کانتینرها توزیع کنید، بهویژه در سیستمهایی با بار کاری بالا.
جمعبندی
تنظیم گزینه lxc.cgroup.cpu.shares در فایل پیکربندی کانتینر یکی از روشهای اصلی برای مدیریت و محدود کردن مصرف منابع CPU توسط کانتینرها است. این تنظیم به شما این امکان را میدهد که منابع CPU را بهطور بهینه میان کانتینرها توزیع کنید و از مصرف زیاد CPU توسط یک کانتینر خاص جلوگیری کنید. اعمال این تنظیم در کانتینرها کمک میکند تا مدیریت بهتری بر منابع سیستم در یک محیط چند کانتینری داشته باشید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”محدود کردن حافظه RAM با lxc.cgroup.memory.limit_in_bytes” subtitle=”توضیحات کامل”]در LXC، یکی از روشهای مدیریت منابع، محدود کردن میزان حافظه RAM مصرفی توسط هر کانتینر است. این کار از طریق تنظیمات cgroup انجام میشود و میتواند بهویژه در سیستمهایی با منابع محدود مفید باشد. گزینه lxc.cgroup.memory.limit_in_bytes به شما این امکان را میدهد که میزان مصرف حافظه RAM هر کانتینر را محدود کنید.
1. تعریف lxc.cgroup.memory.limit_in_bytes
گزینه lxc.cgroup.memory.limit_in_bytes میزان حافظه RAM که به یک کانتینر اختصاص داده میشود را تعیین میکند. این مقدار بهطور مستقیم با محدودیت مصرف حافظه ارتباط دارد و بهصورت تعداد بایتها (bytes) تعیین میشود.
- مقدار این گزینه باید بهصورت عددی وارد شود که معادل مقدار حافظه بهصورت بایت است.
- این مقدار میتواند برای محدود کردن مصرف حافظه RAM کانتینرها استفاده شود تا از مصرف بیش از حد منابع جلوگیری شود.
2. نحوه تنظیم lxc.cgroup.memory.limit_in_bytes
برای محدود کردن حافظه RAM مصرفی توسط یک کانتینر، باید فایل پیکربندی کانتینر را ویرایش کنید. این فایل معمولاً در مسیر زیر قرار دارد:
/var/lib/lxc/<container-name>/config
در این فایل، شما میتوانید گزینه lxc.cgroup.memory.limit_in_bytes را تنظیم کنید. بهطور مثال، برای محدود کردن حافظه RAM کانتینر به 1 گیگابایت (GB)، از دستور زیر استفاده کنید:
lxc.cgroup.memory.limit_in_bytes = 1073741824
در اینجا، عدد 1073741824 معادل 1 گیگابایت است (که معادل 1024 * 1024 * 1024 بایت میباشد).
3. اعمال تغییرات
پس از اعمال تغییرات در فایل پیکربندی کانتینر، برای اینکه تنظیمات جدید اعمال شوند، باید کانتینر را دوباره راهاندازی کنید. این کار را میتوانید با دستورات زیر انجام دهید:
lxc-stop -n <container-name>
lxc-start -n <container-name>
4. بررسی میزان مصرف حافظه
برای بررسی اینکه آیا محدودیت حافظه بهدرستی اعمال شده است، میتوانید از دستور زیر استفاده کنید:
lxc-info -n <container-name>
این دستور اطلاعات مربوط به کانتینر را نمایش میدهد و میزان استفاده از حافظه RAM را نیز نشان میدهد. همچنین میتوانید از دستورات دیگری نظیر top یا free در داخل کانتینر برای مشاهده میزان استفاده از حافظه استفاده کنید.
5. کاربردهای lxc.cgroup.memory.limit_in_bytes
- پیشگیری از مصرف بیش از حد حافظه: در محیطهایی که منابع محدود هستند، محدود کردن مصرف حافظه RAM میتواند به جلوگیری از خرابی سیستم به دلیل مصرف بیش از حد حافظه کمک کند.
- مدیریت منابع در سیستمهای چند کانتینری: با استفاده از این تنظیم، میتوانید حافظه را بهطور مناسب میان کانتینرهای مختلف توزیع کنید و از مصرف بیرویه حافظه توسط یک کانتینر خاص جلوگیری کنید.
- اجرای برنامههای حساس به حافظه: اگر برنامهای در داخل کانتینر نیاز به حافظه بیشتری دارد، میتوانید میزان حافظه اختصاصی به آن را افزایش دهید.
6. محدودیتها و نکات مهم
- کنترل استفاده از حافظه: اگر کانتینر به میزان حافظه مشخصشده نیاز داشته باشد و بخواهد بیشتر از آن استفاده کند، میتواند با مشکلاتی مانند OOM (Out Of Memory) مواجه شود.
- اعداد معادل بایت: برای تعیین محدودیت حافظه باید عدد دقیق را بهصورت بایت وارد کنید. برای راحتی میتوانید از محاسبات ساده برای تبدیل مقادیر به بایت استفاده کنید (مثلاً 1 گیگابایت = 1073741824 بایت).
- تداخل با گزینههای دیگر: در صورت استفاده از سایر گزینههای cgroup برای کنترل حافظه (مانند
lxc.cgroup.memory.memsw.limit_in_bytes)، باید توجه داشته باشید که اینها ممکن است با هم تداخل داشته باشند.
جمعبندی
تنظیم گزینه lxc.cgroup.memory.limit_in_bytes به شما این امکان را میدهد که مصرف حافظه RAM هر کانتینر را محدود کنید. این تنظیم یکی از روشهای مهم برای مدیریت منابع در سیستمهای چند کانتینری است که به جلوگیری از مصرف بیش از حد حافظه و خرابی سیستم کمک میکند. با استفاده از این گزینه میتوانید حافظه را بهطور بهینه میان کانتینرها توزیع کنید و کنترل دقیقی بر منابع خود داشته باشید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”محدود کردن I/O با lxc.cgroup.blkio.weight” subtitle=”توضیحات کامل”]یکی از جنبههای مهم مدیریت منابع در کانتینرها، کنترل مصرف I/O (ورودی/خروجی) دیسک است. در LXC، این کار از طریق تنظیمات cgroup انجام میشود و میتوانید میزان اولویت مصرف I/O برای هر کانتینر را با استفاده از گزینه lxc.cgroup.blkio.weight مدیریت کنید. این گزینه به شما امکان میدهد تا میزان اولویت دسترسی به دیسک را برای کانتینرها تعیین کنید و به این ترتیب مصرف منابع I/O را کنترل کنید.
1. تعریف lxc.cgroup.blkio.weight
گزینه lxc.cgroup.blkio.weight میزان اولویت دسترسی به دیسک را برای کانتینر تعیین میکند. این مقدار بهصورت یک عدد بین ۱۰ تا ۱۰۰۰ تنظیم میشود که نشاندهنده اولویت مصرف I/O است. هرچه این عدد بیشتر باشد، کانتینر بیشتر قادر به استفاده از I/O دیسک خواهد بود.
- مقدار پیشفرض این تنظیم ۱۰۰ است.
- این مقدار تنها برای دیسکهای بلوکی (block devices) که توسط کانتینر استفاده میشوند، اعمال میشود.
2. نحوه تنظیم lxc.cgroup.blkio.weight
برای محدود کردن I/O مصرفی توسط یک کانتینر، باید فایل پیکربندی آن کانتینر را ویرایش کنید. فایل پیکربندی هر کانتینر معمولاً در مسیر زیر قرار دارد:
/var/lib/lxc/<container-name>/config
برای تعیین اولویت مصرف I/O، گزینه lxc.cgroup.blkio.weight را در فایل پیکربندی وارد کنید. بهطور مثال، برای تنظیم وزن I/O کانتینر به ۵۰۰، میتوانید از دستور زیر استفاده کنید:
lxc.cgroup.blkio.weight = 500
در اینجا، مقدار ۵۰۰ نشاندهنده این است که کانتینر نسبت به کانتینرهای دیگر از اولویت I/O متوسط برخوردار است.
3. اعمال تغییرات
پس از اعمال تغییرات در فایل پیکربندی کانتینر، برای اینکه تنظیمات جدید اعمال شوند، باید کانتینر را دوباره راهاندازی کنید. این کار را میتوانید با دستورات زیر انجام دهید:
lxc-stop -n <container-name>
lxc-start -n <container-name>
این دستورات باعث میشوند که کانتینر مجدداً راهاندازی شود و تنظیمات جدید اعمال گردد.
4. بررسی میزان استفاده از I/O
برای بررسی میزان استفاده از I/O و تأثیر تغییرات، میتوانید از دستور iotop یا ابزارهای مشابه برای مشاهده مصرف I/O در سیستم استفاده کنید. همچنین در داخل کانتینر میتوانید از دستورات dstat یا iostat برای بررسی میزان مصرف I/O استفاده کنید.
5. کاربردهای lxc.cgroup.blkio.weight
- مدیریت مصرف I/O در سیستمهای چند کانتینری: با استفاده از این تنظیم، میتوانید اولویت مصرف I/O را میان کانتینرهای مختلف توزیع کنید تا از مصرف بیش از حد دیسک توسط یک کانتینر خاص جلوگیری کنید.
- کنترل کانتینرهای حساس به I/O: اگر کانتینری نیاز به دسترسی بیشتری به دیسک داشته باشد، میتوانید با افزایش مقدار
lxc.cgroup.blkio.weightاولویت آن را بیشتر کنید تا دسترسی به منابع I/O را بهبود ببخشید. - بهبود عملکرد در سیستمهای با منابع محدود: در سیستمهایی که منابع I/O محدود هستند، این تنظیمات میتوانند کمک کنند تا مصرف I/O کانتینرها بهینهتر شود و از خرابی سیستم جلوگیری کند.
6. محدودیتها و نکات مهم
- اعداد معادل: مقدار
lxc.cgroup.blkio.weightباید یک عدد صحیح بین ۱۰ تا ۱۰۰۰ باشد. اگر مقدار این گزینه کمتر از ۱۰ یا بیشتر از ۱۰۰۰ تنظیم شود، ممکن است بهدرستی اعمال نشود. - تداخل با سایر منابع: این تنظیمات باید همراه با سایر تنظیمات منابع مانند حافظه و CPU بهدرستی تنظیم شوند تا کانتینرها عملکرد بهینهای داشته باشند.
- عدم اعمال مستقیم برای I/O شبکه: این تنظیم تنها برای I/O دیسک (بلوک دیسکها) اعمال میشود و نمیتواند برای I/O شبکه یا سایر منابع استفاده شود.
جمعبندی
تنظیم گزینه lxc.cgroup.blkio.weight به شما این امکان را میدهد که اولویت مصرف I/O دیسک را برای هر کانتینر تعیین کنید. این تنظیم بهویژه در سیستمهای چند کانتینری مفید است، زیرا به شما اجازه میدهد تا کنترل دقیقی روی مصرف منابع I/O داشته باشید و از مصرف بیش از حد دیسک توسط یک کانتینر خاص جلوگیری کنید. با استفاده از این تنظیم میتوانید عملکرد سیستم را بهبود بخشید و منابع را بهطور بهینه توزیع کنید.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 7. تنظیمات شبکه ابتدایی”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”اتصال کانتینر به bridge پیشفرض (مثلاً lxcbr0)” subtitle=”توضیحات کامل”]در LXC، شبکهبندی یکی از جنبههای مهم مدیریت کانتینرها است. اتصال کانتینرها به شبکهها میتواند به روشهای مختلفی انجام شود. یکی از رایجترین روشها اتصال کانتینر به یک bridge پیشفرض است، مانند lxcbr0. این bridge بهطور معمول برای فراهم کردن دسترسی شبکه به کانتینرها استفاده میشود.
در این بخش از آموزش های ارائه شده توسط فرازنتورک، نحوه اتصال یک کانتینر به bridge پیشفرض مانند lxcbr0 را بررسی خواهیم کرد. این تنظیمات بهویژه برای فراهم کردن دسترسی اینترنت برای کانتینرها و ارتباط آنها با شبکههای بیرونی اهمیت دارند.
1. تعریف Bridge پیشفرض
Bridge پیشفرض، مانند lxcbr0، یک آداپتور شبکه مجازی است که بهطور معمول در هنگام نصب LXC ایجاد میشود. این bridge بهطور خاص برای اتصال کانتینرها به شبکه خارجی استفاده میشود. lxcbr0 معمولاً بهطور خودکار با استفاده از DHCP برای تخصیص آدرسهای IP به کانتینرها تنظیم میشود.
در هنگام ایجاد یک کانتینر، بهطور پیشفرض آن کانتینر به این bridge متصل میشود. این اتصال باعث میشود که کانتینر قادر به برقراری ارتباط با شبکه بیرونی باشد.
2. نحوه اتصال کانتینر به bridge پیشفرض
برای اتصال یک کانتینر به bridge پیشفرض مانند lxcbr0، ابتدا باید فایل پیکربندی آن کانتینر را ویرایش کنید. این فایل معمولاً در مسیر زیر قرار دارد:
/var/lib/lxc/<container-name>/config
برای اتصال کانتینر به bridge پیشفرض، باید بخش تنظیمات شبکه را در فایل پیکربندی کانتینر بهصورت زیر اضافه کنید:
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
در این تنظیمات:
lxc.net.0.type = veth: نوع اتصال شبکه را بهعنوانvethتعیین میکند.vethیک نوع اتصال شبکه است که بین کانتینر و bridge استفاده میشود.lxc.net.0.link = lxcbr0: تعیین میکند که کانتینر به bridge با نامlxcbr0متصل شود.lxc.net.0.flags = up: این گزینه باعث میشود که رابط شبکه کانتینر فعال شود.
3. اعمال تغییرات
پس از ویرایش فایل پیکربندی کانتینر، برای اعمال تغییرات و اتصال کانتینر به bridge، باید کانتینر را راهاندازی کنید. این کار را میتوانید با استفاده از دستورات زیر انجام دهید:
lxc-stop -n <container-name>
lxc-start -n <container-name>
پس از راهاندازی مجدد کانتینر، آن کانتینر باید بهطور خودکار به bridge lxcbr0 متصل شود و بتواند به شبکه خارجی دسترسی داشته باشد.
4. بررسی وضعیت اتصال
برای بررسی وضعیت اتصال کانتینر به bridge، میتوانید از دستور lxc-info استفاده کنید تا جزئیات شبکه کانتینر را مشاهده کنید. بهطور خاص، میتوانید وضعیت رابط شبکه کانتینر را بررسی کنید:
lxc-info -n <container-name>
همچنین، برای مشاهده شبکهها و interfaceهای موجود، میتوانید دستور ip a را در داخل کانتینر اجرا کنید.
5. اطمینان از عملکرد DHCP
اگر کانتینر شما بهطور خودکار آدرس IP از DHCP دریافت میکند، برای اطمینان از عملکرد صحیح، میتوانید دستور ip a را در داخل کانتینر برای بررسی آدرس IP اختصاصی اجرا کنید. همچنین، اگر کانتینر نتواند آدرس IP دریافت کند، ممکن است نیاز به بررسی تنظیمات lxcbr0 داشته باشید.
برای بررسی وضعیت DHCP در lxcbr0، میتوانید از دستور زیر استفاده کنید:
ip addr show lxcbr0
اگر lxcbr0 به درستی پیکربندی شده باشد، باید بتوانید یک آدرس IP برای این bridge مشاهده کنید.
6. تغییرات پیشرفته در تنظیمات شبکه
در صورتی که نیاز به پیکربندیهای پیشرفتهتری مانند استفاده از شبکههای خصوصی یا تنظیمات استاتیک برای کانتینرها دارید، میتوانید تنظیمات بیشتری را در فایل پیکربندی کانتینر اضافه کنید. برای مثال، برای استفاده از یک آدرس IP استاتیک برای کانتینر، میتوانید موارد زیر را در فایل پیکربندی کانتینر وارد کنید:
lxc.net.0.ipv4.address = 192.168.1.100/24
lxc.net.0.ipv4.gateway = 192.168.1.1
در اینجا:
lxc.net.0.ipv4.address: آدرس IP استاتیک برای کانتینر را تنظیم میکند.lxc.net.0.ipv4.gateway: دروازه پیشفرض شبکه را برای کانتینر تعیین میکند.
جمعبندی
اتصال کانتینر به bridge پیشفرض مانند lxcbr0 یکی از مهمترین تنظیمات شبکه در LXC است که به کانتینر امکان دسترسی به شبکه بیرونی را میدهد. برای اتصال کانتینر به این bridge، کافی است فایل پیکربندی کانتینر را ویرایش کرده و تنظیمات مناسب را وارد کنید. با این کار، کانتینر قادر به دریافت آدرس IP از DHCP و برقراری ارتباط با شبکه بیرونی خواهد بود. همچنین، برای تنظیمات پیشرفتهتر، مانند تخصیص IP استاتیک به کانتینر، میتوانید تنظیمات اضافی را در فایل پیکربندی وارد کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تنظیم دستی آیپی برای کانتینرها” subtitle=”توضیحات کامل”]در برخی موارد، ممکن است بخواهید آیپی استاتیک (دستی) برای کانتینرها تنظیم کنید. این کار به شما این امکان را میدهد که کنترل دقیقی بر روی آدرس IP کانتینرها داشته باشید و بهویژه در شبکههای خاص یا زمانی که نیاز به یک شبکه ثابت دارید، کاربردی است.
در این بخش، نحوه تنظیم دستی آیپی برای کانتینرها در LXC را با استفاده از فایل پیکربندی توضیح خواهیم داد.
1. ویرایش فایل پیکربندی کانتینر
برای تنظیم آیپی استاتیک برای یک کانتینر، ابتدا باید فایل پیکربندی کانتینر را ویرایش کنید. این فایل معمولاً در مسیر زیر قرار دارد:
/var/lib/lxc/<container-name>/config
در این فایل پیکربندی، شما باید بخشهای مربوط به تنظیمات شبکه را ویرایش کنید تا آیپی استاتیک را به کانتینر اختصاص دهید.
2. افزودن تنظیمات آیپی استاتیک به فایل پیکربندی
برای تنظیم آیپی استاتیک، باید موارد زیر را در فایل پیکربندی کانتینر اضافه کنید:
lxc.net.0.type = veth
lxc.net.0.link = lxcbr0
lxc.net.0.flags = up
lxc.net.0.ipv4.address = 192.168.1.100/24
lxc.net.0.ipv4.gateway = 192.168.1.1
در این تنظیمات:
lxc.net.0.type = veth: نوع اتصال شبکه را بهعنوانvethتعیین میکند که یک اتصال شبکه مجازی است.lxc.net.0.link = lxcbr0: این گزینه تعیین میکند که کانتینر به bridge پیشفرضlxcbr0متصل شود.lxc.net.0.flags = up: این گزینه برای فعالسازی رابط شبکه کانتینر است.lxc.net.0.ipv4.address = 192.168.1.100/24: این بخش برای تنظیم آدرس آیپی استاتیک کانتینر استفاده میشود. بهطور مثال، آیپی192.168.1.100برای کانتینر تنظیم شده است.lxc.net.0.ipv4.gateway = 192.168.1.1: این بخش برای تنظیم دروازه پیشفرض شبکه برای کانتینر است.
3. اعمال تغییرات
پس از ویرایش فایل پیکربندی کانتینر، برای اعمال تغییرات و استفاده از تنظیمات جدید، باید کانتینر را راهاندازی مجدد کنید. این کار را میتوانید با استفاده از دستورات زیر انجام دهید:
lxc-stop -n <container-name>
lxc-start -n <container-name>
این دستورات کانتینر را متوقف کرده و مجدداً راهاندازی میکنند تا تنظیمات جدید اعمال شوند.
4. بررسی تنظیمات شبکه در کانتینر
پس از راهاندازی مجدد کانتینر، برای بررسی اینکه آیپی استاتیک به درستی به کانتینر اختصاص یافته است، میتوانید از دستور ip a در داخل کانتینر استفاده کنید:
lxc-attach -n <container-name> -- ip a
این دستور باید آدرس آیپی استاتیک (192.168.1.100/24) را در داخل کانتینر نشان دهد.
5. بررسی شبکهها و تنظیمات در host
برای بررسی تنظیمات شبکه در host و مطمئن شدن از اینکه کانتینر به درستی به شبکه متصل است، میتوانید از دستور ip addr در میزبان (host) استفاده کنید:
ip addr show lxcbr0
اگر bridge lxcbr0 بهدرستی پیکربندی شده باشد، باید قادر به مشاهده ارتباط بین کانتینر و شبکه باشید.
6. مشکلات متداول
در صورتی که پس از تنظیم آیپی استاتیک، کانتینر نتواند به شبکه دسترسی پیدا کند، موارد زیر را بررسی کنید:
- اطمینان حاصل کنید که آدرس آیپی تنظیمشده در محدوده شبکه
lxcbr0باشد. - مطمئن شوید که دروازه پیشفرض (
gateway) بهدرستی پیکربندی شده باشد. - بررسی کنید که تنظیمات DHCP روی
lxcbr0تداخل نکند.
جمعبندی
تنظیم آیپی استاتیک برای کانتینرها در LXC به شما این امکان را میدهد که کنترل بیشتری بر روی شبکه و دسترسیهای کانتینرها داشته باشید. با ویرایش فایل پیکربندی کانتینر و افزودن تنظیمات مربوط به ipv4.address و ipv4.gateway، میتوانید آیپی استاتیک را برای هر کانتینر بهطور دستی اختصاص دهید. پس از اعمال این تغییرات و راهاندازی مجدد کانتینر، کانتینر باید با آیپی استاتیک جدید خود به شبکه متصل شود.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”ایجاد فایل پیکربندی شبکه اختصاصی برای کانتینرها” subtitle=”توضیحات کامل”]در بسیاری از مواقع، برای ایجاد یک شبکه اختصاصی برای کانتینرها، نیاز است که تنظیمات خاصی را در فایلهای پیکربندی اعمال کنید. این کار به شما امکان میدهد که کانتینرها را بهطور مستقل از شبکههای خارجی و عمومی مدیریت کنید و برای استفادههای خاص مانند آزمایش یا شبکههای امن، شبکههایی مجزا ایجاد کنید.
در این بخش، نحوه ایجاد فایل پیکربندی برای شبکه اختصاصی در LXC را بررسی خواهیم کرد.
1. ایجاد یک bridge اختصاصی برای شبکه کانتینرها
اولین قدم برای ایجاد یک شبکه اختصاصی، ایجاد یک bridge اختصاصی برای کانتینرهاست. این bridge بهطور معمول در سطح سیستم عامل ایجاد میشود و بهعنوان شبکه داخلی برای اتصال کانتینرها استفاده خواهد شد.
برای ایجاد یک bridge جدید، از دستور زیر استفاده کنید:
sudo ip link add name lxc-private type bridge
sudo ip addr add 192.168.100.1/24 dev lxc-private
sudo ip link set lxc-private up
در این دستورات:
lxc-private: نام bridge جدیدی است که برای شبکه اختصاصی کانتینرها ایجاد میکنیم.192.168.100.1/24: آدرس آیپی برای bridge اختصاصی.ip link set lxc-private up: فعالسازی bridge.
2. پیکربندی شبکه اختصاصی برای کانتینرها
پس از ایجاد bridge اختصاصی، مرحله بعدی پیکربندی شبکه اختصاصی برای کانتینرهاست. برای این کار، باید فایل پیکربندی کانتینر را ویرایش کنید و تنظیمات مربوط به اتصال به bridge جدید را وارد کنید.
فایل پیکربندی کانتینر معمولاً در مسیر زیر قرار دارد:
/var/lib/lxc/<container-name>/config
برای اتصال کانتینر به شبکه اختصاصی، موارد زیر را به فایل پیکربندی کانتینر اضافه کنید:
lxc.net.0.type = veth
lxc.net.0.link = lxc-private
lxc.net.0.flags = up
lxc.net.0.ipv4.address = 192.168.100.100/24
lxc.net.0.ipv4.gateway = 192.168.100.1
در این تنظیمات:
lxc.net.0.type = veth: نوع اتصال شبکه را بهعنوانvethتعیین میکند.lxc.net.0.link = lxc-private: این گزینه کانتینر را به bridgelxc-privateمتصل میکند.lxc.net.0.flags = up: فعالسازی رابط شبکه کانتینر.lxc.net.0.ipv4.address = 192.168.100.100/24: آدرس آیپی استاتیک برای کانتینر.lxc.net.0.ipv4.gateway = 192.168.100.1: دروازه پیشفرض برای کانتینر.
3. اعمال تغییرات و راهاندازی مجدد کانتینر
پس از ویرایش فایل پیکربندی کانتینر، برای اعمال تغییرات و استفاده از شبکه جدید، باید کانتینر را راهاندازی مجدد کنید.
از دستورات زیر برای متوقف کردن و شروع مجدد کانتینر استفاده کنید:
lxc-stop -n <container-name>
lxc-start -n <container-name>
4. بررسی وضعیت شبکه کانتینر
پس از راهاندازی مجدد کانتینر، برای اطمینان از اتصال کانتینر به شبکه اختصاصی، میتوانید از دستور زیر استفاده کنید:
lxc-attach -n <container-name> -- ip a
این دستور باید آیپی استاتیک 192.168.100.100 را در داخل کانتینر نشان دهد.
5. بررسی شبکهها و تنظیمات در میزبان (host)
برای بررسی وضعیت شبکه در میزبان و اطمینان از اتصال کانتینر به شبکه اختصاصی، از دستور زیر برای نمایش وضعیت bridge اختصاصی استفاده کنید:
ip addr show lxc-private
این دستور وضعیت bridge جدید lxc-private را نمایش میدهد و باید آدرس آیپی 192.168.100.1/24 را نشان دهد.
6. مشکلات رایج و رفع آنها
در صورتی که کانتینر بهدرستی به شبکه اختصاصی متصل نشد، میتوانید موارد زیر را بررسی کنید:
- مطمئن شوید که آدرس آیپی تنظیمشده در محدوده شبکه
lxc-privateاست. - اطمینان حاصل کنید که bridge جدید به درستی ایجاد شده و فعال است.
- بررسی کنید که دروازه پیشفرض (
gateway) به درستی پیکربندی شده باشد. - بررسی کنید که فایروال میزبان، دسترسی به شبکه اختصاصی را مسدود نکرده باشد.
جمعبندی
ایجاد شبکه اختصاصی برای کانتینرها در LXC امکان مدیریت بهتر و امنتر شبکههای داخلی را فراهم میآورد. با ایجاد یک bridge اختصاصی و پیکربندی کانتینرها برای اتصال به این bridge، میتوانید شبکهای مجزا برای کانتینرها ایجاد کنید که در برابر شبکههای خارجی ایزوله باشد. این پیکربندی به شما این امکان را میدهد که از کانتینرها در محیطهایی با نیازمندیهای خاص مانند آزمایش، توسعه یا امنیت استفاده کنید.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 8. بررسی ساختار Templateها و شخصیسازی آنها”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”نحوه ایجاد Template سفارشی ” subtitle=”توضیحات کامل”]Templates ها ابزارهای مفیدی هستند که به شما امکان میدهند کانتینرهای جدید را بر اساس یک تصویر پایه (Template) ایجاد کنید. این Templates بهطور معمول شامل سیستمعاملی پایه مانند Ubuntu، CentOS یا BusyBox هستند. اما ممکن است شما بخواهید یک Template سفارشی بسازید که شامل تنظیمات و پیکربندی خاص خودتان باشد.
در این بخش، نحوه ایجاد یک Template سفارشی برای کانتینرهای LXC را بررسی خواهیم کرد. این Template میتواند شامل تمامی تنظیمات شبکه، نرمافزارهای نصبشده و هر گونه پیکربندی سفارشی دیگر باشد.
1. آمادهسازی محیط Template سفارشی
اولین قدم برای ایجاد یک Template سفارشی این است که یک کانتینر LXC معمولی ایجاد کرده و پیکربندیها و تنظیمات مورد نظر خود را در آن اعمال کنید. پس از اعمال تنظیمات مورد نظر، از این کانتینر بهعنوان Template برای ساخت کانتینرهای دیگر استفاده خواهید کرد.
برای شروع، یک کانتینر جدید ایجاد کنید:
lxc launch ubuntu:20.04 custom-container
در اینجا custom-container نام کانتینری است که بهعنوان پایه برای Template سفارشی شما خواهد بود. شما میتوانید از هر تصویر موجود مانند ubuntu:20.04 یا هر توزیع دیگری استفاده کنید.
2. انجام تنظیمات سفارشی داخل کانتینر
پس از ایجاد کانتینر، به آن متصل شوید و تنظیمات دلخواه خود را اعمال کنید. برای مثال، نصب بستهها، پیکربندی شبکه، ایجاد کاربران، و سایر تنظیمات مورد نیاز.
برای اتصال به کانتینر از دستور زیر استفاده کنید:
lxc exec custom-container -- /bin/bash
پس از ورود به محیط کانتینر، میتوانید بستهها را نصب کنید یا تنظیمات مختلف را تغییر دهید. بهعنوان مثال، میتوانید یک نرمافزار خاص نصب کنید:
apt update
apt install -y nginx
پس از انجام تمام تنظیمات مورد نظر، میتوانید از کانتینر بهعنوان Template استفاده کنید.
3. تبدیل کانتینر به Template سفارشی
برای تبدیل کانتینر به Template، ابتدا کانتینر را متوقف کنید:
lxc stop custom-container
سپس برای ایجاد Template از کانتینر، دستور زیر را اجرا کنید:
lxc publish custom-container --alias custom-template
این دستور کانتینر custom-container را بهعنوان یک Template با نام custom-template منتشر میکند. پس از انجام این کار، شما میتوانید از Template سفارشی خود برای ایجاد کانتینرهای جدید استفاده کنید.
4. استفاده از Template سفارشی برای ایجاد کانتینر جدید
پس از ساخت Template سفارشی، شما میتوانید از آن برای ایجاد کانتینرهای جدید استفاده کنید. برای این کار، دستور زیر را اجرا کنید:
lxc launch custom-template new-container
این دستور یک کانتینر جدید به نام new-container ایجاد میکند که تمام تنظیمات و پیکربندیهای موجود در Template سفارشی شما را شامل میشود.
5. ویرایش Template سفارشی
اگر پس از ایجاد Template سفارشی نیاز به تغییرات اضافی در آن دارید، میتوانید این تغییرات را در Template انجام دهید. برای این کار، ابتدا Template را به یک کانتینر جدید منتشر کنید، سپس تغییرات مورد نظر را اعمال کرده و مجدداً آن را بهعنوان Template منتشر کنید.
برای مثال، اگر بخواهید Template را بهروزرسانی کنید:
- یک کانتینر جدید از Template فعلی بسازید:
lxc launch custom-template temp-container - تغییرات دلخواه خود را در
temp-containerاعمال کنید:lxc exec temp-container -- /bin/bash - کانتینر را متوقف کنید:
lxc stop temp-container - کانتینر را بهعنوان Template جدید منتشر کنید:
lxc publish temp-container --alias custom-template
اینگونه میتوانید Template را بهروزرسانی کرده و آن را برای استفاده در آینده بهعنوان Template جدید منتشر کنید.
6. پاک کردن Templateهای قدیمی
پس از ایجاد Templateهای جدید، ممکن است بخواهید Templateهای قدیمی را پاک کنید. برای حذف یک Template از LXC، دستور زیر را اجرا کنید:
lxc image delete custom-template
این دستور Template custom-template را از سیستم حذف میکند.
جمعبندی
ایجاد Template سفارشی در LXC به شما این امکان را میدهد که یک محیط پایه و سفارشی برای کانتینرها ایجاد کنید که شامل تنظیمات و پیکربندیهای خاص باشد. این Template میتواند شامل نرمافزارهای نصبشده، تنظیمات شبکه، کاربران و دیگر پیکربندیها باشد. به این ترتیب، میتوانید کانتینرهای جدید را بهطور سریع و مؤثر از یک Template سفارشی ایجاد کنید و بهراحتی محیطهای مشابه را برای استفادههای مختلف راهاندازی کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”استفاده از اسکریپتهای init هنگام ساخت کانتینر” subtitle=”توضیحات کامل”]در LXC، بهطور پیشفرض هنگام ایجاد یک کانتینر، ممکن است بخواهید برخی تنظیمات و پیکربندیهای خاص را بهصورت خودکار و هنگام راهاندازی کانتینر اعمال کنید. برای این منظور، میتوانید از اسکریپتهای init استفاده کنید. اسکریپتهای init ابزارهایی هستند که بهطور خودکار در زمان راهاندازی کانتینر اجرا میشوند و به شما این امکان را میدهند که کانتینر را بهطور سفارشی راهاندازی کرده و تنظیمات خاصی را اعمال کنید.
در این بخش، نحوه استفاده از اسکریپتهای init هنگام ساخت و راهاندازی کانتینرها را بررسی خواهیم کرد.
1. آشنایی با اسکریپتهای init در LXC
اسکریپتهای init معمولاً در هنگام راهاندازی کانتینر اجرا میشوند و میتوانند وظایف مختلفی مانند نصب بستهها، تنظیمات شبکه، ایجاد کاربران و غیره را انجام دهند. این اسکریپتها معمولاً در مسیر /etc/rc.local یا مشابه آن قرار دارند.
در LXC، هنگامی که یک کانتینر ساخته میشود، میتوانید اسکریپتهای سفارشی را بهصورت خودکار با استفاده از ویژگیهای موجود در تنظیمات کانتینر یا در داخل Template ها فراخوانی کنید.
2. ایجاد یک اسکریپت init سفارشی
برای استفاده از اسکریپت init، ابتدا باید یک اسکریپت bash ایجاد کنید که عملیات خاصی را انجام دهد. بهعنوان مثال، فرض کنید بخواهید یک اسکریپت برای نصب بستههای خاص و تنظیمات اولیه بنویسید.
- ابتدا یک فایل اسکریپت ایجاد کنید:
nano /path/to/your/script/init-script.sh - در این فایل اسکریپت، دستورات مورد نظر خود را برای انجام تنظیمات و نصب بستهها وارد کنید:
#!/bin/bash # نصب بستهها apt-get update apt-get install -y curl vim # ایجاد یک کاربر جدید useradd -m customuser - اسکریپت را ذخیره کنید و اجازه اجرای آن را بدهید:
chmod +x /path/to/your/script/init-script.sh
3. استفاده از اسکریپت init هنگام راهاندازی کانتینر
برای استفاده از اسکریپت init هنگام راهاندازی یک کانتینر، شما میتوانید این اسکریپت را در فایل پیکربندی کانتینر یا در اسکریپتهای راهاندازی آن معرفی کنید.
بهعنوان مثال، هنگام ساخت کانتینر، میتوانید از اسکریپت init بهطور مستقیم استفاده کنید. برای این کار، ابتدا باید فایل پیکربندی کانتینر را ویرایش کنید.
- یک کانتینر جدید بسازید:
lxc launch ubuntu:20.04 custom-container - بعد از ایجاد کانتینر، به پیکربندی آن بروید:
nano /var/lib/lxc/custom-container/config - در این فایل پیکربندی، باید آدرس اسکریپت
initرا اضافه کنید. بهعنوان مثال:lxc.hook.start = /path/to/your/script/init-script.shاین دستور به LXC میگوید که هنگام شروع کانتینر، اسکریپت
init-script.shرا اجرا کند. - فایل پیکربندی را ذخیره کنید و کانتینر را دوباره راهاندازی کنید:
lxc start custom-container
4. اجرای اسکریپت init در زمان راهاندازی سیستمعامل
اگر میخواهید اسکریپت init خود را بهطور خودکار در هر بار راهاندازی کانتینر اجرا کنید، میتوانید اسکریپت را در فایلهای راهاندازی سیستمعامل داخل کانتینر قرار دهید. بهعنوان مثال، میتوانید اسکریپت خود را به فایل /etc/rc.local اضافه کنید که معمولاً در هنگام راهاندازی سیستمعامل اجرا میشود.
- ابتدا وارد کانتینر شوید:
lxc exec custom-container -- /bin/bash - فایل
/etc/rc.localرا ویرایش کنید:nano /etc/rc.local - قبل از دستور
exit 0، اسکریپت خود را فراخوانی کنید:/path/to/your/script/init-script.sh - فایل را ذخیره کنید و از کانتینر خارج شوید.
5. تست اسکریپت init
برای اطمینان از اینکه اسکریپت init به درستی اجرا میشود، میتوانید کانتینر را دوباره راهاندازی کنید و بررسی کنید که تنظیمات مورد نظر اعمال شدهاند.
برای بررسی و مشاهده لاگهای مرتبط با راهاندازی کانتینر، میتوانید از دستور lxc info یا مشاهده فایل لاگ کانتینر استفاده کنید:
lxc info custom-container
cat /var/log/lxc/custom-container.log
6. ایجاد یک Template با اسکریپتهای init
اگر میخواهید Templateای بسازید که شامل اسکریپتهای init باشد، ابتدا اسکریپتها را در Template ذخیره کرده و سپس کانتینر را از آن Template بسازید.
برای این کار، ابتدا یک Template معمولی ایجاد کرده و سپس اسکریپتهای init را به آن اضافه کنید:
lxc publish custom-container --alias custom-template
بعد از آن، هنگام ساخت کانتینر از Template، اسکریپتها بهطور خودکار اجرا خواهند شد.
جمعبندی
استفاده از اسکریپتهای init هنگام ساخت کانتینر در LXC یک روش کارآمد برای انجام تنظیمات خودکار و سفارشی است. شما میتوانید اسکریپتهای bash خود را برای نصب نرمافزارها، پیکربندی شبکه، ایجاد کاربران و سایر تنظیمات دلخواه بنویسید و آنها را بهطور خودکار در زمان راهاندازی کانتینر اجرا کنید. این ویژگی به شما کمک میکند که فرآیندهای تکراری و سفارشیسازی را در کانتینرها بهصورت خودکار انجام دهید و به سادگی کانتینرهایی با پیکربندیهای خاص بسازید.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 9. بررسی خطاهای رایج و نحوه دیباگ”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”مشاهده لاگ کانتینر با lxc-start -l DEBUG -o logfile” subtitle=”توضیحات کامل”]در LXC، یکی از روشهای موثر برای عیبیابی و بررسی جزئیات فرآیندهای مختلف کانتینرها، استفاده از لاگهای مربوطه است. برای این منظور، میتوان از دستور lxc-start همراه با گزینههای -l و -o برای تنظیم سطح لاگ و مشخص کردن محل ذخیرهسازی فایل لاگ استفاده کرد.
در این بخش، نحوه مشاهده و ذخیره لاگ کانتینر با استفاده از دستور lxc-start به همراه گزینههای DEBUG و -o logfile را بررسی میکنیم.
1. آشنایی با گزینههای lxc-start
دستور lxc-start برای راهاندازی یک کانتینر استفاده میشود، و با استفاده از گزینههای مختلف میتوان سطح لاگها و اطلاعات اضافی مربوط به راهاندازی کانتینر را مشاهده کرد.
-l: این گزینه برای تعیین سطح لاگ استفاده میشود. مقدارDEBUGبیشترین سطح جزئیات را ارائه میدهد.-o: این گزینه برای مشخص کردن محل ذخیرهسازی لاگها است. با استفاده از این گزینه، میتوان فایل لاگ را بهطور خاص در مسیر دلخواه ذخیره کرد.
2. مشاهده لاگ کانتینر با سطح DEBUG
برای مشاهده لاگ کانتینر با جزئیات بیشتر، میتوانید دستور زیر را وارد کنید:
lxc-start -n <container-name> -l DEBUG -o /path/to/logfile
در این دستور:
<container-name>نام کانتینری است که میخواهید آن را راهاندازی کنید و لاگ آن را مشاهده نمایید.DEBUGبیشترین سطح جزئیات را برای لاگها فراهم میکند./path/to/logfileمسیر فایل لاگ است که اطلاعات لاگ در آن ذخیره خواهد شد.
3. مثال عملی
فرض کنید میخواهید کانتینری به نام my-container را با سطح لاگ DEBUG راهاندازی کنید و لاگها را در فایل /var/log/lxc/my-container.log ذخیره کنید. دستور زیر را اجرا میکنید:
lxc-start -n my-container -l DEBUG -o /var/log/lxc/my-container.log
با اجرای این دستور:
- کانتینر
my-containerشروع به راهاندازی میکند. - تمامی اطلاعات و جزئیات مربوط به این فرآیند در سطح
DEBUGدر فایل لاگ مشخصشده ذخیره میشود.
4. بررسی لاگها
برای مشاهده محتویات فایل لاگ، میتوانید از دستورات معمولی مشاهده فایلها مانند cat, less, یا tail استفاده کنید:
- برای مشاهده فایل لاگ بهصورت کامل:
cat /var/log/lxc/my-container.log - برای مشاهده فایل لاگ بهصورت صفحهبهصفحه (با قابلیت اسکرول):
less /var/log/lxc/my-container.log - برای مشاهده لاگ بهصورت زنده و در حال اضافه شدن:
tail -f /var/log/lxc/my-container.log
5. بررسی محتوای لاگ
در فایل لاگ، اطلاعات زیادی در مورد مراحل مختلف راهاندازی کانتینر شامل:
- ارتباط با شبکه
- مونتاژ سیستم فایلها
- تنظیمات مربوط به منابع
- وضعیت پیکربندیها و خطاهای احتمالی را مشاهده خواهید کرد.
سطح DEBUG به شما این امکان را میدهد که حتی کوچکترین خطاها و اطلاعات را دریافت کنید که برای عیبیابی بسیار مفید است.
6. مدیریت حجم فایل لاگ
توجه داشته باشید که استفاده از سطح DEBUG میتواند باعث تولید حجم زیادی از لاگها شود. بنابراین، توصیه میشود که بعد از اتمام فرآیند راهاندازی کانتینر، سطح لاگ را به حالتهای پایینتر تغییر دهید تا از تولید لاگهای اضافی جلوگیری شود.
برای تغییر سطح لاگ به حالت معمولی، میتوانید از دستور lxc-start بدون گزینه -l DEBUG استفاده کنید.
جمعبندی
استفاده از گزینههای -l DEBUG و -o logfile در دستور lxc-start، به شما این امکان را میدهد که لاگهای دقیق و جامع از فرآیند راهاندازی کانتینرها دریافت کنید. این لاگها بهویژه در زمان عیبیابی و بررسی مشکلات عملکرد کانتینرها بسیار مفید هستند. با توجه به اینکه سطح DEBUG میتواند حجم زیادی از اطلاعات را تولید کند، پس از اتمام فرآیند راهاندازی، بهتر است سطح لاگ را کاهش داده و فقط اطلاعات ضروری را ذخیره کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”بررسی مشکلات نامگذاری، template، و permission” subtitle=”توضیحات کامل”]در هنگام کار با کانتینرهای LXC و LXD، ممکن است با مشکلات مختلفی در نامگذاری کانتینرها، استفاده از Templateها، و مسائل مرتبط با دسترسیها (permissions) مواجه شوید. این مشکلات میتوانند بر کارکرد صحیح کانتینرها تأثیر بگذارند و عیبیابی آنها برای اطمینان از اجرای صحیح کانتینرها ضروری است. در این بخش، مشکلات رایج در این سه زمینه را بررسی میکنیم و راهحلهای عملی برای رفع آنها ارائه خواهیم داد.
1. مشکلات نامگذاری کانتینرها
کانتینرهای LXC و LXD باید با نامهای منحصر به فرد ایجاد شوند. مشکلاتی که در فرآیند نامگذاری ممکن است پیش بیاید عبارتند از:
- نامهای تکراری: اگر نام کانتینری که قصد ایجاد آن را دارید مشابه نام کانتینر دیگری باشد، فرآیند ساخت کانتینر جدید با خطا مواجه میشود.
راهحل:
- برای جلوگیری از این مشکل، از دستور
lxc-lsبرای لیستکردن کانتینرهای موجود استفاده کنید و بررسی کنید که نام کانتینر مورد نظر شما در حال حاضر در سیستم وجود ندارد. - بهعنوان مثال:
lxc-ls - همچنین میتوانید از نامهای خاص و ترکیبی برای نامگذاری کانتینرها استفاده کنید تا احتمال تکراری بودن نامها کمتر شود.
- برای جلوگیری از این مشکل، از دستور
- استفاده از کاراکترهای غیرمجاز: نام کانتینرها باید تنها شامل حروف، اعداد و علامتهای خط تیره (dash) باشد. استفاده از کاراکترهای ویژه مانند فاصله (space)، زیرخط (_) یا نمادهای خاص ممکن است باعث بروز خطا شود.
راهحل:
- هنگام انتخاب نام برای کانتینر، فقط از حروف کوچک و اعداد همراه با خط تیره استفاده کنید.
- برای مثال، نامهای مانند
my-container,test1, یاweb-serverمناسب هستند.
- طول نام کانتینر: نام کانتینرها نباید از یک طول معین بیشتر باشند (معمولاً 255 کاراکتر).
راهحل:
- اطمینان حاصل کنید که نام کانتینر شما کوتاه و مطابق با استانداردهای تعریفشده باشد.
2. مشکلات مرتبط با Templateها
در LXC و LXD، برای ایجاد کانتینرها معمولاً از Templateها استفاده میشود. Templateها شامل تنظیمات پیشفرض برای سیستمعاملها یا ابزارهای مختلف هستند که بهعنوان یک الگو برای ایجاد کانتینر استفاده میشوند.
- عدم وجود Template مناسب: در صورتی که Template مورد نظر برای سیستمعامل خاصی وجود نداشته باشد، ممکن است نتوانید کانتینری با آن سیستمعامل بسازید.
راهحل:
- اطمینان حاصل کنید که Templateها بهدرستی نصب شده باشند. برای بررسی نصب Templateها، از دستور زیر استفاده کنید:
lxc-create -t list - در صورتی که Template مورد نظر شما در این لیست نبود، ممکن است نیاز باشد که آن را از مخازن آنلاین دانلود یا بهصورت دستی نصب کنید.
- برای مثال، برای ایجاد یک کانتینر با توزیع Ubuntu، میتوانید از دستور زیر استفاده کنید:
lxc-create -n my-container -t ubuntu - در صورتی که Template موجود نباشد، میتوانید آن را از وبسایتهای رسمی مانند Linux Containers دانلود کنید.
- اطمینان حاصل کنید که Templateها بهدرستی نصب شده باشند. برای بررسی نصب Templateها، از دستور زیر استفاده کنید:
- مشکلات در ایجاد کانتینر از Templateها: گاهی اوقات ممکن است فرآیند ایجاد کانتینر از Templateها با خطا مواجه شود، بهویژه در صورت وجود مشکلات در فایلهای پیکربندی یا نسخه Template.
راهحل:
- مطمئن شوید که Template بهدرستی پیکربندی شده و بهروز است.
- در صورت بروز خطا، به لاگها مراجعه کرده و خطاهای موجود را بررسی کنید:
cat /var/log/lxc/my-container.log - خطاهای مربوط به Template معمولاً شامل مشکلات در دسترسی به منابع یا فایلهای غیرموجود است.
3. مشکلات دسترسیها (Permissions)
در سیستمهای لینوکس، مشکلات دسترسی به فایلها و منابع میتوانند باعث بروز مشکلات در ایجاد یا مدیریت کانتینرها شوند.
- عدم دسترسی به فایلهای پیکربندی: برای تنظیمات پیکربندی کانتینرها، فایلهای مختلفی باید قابل دسترسی باشند. مشکلات دسترسی به این فایلها میتواند باعث ایجاد خطا در زمان راهاندازی یا پیکربندی کانتینر شود.
راهحل:
- اطمینان حاصل کنید که کاربری که دستور را اجرا میکند دسترسیهای لازم را دارد. برای مثال، اگر کاربر شما اجازه دسترسی به فایلهای پیکربندی در مسیر
/var/lib/lxc/را ندارد، ممکن است خطاهایی مشاهده کنید. - برای بررسی و اصلاح دسترسیها، میتوانید از دستور
chmodوchownاستفاده کنید. بهعنوان مثال:sudo chown -R $USER:$USER /var/lib/lxc/my-container sudo chmod -R 755 /var/lib/lxc/my-container
- اطمینان حاصل کنید که کاربری که دستور را اجرا میکند دسترسیهای لازم را دارد. برای مثال، اگر کاربر شما اجازه دسترسی به فایلهای پیکربندی در مسیر
- مشکلات دسترسی به منابع (مانند شبکه یا دیسک): در برخی مواقع، ممکن است کانتینر نتواند به منابع خاصی مانند شبکه یا دیسک دسترسی پیدا کند.
راهحل:
- اطمینان حاصل کنید که کانتینر به گروهها و کاربران مناسب اضافه شده است. همچنین، ممکن است نیاز باشد که دسترسیها به منابع شبکه یا دیسک را با استفاده از دستور
setfaclتنظیم کنید.
- اطمینان حاصل کنید که کانتینر به گروهها و کاربران مناسب اضافه شده است. همچنین، ممکن است نیاز باشد که دسترسیها به منابع شبکه یا دیسک را با استفاده از دستور
جمعبندی
مشکلات نامگذاری، استفاده از Templateها و دسترسیها در LXC و LXD میتواند باعث بروز مشکلات مختلفی در هنگام ایجاد و مدیریت کانتینرها شود. برای جلوگیری از این مشکلات، باید توجه زیادی به نامگذاری صحیح کانتینرها، نصب و بهروزرسانی Templateها، و تنظیم درست دسترسیها داشته باشید. با استفاده از دستورات مناسب مانند lxc-ls برای لیست کردن کانتینرها، lxc-create برای استفاده از Templateها، و تنظیم دقیق دسترسیها، میتوانید این مشکلات را برطرف کنید و از اجرای بهینه کانتینرها اطمینان حاصل کنید.
[/cdb_course_lesson][/cdb_course_lessons]
lxc init و lxc launch وجود دارند که هرکدام عملکرد خاص خود را دارند. در این بخش، تفاوتهای اصلی بین این دو دستور توضیح داده خواهد شد.
lxc init
دستور lxc init برای ایجاد یک کانتینر استفاده میشود، اما این دستور فقط کانتینر را ایجاد میکند و آن را راهاندازی نمیکند. به عبارت دیگر، با استفاده از lxc init شما فقط فایلهای پیکربندی کانتینر را بر اساس یک قالب (template) مشخص میکنید و کانتینر آماده به اجرا میشود، ولی تا زمانی که دستور دیگری برای راهاندازی آن اجرا نکنید، کانتینر شروع به کار نخواهد کرد.
ساختار دستور:
lxc init <template> <container-name> [<profile>]
مثال: برای ایجاد یک کانتینر از نوع ubuntu با نام my-container:
lxc init ubuntu my-container
در اینجا، کانتینر ایجاد میشود، اما اجرا نمیشود و شما میتوانید تنظیمات و پیکربندیهای بیشتری را قبل از راهاندازی آن انجام دهید.
lxc launch
دستور lxc launch برای ایجاد و بهطور همزمان راهاندازی یک کانتینر استفاده میشود. این دستور علاوه بر ایجاد کانتینر، آن را بلافاصله اجرا میکند. به عبارت دیگر، با استفاده از lxc launch، کانتینر به طور مستقیم از قالب (template) مشخص شده اجرا میشود و آماده استفاده میشود.
ساختار دستور:
lxc launch <template> <container-name> [<profile>]
مثال: برای ایجاد و راهاندازی یک کانتینر از نوع ubuntu با نام my-container:
lxc launch ubuntu my-container
در اینجا، کانتینر بهطور خودکار پس از ایجاد، شروع به کار میکند و شما میتوانید از آن استفاده کنید.
جمعبندی
lxc init: فقط کانتینر را ایجاد میکند بدون اینکه آن را اجرا کند. شما میتوانید پس از ایجاد کانتینر، تنظیمات اضافی انجام دهید.lxc launch: کانتینر را ایجاد و بهطور همزمان آن را راهاندازی میکند.
انتخاب دستور مناسب بستگی به نیاز شما دارد؛ اگر فقط به ایجاد کانتینر نیاز دارید بدون اینکه بلافاصله آن را راهاندازی کنید، از lxc init استفاده کنید. در صورتی که نیاز به راهاندازی کانتینر پس از ایجاد آن دارید، از lxc launch استفاده کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”ایجاد کانتینر جدید با تنظیمات پیشفرض” subtitle=”توضیحات کامل”]برای ایجاد یک کانتینر جدید با تنظیمات پیشفرض در LXD، شما میتوانید از دستور lxc launch استفاده کنید. این دستور یک کانتینر جدید را از قالب مشخصشده راهاندازی میکند. در این قسمت، نحوه استفاده از این دستور و تنظیمات آن بهطور دقیق بررسی میشود.
در این بخش، فرض میکنیم که LXD و تمام پیشنیازهای آن بهدرستی نصب و پیکربندی شدهاند.
دستور ایجاد کانتینر با تنظیمات پیشفرض
برای ایجاد کانتینر با استفاده از یک قالب پیشفرض، ابتدا نام قالبی که میخواهید استفاده کنید را تعیین کنید. بهطور مثال، اگر میخواهید یک کانتینر Ubuntu ایجاد کنید، دستور به این صورت خواهد بود:
lxc launch ubuntu:20.04 my-container
در این دستور:
ubuntu:20.04نام قالبی است که از آن کانتینر ساخته میشود (در اینجا نسخه 20.04 از Ubuntu).my-containerنام کانتینری است که میخواهید ایجاد کنید.
این دستور یک کانتینر جدید با نام my-container ایجاد کرده و آن را بهطور خودکار راهاندازی میکند. از آنجایی که این دستور از تنظیمات پیشفرض استفاده میکند، شما نیازی به اعمال تغییرات خاصی در کانفیگ نخواهید داشت.
بررسی تنظیمات پیشفرض کانتینر
در صورت نیاز به بررسی تنظیمات پیشفرض کانتینر، میتوانید از دستور lxc config show استفاده کنید:
lxc config show my-container
این دستور تمامی پیکربندیهای کانتینر my-container را نمایش میدهد. در این خروجی، میتوانید تنظیمات پیشفرض مانند تنظیمات شبکه، storage، حافظه و سایر ویژگیهای کانتینر را مشاهده کنید.
تغییرات تنظیمات پیشفرض
اگر بخواهید تنظیمات خاصی را قبل از ایجاد کانتینر تغییر دهید، میتوانید از گزینههای مختلف در دستور lxc launch استفاده کنید. بهطور مثال، اگر میخواهید حافظه کانتینر را تنظیم کنید، میتوانید از گزینه -c برای مشخص کردن پیکربندیها استفاده کنید:
lxc launch ubuntu:20.04 my-container -c limits.memory=2GB
در این دستور، حافظه کانتینر به ۲ گیگابایت محدود شده است.
جمعبندی
در این بخش، نحوه ایجاد یک کانتینر جدید با تنظیمات پیشفرض LXD را بررسی کردیم. استفاده از دستور lxc launch برای ایجاد کانتینر بهطور ساده و سریع انجام میشود و برای تغییر تنظیمات پیشفرض میتوان از گزینههای مختلفی مانند -c استفاده کرد. همچنین، دستور lxc config show به شما این امکان را میدهد که تنظیمات کانتینر را بررسی کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تعیین ایمیج دلخواه هنگام ایجاد کانتینر” subtitle=”توضیحات کامل”]در LXD، شما میتوانید هنگام ایجاد کانتینر، ایمیجهای مختلف را بهدلخواه انتخاب کنید. LXD از مخازن ایمیجهای مختلفی مانند Ubuntu، CentOS، Alpine و بسیاری دیگر پشتیبانی میکند. این امکان به شما اجازه میدهد تا ایمیج موردنظر خود را برای کانتینر انتخاب کرده و آن را برای استفاده از آن در پروژههای مختلف راهاندازی کنید.
در این بخش، نحوه تعیین ایمیج دلخواه هنگام ایجاد کانتینر با استفاده از دستور lxc launch را بهطور کامل توضیح خواهیم داد.
دستور ایجاد کانتینر با ایمیج دلخواه
برای ایجاد یک کانتینر با ایمیج دلخواه، ابتدا باید نام ایمیج و نسخه آن را مشخص کنید. سپس با استفاده از دستور lxc launch، کانتینر را با آن ایمیج راهاندازی کنید.
برای مثال، اگر بخواهید کانتینری با ایمیج CentOS 8 ایجاد کنید، دستور بهصورت زیر خواهد بود:
lxc launch images:centos/8 my-centos-container
در این دستور:
images:centos/8نشاندهنده ایمیج CentOS 8 از مخزن LXD است.my-centos-containerنام کانتینری است که قرار است ایجاد شود.
این دستور بهطور خودکار ایمیج موردنظر را دانلود کرده و کانتینر را از آن ایمیج راهاندازی میکند.
جستجو برای ایمیجهای موجود
اگر بخواهید ایمیجهای موجود در مخزن LXD را مشاهده کنید، میتوانید از دستور lxc image list استفاده کنید:
lxc image list images:
این دستور تمامی ایمیجهای موجود در مخزن عمومی LXD را به شما نشان میدهد. میتوانید ایمیجهای مختلف را بر اساس توزیع و نسخه مشاهده کنید.
استفاده از ایمیجهای محلی
اگر بخواهید از ایمیجهای محلی خود استفاده کنید (که قبلاً دانلود کردهاید یا بهصورت دستی بارگذاری کردهاید)، میتوانید از دستور lxc image import برای وارد کردن ایمیج محلی به LXD استفاده کنید. بهطور مثال:
lxc image import /path/to/custom-image.tar.xz --alias my-local-image
پس از وارد کردن ایمیج، میتوانید آن را برای ایجاد کانتینر استفاده کنید:
lxc launch my-local-image my-local-container
جمعبندی
در این بخش، نحوه تعیین ایمیج دلخواه هنگام ایجاد کانتینر با LXD را بررسی کردیم. با استفاده از دستور lxc launch میتوانید کانتینرها را با ایمیجهای مختلف از مخازن LXD یا ایمیجهای محلی خود ایجاد کنید. همچنین، با استفاده از دستور lxc image list میتوانید ایمیجهای موجود در مخزن LXD را مشاهده کرده و از آنها استفاده کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”اختصاص نام سفارشی و شبکه خاص به کانتینر” subtitle=”توضیحات کامل”]در LXD، میتوانید هنگام ایجاد کانتینر، نام سفارشی و شبکه خاصی را به آن اختصاص دهید. این تنظیمات به شما کمک میکند تا کانتینرهای خود را بهتر سازماندهی کنید و آنها را به شبکههای مختلف متصل کنید.
در این بخش، نحوه اختصاص نام سفارشی و شبکه خاص به کانتینر را توضیح خواهیم داد.
اختصاص نام سفارشی به کانتینر
برای اختصاص نام سفارشی به کانتینر هنگام ایجاد آن، میتوانید نام دلخواه خود را بهعنوان پارامتر دوم دستور lxc launch وارد کنید. برای مثال، اگر بخواهید یک کانتینر با نام my-custom-container ایجاد کنید، دستور بهصورت زیر خواهد بود:
lxc launch images:ubuntu/20.04 my-custom-container
در این دستور:
images:ubuntu/20.04نشاندهنده ایمیج Ubuntu 20.04 است.my-custom-containerنام سفارشی کانتینری است که میخواهید ایجاد کنید.
اختصاص شبکه خاص به کانتینر
برای اختصاص شبکه خاص به کانتینر، باید از پارامتر --network استفاده کنید. در صورتی که شبکه موردنظر شما بهصورت پیشفرض پیکربندی نشده باشد، باید ابتدا شبکه جدیدی ایجاد کنید.
- ایجاد شبکه جدید: برای ایجاد شبکه جدید، از دستور زیر استفاده کنید:
lxc network create my-custom-network bridgeاین دستور یک شبکه جدید به نام
my-custom-networkاز نوع bridge ایجاد میکند. - اتصال کانتینر به شبکه خاص: پس از ایجاد شبکه، میتوانید کانتینر خود را به آن شبکه متصل کنید. برای این کار از پارامتر
--networkاستفاده میکنیم:lxc launch images:ubuntu/20.04 my-custom-container --network my-custom-networkدر این دستور:
my-custom-containerنام سفارشی کانتینر است.my-custom-networkنام شبکهای است که میخواهید کانتینر به آن متصل شود.
مشاهده وضعیت شبکه کانتینر
برای بررسی وضعیت شبکه کانتینر و مشاهده اینکه آیا کانتینر به شبکه صحیح متصل شده است یا خیر، میتوانید از دستور زیر استفاده کنید:
lxc info my-custom-container
این دستور اطلاعات مربوط به کانتینر را نمایش میدهد و در آن میتوانید وضعیت شبکه و IPهای اختصاص دادهشده به کانتینر را مشاهده کنید.
جمعبندی
در این بخش، نحوه اختصاص نام سفارشی و شبکه خاص به کانتینر را در LXD بررسی کردیم. با استفاده از دستور lxc launch میتوانید کانتینرهایی با نام دلخواه ایجاد کنید و با استفاده از پارامتر --network کانتینرها را به شبکههای خاص متصل کنید. همچنین، با دستور lxc network create میتوانید شبکههای جدیدی بسازید و به کانتینرها اختصاص دهید. این امکانات به شما این امکان را میدهد که شبکهبندی و سازماندهی کانتینرهای خود را بهصورت دقیقتر و سفارشیتر انجام دهید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”استفاده از کانتینرهای مبتنی بر Cloud-init” subtitle=”توضیحات کامل”]Cloud-init یکی از ابزارهای محبوب در سیستمهای ابری است که به شما این امکان را میدهد تا فرآیند راهاندازی و پیکربندی اولیه سیستمهای لینوکسی، از جمله کانتینرها، را خودکار کنید. این ابزار بهویژه برای کانتینرهایی که میخواهید در محیطهای ابری یا بهصورت خودکار در محیطهای مختلف راهاندازی شوند، بسیار مفید است.
در این بخش، نحوه استفاده از کانتینرهای مبتنی بر Cloud-init را در LXD بررسی خواهیم کرد.
چرا از Cloud-init برای کانتینرها استفاده کنیم؟
Cloud-init به شما این امکان را میدهد که:
- پیکربندیهای اولیه کانتینرها را از طریق اسکریپتهای YAML انجام دهید.
- کاربران جدید بسازید، پکیجها را نصب کنید، فایلها را کپی کنید و یا تنظیمات شبکه را در زمان راهاندازی اعمال کنید.
- این فرآیندها بهصورت خودکار و بدون دخالت دستی پس از راهاندازی کانتینر انجام میشود.
این ویژگی بهویژه برای استفاده در محیطهای ابری یا زمانی که نیاز به راهاندازی و پیکربندی کانتینرها بهصورت خودکار دارید، بسیار مفید است.
نحوه استفاده از Cloud-init در LXD
برای استفاده از Cloud-init در LXD، ابتدا باید یک ایمیج کانتینری که از Cloud-init پشتیبانی میکند، انتخاب کنید. خوشبختانه بسیاری از ایمیجهای رسمی LXD از Cloud-init پشتیبانی میکنند.
- انتخاب ایمیج کانتینر با پشتیبانی از Cloud-init: بهطور پیشفرض، بسیاری از ایمیجها شامل پشتیبانی از Cloud-init هستند. برای مثال، میتوانید از ایمیج Ubuntu استفاده کنید:
lxc launch images:ubuntu/20.04 my-cloud-container - ایجاد فایل Cloud-init: پس از ایجاد کانتینر، میتوانید یک فایل
cloud-initبرای انجام پیکربندیها و تنظیمات اولیه بسازید. این فایل معمولاً به فرمت YAML است. برای مثال، اگر بخواهید یک کاربر جدید ایجاد کنید و پکیجهایی را نصب کنید، فایلcloud-init.yamlمیتواند بهصورت زیر باشد:#cloud-config users: - name: user1 sudo: ALL=(ALL) NOPASSWD:ALL shell: /bin/bash packages: - curl - vimاین فایل
cloud-init.yamlیک کاربر به نامuser1ایجاد میکند و پکیجهایcurlوvimرا نصب میکند. - اعمال Cloud-init به کانتینر: برای اعمال تنظیمات Cloud-init به کانتینر، باید فایل YAML خود را به کانتینر انتقال دهید و آن را در تنظیمات کانتینر مشخص کنید. این کار را میتوانید با استفاده از دستور
lxc configانجام دهید:lxc config set my-cloud-container user.user-data "$(cat cloud-init.yaml)"در این دستور:
my-cloud-containerنام کانتینری است که میخواهید Cloud-init را روی آن اعمال کنید.cloud-init.yamlنام فایل Cloud-init است که تنظیمات آن را در کانتینر اعمال خواهید کرد.
- ریستارت کانتینر برای اعمال تغییرات: برای اعمال تغییرات Cloud-init، باید کانتینر را ریستارت کنید. این کار را میتوانید با دستور
lxc restartانجام دهید:lxc restart my-cloud-containerپس از ریستارت شدن کانتینر، Cloud-init شروع به اجرای تنظیمات مشخصشده در فایل YAML خواهد کرد.
بررسی وضعیت و لاگهای Cloud-init
برای مشاهده وضعیت و لاگهای Cloud-init که حاوی جزئیات مربوط به پیکربندی و اجرای آن است، میتوانید وارد کانتینر شوید و فایلهای لاگ Cloud-init را مشاهده کنید. برای این کار از دستور زیر استفاده کنید:
lxc exec my-cloud-container -- tail -f /var/log/cloud-init.log
این دستور به شما امکان میدهد که در زمان واقعی (real-time) لاگهای Cloud-init را مشاهده کنید.
جمعبندی
در این بخش، نحوه استفاده از کانتینرهای مبتنی بر Cloud-init را در LXD بررسی کردیم. با استفاده از Cloud-init، میتوانید پیکربندیهای اولیه کانتینرها را بهصورت خودکار و با استفاده از فایلهای YAML انجام دهید. این قابلیت بهویژه در محیطهای ابری یا زمانی که نیاز به راهاندازی سریع و بدون دخالت دستی کانتینرها دارید، بسیار مفید است. همچنین، با استفاده از دستورات lxc config set و lxc restart میتوانید این تنظیمات را بهراحتی اعمال کرده و در زمان راهاندازی کانتینر از آنها بهرهبرداری کنید.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 2. مدیریت چرخه عمر کانتینرها”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”استارت کانتینر با lxc start” subtitle=”توضیحات کامل”]دستور lxc start در LXC برای راهاندازی یا استارت یک کانتینر استفاده میشود. این دستور به شما این امکان را میدهد که کانتینرهایی که قبلاً ساختهاید را بهراحتی راهاندازی کرده و آنها را در حالت اجرایی قرار دهید.
در این بخش، نحوه استفاده از دستور lxc start را بهطور کامل بررسی میکنیم.
نحوه استفاده از دستور lxc start
برای راهاندازی یک کانتینر با استفاده از دستور lxc start، کافی است نام کانتینر را به این دستور اضافه کنید. اگر کانتینر با موفقیت ایجاد شده باشد، با استفاده از این دستور میتوانید آن را راهاندازی کنید.
- راهاندازی کانتینر
برای راهاندازی یک کانتینر خاص، از دستور زیر استفاده کنید:
lxc start <container-name>بهعنوان مثال، اگر نام کانتینر شما
my-containerباشد، دستور زیر کانتینر را راهاندازی میکند:lxc start my-containerاین دستور کانتینر
my-containerرا در حالت اجرا قرار میدهد و شما میتوانید با استفاده از دستورات دیگر وضعیت آن را مشاهده کنید. - راهاندازی کانتینر در پسزمینه (Background)
بهطور پیشفرض، دستور
lxc startکانتینر را در پسزمینه راهاندازی میکند. بنابراین، لازم نیست که منتظر بمانید تا فرآیند راهاندازی کانتینر به پایان برسد. برای اطمینان از این موضوع میتوانید از دستورlxc listاستفاده کنید تا وضعیت کانتینرها را مشاهده کنید. - راهاندازی کانتینر با استفاده از دستور
-dاگر بخواهید کانتینر را در پسزمینه با حالت detached راهاندازی کنید، میتوانید از گزینه
-dاستفاده کنید:lxc start my-container -dاین دستور کانتینر
my-containerرا بهصورت detached (یعنی در پسزمینه) راهاندازی میکند. - مشاهده وضعیت کانتینر پس از استارت
بعد از راهاندازی کانتینر، برای مشاهده وضعیت آن میتوانید از دستور
lxc infoاستفاده کنید. این دستور اطلاعات دقیقی درباره کانتینر را نمایش میدهد:lxc info my-containerاین دستور اطلاعاتی مانند وضعیت (Running)، منابع استفادهشده، IP کانتینر و سایر جزئیات مربوط به کانتینر را نشان میدهد.
جمعبندی
در این بخش، نحوه استارت کردن کانتینرها با استفاده از دستور lxc start بررسی شد. این دستور به شما این امکان را میدهد که کانتینرهای خود را بهراحتی و در حالت پسزمینه راهاندازی کنید. همچنین با استفاده از دستور lxc info میتوانید وضعیت کانتینر را پس از استارت بررسی کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”توقف کانتینر با lxc stop (Soft/Hard Stop)” subtitle=”توضیحات کامل”]دستور lxc stop برای متوقف کردن یا shutdown کردن یک کانتینر در LXC استفاده میشود. این دستور به شما این امکان را میدهد که کانتینر را بهطور نرم (Soft) یا سخت (Hard) متوقف کنید، بسته به نیاز شما.
در این بخش، انواع مختلف توقف کانتینرها را بررسی میکنیم و نحوه استفاده از دستور lxc stop را با دو حالت مختلف (Soft Stop و Hard Stop) توضیح خواهیم داد.
1. توقف نرم (Soft Stop)
توقف نرم (Soft Stop) به معنای ارسال سیگنال SIGTERM به فرآیندهای درون کانتینر است. این سیگنال بهطور معمول به نرمافزارها و برنامههای در حال اجرا دستور میدهد تا بهطور ایمن و بهصورت طبیعی خاتمه یابند.
در این حالت، کانتینر معمولاً زمان کافی برای انجام فرآیندهای پایانی دارد (مانند ذخیره دادهها، بستن فایلها، و آزادسازی منابع).
برای توقف نرم یک کانتینر با استفاده از دستور lxc stop، کافی است بدون هیچگونه گزینهای این دستور را اجرا کنید:
lxc stop <container-name>
بهعنوان مثال، اگر نام کانتینر شما my-container باشد، دستور زیر کانتینر را بهطور نرم متوقف میکند:
lxc stop my-container
این دستور سیگنال SIGTERM را به کانتینر ارسال کرده و منتظر میماند تا فرآیندهای داخل کانتینر بهطور صحیح بسته شوند.
2. توقف سخت (Hard Stop)
توقف سخت (Hard Stop) به معنای ارسال سیگنال SIGKILL به کانتینر است. این سیگنال فوراً بهطور اجباری کانتینر را متوقف میکند، بدون اینکه به آن زمان بدهد که فرآیندها و نرمافزارهای در حال اجرا را بهصورت ایمن خاتمه دهد.
این روش برای زمانی مفید است که کانتینر بهدلیل مشکلات نرمافزاری یا گیر کردن فرآیندها نتواند بهدرستی متوقف شود.
برای توقف سخت یک کانتینر، از گزینه -f استفاده میشود:
lxc stop -f <container-name>
بهعنوان مثال، اگر نام کانتینر شما my-container باشد، دستور زیر کانتینر را بهطور سخت متوقف میکند:
lxc stop -f my-container
این دستور بلافاصله سیگنال SIGKILL را به کانتینر ارسال میکند و باعث میشود که تمام فرآیندهای داخل کانتینر بدون هیچ تأخیری متوقف شوند.
3. توقف کانتینر بهصورت همزمان برای چندین کانتینر
اگر میخواهید چندین کانتینر را بهطور همزمان متوقف کنید، میتوانید نام کانتینرها را بهصورت لیستی وارد کنید:
lxc stop my-container1 my-container2 my-container3
این دستور تمامی کانتینرهای مشخصشده را بهطور همزمان متوقف خواهد کرد.
جمعبندی
در این بخش، نحوه استفاده از دستور lxc stop برای متوقف کردن کانتینرها در دو حالت Soft Stop و Hard Stop بررسی شد. در حالت Soft Stop، دستور بهطور نرم سیگنال SIGTERM را به کانتینر ارسال کرده و از آن میخواهد تا بهطور ایمن و طبیعی خاتمه یابد. در حالت Hard Stop، سیگنال SIGKILL فوراً به کانتینر ارسال شده و فرآیندهای آن بهطور اجباری متوقف میشوند.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”راهاندازی مجدد کانتینر با lxc restart” subtitle=”توضیحات کامل”]برای راهاندازی مجدد یک کانتینر در LXC از دستور lxc restart استفاده میشود. این دستور به شما امکان میدهد که کانتینر را بهطور کامل متوقف کرده و سپس دوباره شروع کنید. این کار مشابه با استفاده از lxc stop و سپس lxc start است، با این تفاوت که با lxc restart تنها یک دستور کافی است.
دستور:
lxc restart <container-name>
در این دستور، <container-name> باید نام کانتینر مورد نظر شما باشد. بهعنوان مثال، اگر نام کانتینر mycontainer باشد، دستور به شکل زیر خواهد بود:
lxc restart mycontainer
این دستور باعث میشود که کانتینر متوقف شده و بلافاصله پس از توقف، دوباره راهاندازی شود.
پارامترهای اضافی:
- -f یا –force: در صورتی که کانتینر شما دچار مشکل شده باشد و نتوانید آن را بهطور معمول متوقف کنید، میتوانید از این گزینه استفاده کنید تا کانتینر را بهصورت اجباری راهاندازی مجدد کنید.
دستور:
lxc restart -f <container-name> - –timeout : این گزینه به شما امکان میدهد که یک تایماوت برای متوقف کردن کانتینر تعیین کنید. در صورتی که کانتینر در زمان مشخصشده متوقف نشود، دستور بهصورت خودکار آن را متوقف خواهد کرد.
دستور:
lxc restart --timeout 30 <container-name>این دستور کانتینر را پس از 30 ثانیه متوقف کرده و مجدداً راهاندازی خواهد کرد.
جمعبندی
دستور lxc restart به شما این امکان را میدهد که کانتینرها را بهطور سریع و آسان راهاندازی مجدد کنید. این دستور بهویژه در مواقعی که نیاز دارید تا تنظیمات جدیدی را برای کانتینر اعمال کرده و آن را از نو راهاندازی کنید، بسیار مفید است. همچنین، با استفاده از گزینههای اضافی میتوانید رفتار کانتینر را هنگام راهاندازی مجدد تنظیم کنید، بهویژه در شرایط خاصی که نیاز به توقف اجباری یا تایماوت دارید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”حذف کانتینر با lxc delete” subtitle=”توضیحات کامل”]برای حذف یک کانتینر در LXC از دستور lxc delete استفاده میشود. این دستور باعث میشود که کانتینر بهطور کامل از سیستم حذف شود، شامل تمام دادهها و پیکربندیهای آن. توجه داشته باشید که پس از حذف، تمامی اطلاعات داخل کانتینر قابل بازیابی نخواهد بود، بنابراین قبل از انجام این عملیات، از دادههای مهم کانتینر خود نسخه پشتیبان تهیه کنید.
دستور:
lxc delete <container-name>
در این دستور، <container-name> باید نام کانتینری باشد که قصد دارید آن را حذف کنید. بهعنوان مثال، اگر نام کانتینر mycontainer باشد، دستور به شکل زیر خواهد بود:
lxc delete mycontainer
این دستور کانتینر mycontainer را از سیستم حذف خواهد کرد.
پارامترهای اضافی:
- -f یا –force: اگر کانتینر در حال اجرا باشد، این گزینه به شما امکان میدهد که کانتینر را بهطور اجباری حذف کنید. این گزینه به شما این امکان را میدهد که کانتینر را بدون نیاز به متوقف کردن آن، حذف کنید.
دستور:
lxc delete -f <container-name>با استفاده از این دستور، کانتینر حتی اگر در حال اجرا باشد بهصورت اجباری متوقف شده و حذف خواهد شد.
- –all: با استفاده از این گزینه میتوانید تمام کانتینرهای موجود در سیستم خود را حذف کنید.
دستور:
lxc delete --allاین دستور تمامی کانتینرهای موجود در سیستم شما را حذف خواهد کرد.
جمعبندی
دستور lxc delete به شما امکان میدهد تا کانتینرها را بهطور کامل و بدون بازگشت از سیستم حذف کنید. با استفاده از گزینههای اضافی مانند -f یا --force، میتوانید کانتینرهای در حال اجرا را نیز حذف کنید. توجه داشته باشید که این عملیات برگشتپذیر نیست و تمامی دادهها و تنظیمات کانتینر حذف خواهند شد، بنابراین قبل از انجام این عملیات از دادههای مهم خود نسخه پشتیبان تهیه کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”بررسی وضعیت فعلی کانتینرها با lxc list و lxc info” subtitle=”توضیحات کامل”]برای نظارت و بررسی وضعیت کانتینرهای LXC، ابزارهایی مانند lxc list و lxc info بهطور گسترده استفاده میشوند. این ابزارها اطلاعات مفیدی در مورد وضعیت فعلی کانتینرها، منابع مصرفی، و پیکربندی آنها به شما میدهند.
1. دستور lxc list
دستور lxc list برای مشاهده لیستی از تمامی کانتینرهای موجود و وضعیت فعلی آنها استفاده میشود. این دستور اطلاعات خلاصهای مانند نام کانتینر، وضعیت (در حال اجرا یا متوقف)، IP کانتینر و منابع مصرفی را نشان میدهد.
دستور:
lxc list
این دستور لیستی از تمامی کانتینرهای موجود در سیستم را نمایش میدهد. برای هر کانتینر، وضعیت، IP، و اطلاعات مربوط به منابع مصرفی آنها نمایش داده میشود.
خروجی نمونه:
+---------------------+---------+---------------------+-----------------------------------------------+-----------+-----------+<br />
| NAME | STATUS | IPV4 | IPV6 | TYPE | SNAPSHOTS |<br />
+---------------------+---------+---------------------+-----------------------------------------------+-----------+-----------+<br />
| mycontainer | RUNNING | 10.0.3.2 | fd42:abcd:1234:5678::2 | CONTAINER | 0 |<br />
| othercontainer | STOPPED | - | - | CONTAINER | 0 |<br />
+---------------------+---------+---------------------+-----------------------------------------------+-----------+-----------+<br />
در این مثال:
NAME: نام کانتینرSTATUS: وضعیت کانتینر (RUNNING یا STOPPED)IPV4وIPV6: آدرسهای IP کانتینرTYPE: نوع کانتینر (در اینجا، CONTAINER بهمعنی کانتینر معمولی است)SNAPSHOTS: تعداد snapshotهای موجود برای کانتینر
2. دستور lxc info
دستور lxc info برای دریافت اطلاعات دقیقتر در مورد وضعیت یک کانتینر خاص استفاده میشود. این دستور جزئیات بیشتری را در مورد منابع مصرفی، وضعیت سیستمعامل کانتینر، تنظیمات شبکه و دیگر ویژگیهای آن به نمایش میگذارد.
دستور:
lxc info <container-name>
در این دستور، <container-name> نام کانتینری است که میخواهید اطلاعات آن را بررسی کنید. بهعنوان مثال، برای مشاهده اطلاعات کانتینر mycontainer دستور به صورت زیر خواهد بود:
lxc info mycontainer
خروجی نمونه:
Name: mycontainer
Status: RUNNING
Architecture: x86_64
Created: 2023/05/15 12:00 UTC
Last Used: 2023/05/16 14:00 UTC
Profiles: default
Pid: 12345
Ips:
eth0: inet 10.0.3.2/24
eth0: inet6 fd42:abcd:1234:5678::2/64
Resources:
Memory (current): 500MB
Memory (limit): 2GB
CPU (limit): 2
CPU (usage): 0.05%
در این خروجی:
Status: وضعیت کانتینر (RUNNING یا STOPPED)Architecture: معماری سیستم کانتینرCreated: زمان ایجاد کانتینرLast Used: آخرین بار زمانی که کانتینر استفاده شدهProfiles: پروفایلهای فعال کانتینرPid: شناسه پردازش (PID) کانتینرIps: آدرسهای IP کانتینر در رابطهای مختلفResources: اطلاعات منابع، شامل حافظه، CPU و میزان مصرف آنها
جمعبندی
برای بررسی وضعیت کانتینرها در LXC از دو دستور مهم lxc list و lxc info استفاده میشود. دستور lxc list یک نمای کلی از تمامی کانتینرها و وضعیت آنها ارائه میدهد، در حالی که دستور lxc info اطلاعات دقیقتری در مورد منابع، وضعیت شبکه و دیگر ویژگیهای یک کانتینر خاص به نمایش میگذارد. این دستورات ابزارهای قدرتمندی برای مدیریت و نظارت بر کانتینرهای LXC هستند.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 3. اتصال و تعامل با کانتینرها”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”ورود به محیط شل کانتینر با lxc exec — bash” subtitle=”توضیحات کامل”]یکی از قابلیتهای مهم در مدیریت کانتینرهای LXC، توانایی دسترسی به محیط شل کانتینر است. با استفاده از دستور lxc exec میتوان وارد محیط شل یک کانتینر شده و دستورات مختلف را در داخل آن اجرا کرد. این کار به شما این امکان را میدهد که مانند یک کاربر در داخل سیستم فایل کانتینر به فعالیت پرداخته و تنظیمات یا تغییرات مورد نیاز را اعمال کنید.
1. دستور lxc exec
دستور lxc exec به شما این امکان را میدهد که بهطور مستقیم وارد محیط شل یک کانتینر شوید. برای انجام این کار، باید نام کانتینری که میخواهید وارد آن شوید را مشخص کنید و سپس شل مورد نظر (مثلاً bash) را برای ورود به محیط کانتینر انتخاب نمایید.
دستور:
lxc exec <container-name> -- bash
در این دستور:
<container-name>نام کانتینری است که میخواهید وارد آن شوید.bashشل مورد نظر است که برای دسترسی به محیط کانتینر از آن استفاده میشود. شما میتوانید از شلهای دیگری نیز مانندshاستفاده کنید.
2. مثال عملی
فرض کنید کانتینری به نام mycontainer دارید و میخواهید وارد محیط شل آن شوید. دستور به شکل زیر خواهد بود:
lxc exec mycontainer -- bash
پس از اجرای این دستور، به محیط شل کانتینر mycontainer وارد خواهید شد. شما میتوانید دستورات مختلف لینوکسی را داخل کانتینر اجرا کنید، فایلها را بررسی و ویرایش کنید، و تغییرات مورد نظر را اعمال نمایید.
خروجی نمونه:
root@mycontainer:~#
در اینجا شما بهطور مستقیم در محیط شل کانتینر قرار گرفتهاید و میتوانید با آن تعامل کنید.
جمعبندی
دستور lxc exec یک ابزار مفید برای ورود به محیط شل کانتینرهای LXC است. با استفاده از این دستور میتوانید بهراحتی وارد کانتینر شده و دستورات مختلف را برای مدیریت سیستمعامل داخل آن اجرا کنید. این روش برای اعمال تنظیمات، بررسی فایلها، یا اجرای دستورات مدیریتی در داخل کانتینر بهطور مستقیم بسیار کارآمد است.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”اجرای دستورات بدون ورود به کانتینر (lxc exec با دستورات کوتاه)” subtitle=”توضیحات کامل”]برای اجرای دستورات داخل کانتینر بدون نیاز به ورود مستقیم به محیط شل آن، میتوان از دستور lxc exec استفاده کرد. این دستور به شما این امکان را میدهد که دستورات مختلف را در داخل کانتینر اجرا کنید بدون اینکه به طور کامل وارد محیط شل کانتینر شوید.
کاربرد lxc exec
دستور lxc exec برای اجرای دستوراتی از قبیل نصب بستهها، پیکربندی شبکه، یا انجام وظایف مدیریتی دیگر داخل کانتینر به کار میرود. این دستور میتواند به صورت مستقیم دستورات را بدون نیاز به ورود به محیط شل کانتینر اجرا کند.
نحو دستور lxc exec
فرمت کلی دستور به صورت زیر است:
lxc exec <container-name> -- <command>
که در آن:
<container-name>: نام کانتینری است که میخواهید دستور را در آن اجرا کنید.<command>: دستوری است که میخواهید در داخل کانتینر اجرا شود.
مثالهای عملی
- چک کردن وضعیت شبکه داخل کانتینر: برای اجرای دستور
ifconfigداخل کانتینر و چک کردن وضعیت شبکه میتوانید از دستور زیر استفاده کنید:lxc exec my-container -- ifconfigدر این مثال، وضعیت شبکه کانتینر
my-containerنمایش داده میشود. - نصب بستهای داخل کانتینر: برای نصب یک بسته مثل
curlدر کانتینر با سیستم عامل Ubuntu میتوانید از دستور زیر استفاده کنید:lxc exec my-container -- apt-get update && apt-get install -y curlاین دستور ابتدا بستههای موجود را بهروز میکند و سپس بسته
curlرا در کانتینر نصب میکند. - اجرا کردن دستور در پسزمینه: اگر بخواهید دستوری را در پسزمینه اجرا کنید، میتوانید از
&برای اجرای آن دستور به صورت غیرمستقیم استفاده کنید. مثلاً:lxc exec my-container -- bash -c "nohup long-running-command &"این دستور
long-running-commandرا در پسزمینه داخل کانتینر اجرا میکند.
نکات
- این دستور برای مدیریت کانتینرها به صورت سریع و بدون نیاز به ورود مستقیم به محیط شل بسیار مفید است.
lxc execهمچنین میتواند برای اجرای دستورات ساده مانند چک کردن وضعیت سیستم، نصب بستهها، یا تنظیمات شبکه در کانتینر به کار رود.- در صورتی که بخواهید دستوری را در چند کانتینر همزمان اجرا کنید، میتوانید با استفاده از اسکریپتها این کار را انجام دهید.
جمعبندی
دستور lxc exec یک ابزار قدرتمند است که به شما اجازه میدهد تا دستورات مختلف را به صورت مستقیم در کانتینرها اجرا کنید. این روش ساده و سریع است و به شما کمک میکند تا بدون نیاز به ورود به شل کانتینر، کارهای مدیریتی و تنظیمات مختلف را انجام دهید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”استفاده از lxc shell (در نسخههای جدید LXD)” subtitle=”توضیحات کامل”]در نسخههای جدید LXD، به جای استفاده از دستور lxc exec برای دسترسی به محیط شل کانتینر، میتوان از دستور lxc shell استفاده کرد. این دستور به طور خاص برای ورود به محیط شل کانتینر طراحی شده است و به شما اجازه میدهد تا به راحتی به شل کانتینر متصل شوید و دستورات را به صورت تعاملی اجرا کنید.
کاربرد lxc shell
دستور lxc shell برای ورود به محیط شل کانتینر به صورت تعاملی و کارآمد طراحی شده است. این دستور به شما امکان میدهد که به راحتی دستورات را در داخل کانتینر وارد کرده و با آن کار کنید.
نحو دستور lxc shell
فرمت کلی دستور به صورت زیر است:
lxc shell <container-name>
که در آن:
<container-name>: نام کانتینری است که میخواهید وارد آن شوید.
مثالهای عملی
- ورود به شل کانتینر: برای ورود به محیط شل کانتینر
my-container، میتوانید از دستور زیر استفاده کنید:lxc shell my-containerپس از اجرای این دستور، به طور خودکار وارد شل کانتینر
my-containerخواهید شد و میتوانید دستورات مختلف را به صورت تعاملی در آن اجرا کنید. - اجرای دستورات در محیط شل کانتینر: پس از ورود به محیط شل کانتینر، میتوانید هر دستوری را که نیاز دارید، اجرا کنید. به عنوان مثال، برای بررسی وضعیت سیستم یا نصب بستهها، میتوانید دستورات زیر را وارد کنید:
# برای بررسی وضعیت سیستم hostname # برای نصب یک بسته در داخل کانتینر apt-get install -y curl - خروج از محیط شل کانتینر: برای خروج از محیط شل کانتینر، کافی است دستور
exitرا وارد کنید:exit
مزایای استفاده از lxc shell
- دسترسی ساده و تعاملی:
lxc shellبه شما این امکان را میدهد که به راحتی وارد محیط شل کانتینر شوید و دستورات را به صورت تعاملی اجرا کنید. این روش به مراتب سادهتر از استفاده ازlxc execاست. - پشتیبانی از تمامی قابلیتهای شل: زمانی که از
lxc shellاستفاده میکنید، به طور کامل به شل سیستم دسترسی دارید و میتوانید از تمام امکانات شل استفاده کنید، از جمله تاریخچه دستورات و محیط تعاملی. - ابزارهای توسعهدهنده: برای توسعهدهندگان و مدیران سیستم، این روش بسیار مفید است چرا که میتوانند دستورات را سریعاً اجرا کرده و به راحتی با کانتینر تعامل داشته باشند.
جمعبندی
دستور lxc shell در نسخههای جدید LXD یک روش ساده و سریع برای ورود به محیط شل کانتینر است. این دستور به شما این امکان را میدهد که به طور تعاملی به کانتینر وارد شوید و دستورات را اجرا کنید. این روش میتواند برای مدیران سیستم و توسعهدهندگان بسیار مفید باشد، زیرا دسترسی کامل به محیط شل کانتینر فراهم میکند و عملیات مدیریتی را تسهیل میکند.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 4. مدیریت فایلها در کانتینر”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”کپی فایل بین میزبان و کانتینر با lxc file push و lxc file pull” subtitle=”توضیحات کامل”]یکی از قابلیتهای مهم LXD، امکان انتقال فایلها بین میزبان (host) و کانتینرها است. این عملیات میتواند با استفاده از دستورات lxc file push و lxc file pull انجام شود. این دو دستور به شما اجازه میدهند که به راحتی فایلها یا دایرکتوریها را به کانتینرها منتقل کنید یا از آنها استخراج کنید.
دستور lxc file push
دستور lxc file push برای کپی کردن فایلها یا دایرکتوریها از میزبان به کانتینر استفاده میشود. این دستور میتواند فایلهای محلی را به داخل کانتینر منتقل کند.
نحو دستور lxc file push
lxc file push <local-file> <container-name>/<container-path>
که در آن:
<local-file>: مسیر فایل یا دایرکتوری محلی است که میخواهید به کانتینر منتقل کنید.<container-name>: نام کانتینری است که میخواهید فایلها را به آن منتقل کنید.<container-path>: مسیری است که فایل یا دایرکتوری در کانتینر ذخیره خواهد شد.
مثالهای عملی از lxc file push
- کپی یک فایل از میزبان به کانتینر: فرض کنید شما یک فایل به نام
example.txtدارید که میخواهید آن را به مسیر/home/user/در کانتینرmy-containerکپی کنید. دستور زیر را وارد کنید:lxc file push example.txt my-container/home/user/این دستور فایل
example.txtرا از میزبان به مسیر/home/user/در کانتینرmy-containerمنتقل میکند. - کپی یک دایرکتوری از میزبان به کانتینر: برای کپی یک دایرکتوری کامل (به عنوان مثال دایرکتوری
files/) به داخل کانتینر، دستور زیر را وارد کنید:lxc file push -r files/ my-container/home/user/با استفاده از گزینه
-r، دایرکتوری و تمام محتوای آن به کانتینر منتقل میشود.
دستور lxc file pull
دستور lxc file pull برای کپی کردن فایلها یا دایرکتوریها از کانتینر به میزبان استفاده میشود. این دستور به شما این امکان را میدهد که فایلهای موجود در کانتینر را به سیستم میزبان منتقل کنید.
نحو دستور lxc file pull
lxc file pull <container-name>/<container-path> <local-path>
که در آن:
<container-name>: نام کانتینری است که میخواهید فایلها را از آن استخراج کنید.<container-path>: مسیری است که فایل یا دایرکتوری در کانتینر قرار دارد.<local-path>: مسیر محلی است که میخواهید فایلها را در آن ذخیره کنید.
مثالهای عملی از lxc file pull
- کپی یک فایل از کانتینر به میزبان: فرض کنید فایل
example.txtدر مسیر/home/user/در کانتینرmy-containerقرار دارد و شما میخواهید آن را به مسیر/home/host/در میزبان منتقل کنید. دستور زیر را وارد کنید:lxc file pull my-container/home/user/example.txt /home/host/این دستور فایل
example.txtرا از کانتینر به مسیر/home/host/در میزبان منتقل میکند. - کپی یک دایرکتوری از کانتینر به میزبان: برای کپی یک دایرکتوری کامل (به عنوان مثال دایرکتوری
files/) از کانتینر به میزبان، دستور زیر را وارد کنید:lxc file pull my-container/home/user/files/ /home/host/این دستور دایرکتوری
files/را از کانتینر به مسیر/home/host/در میزبان منتقل میکند.
جمعبندی
دستورات lxc file push و lxc file pull ابزارهای مفیدی برای کپی فایلها و دایرکتوریها بین میزبان و کانتینرها هستند. با استفاده از این دستورات، شما میتوانید به راحتی فایلها را به داخل کانتینرها منتقل کنید یا از آنها استخراج کنید. این دستورات امکان انتقال سریع و آسان دادهها بین میزبان و کانتینرها را فراهم میکنند و در بسیاری از سناریوهای مدیریت کانتینر بسیار مفید هستند.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”بررسی و ویرایش فایلهای داخل کانتینر از طریق CLI” subtitle=”توضیحات کامل”]برای مدیریت و ویرایش فایلهای داخل کانتینر، از طریق ابزارهای مختلفی در CLI (خط فرمان) میتوان استفاده کرد. این ابزارها به شما این امکان را میدهند که فایلها را مشاهده، ویرایش و حتی تغییرات لازم را در کانتینرها اعمال کنید، بدون اینکه نیاز به دسترسی مستقیم به سیستم میزبان داشته باشید.
در این بخش، روشهای مختلفی برای بررسی و ویرایش فایلها داخل کانتینرها از طریق CLI ارائه میشود.
۱. اتصال به شل کانتینر با استفاده از دستور lxc exec
برای بررسی و ویرایش فایلهای داخل کانتینر، ابتدا باید به شل کانتینر متصل شوید. یکی از روشهای ساده برای انجام این کار، استفاده از دستور lxc exec است.
دستور اتصال به شل کانتینر
lxc exec <container-name> -- /bin/bash
در این دستور:
<container-name>: نام کانتینری است که میخواهید به آن متصل شوید.
مثال عملی از اتصال به کانتینر
برای اتصال به کانتینر با نام my-container، از دستور زیر استفاده میکنیم:
lxc exec my-container -- /bin/bash
پس از اجرای این دستور، شما وارد محیط شل کانتینر خواهید شد و میتوانید فایلها را مشاهده و ویرایش کنید.
۲. استفاده از ویرایشگرهای متنی برای ویرایش فایلها
در محیط شل کانتینر، از ویرایشگرهای متنی مانند nano، vi یا vim برای ویرایش فایلها استفاده میشود. این ویرایشگرها به شما این امکان را میدهند که فایلها را بهصورت مستقیم در کانتینر ویرایش کنید.
استفاده از nano
اگر ویرایشگر nano در کانتینر نصب باشد، میتوانید به راحتی از آن برای ویرایش فایلها استفاده کنید:
nano /path/to/file
استفاده از vim یا vi
اگر ویرایشگر vim یا vi نصب باشد، میتوانید از این ویرایشگرها نیز برای ویرایش فایلها استفاده کنید:
vi /path/to/file
یا:
vim /path/to/file
در این دستورات:
/path/to/fileمسیر فایل موردنظر در کانتینر است که میخواهید آن را ویرایش کنید.
۳. مشاهده فایلها از طریق lxc file pull
برای مشاهده محتوای یک فایل در کانتینر، میتوانید از دستور lxc file pull برای انتقال فایل به میزبان استفاده کنید و سپس آن را با استفاده از ویرایشگرهای موجود در میزبان مشاهده کنید.
دستور کپی فایل از کانتینر به میزبان
lxc file pull <container-name>/<container-path> <local-path>
در این دستور:
<container-name>: نام کانتینر.<container-path>: مسیر فایل در کانتینر.<local-path>: مسیر مقصد در میزبان که فایل در آن ذخیره خواهد شد.
مثال عملی
اگر میخواهید فایل example.txt را از کانتینر my-container به مسیر /home/user/ در میزبان منتقل کنید، دستور زیر را وارد کنید:
lxc file pull my-container/home/user/example.txt /home/user/
پس از کپی شدن فایل، میتوانید آن را با ویرایشگرهای موجود در میزبان مانند nano یا vim بررسی و ویرایش کنید.
۴. استفاده از دستور lxc file push برای ارسال فایلهای ویرایش شده به کانتینر
پس از ویرایش فایلها در میزبان، اگر بخواهید تغییرات را به کانتینر منتقل کنید، از دستور lxc file push استفاده میکنید.
دستور کپی فایل از میزبان به کانتینر
lxc file push <local-file> <container-name>/<container-path>
در این دستور:
<local-file>: مسیر فایل ویرایش شده در میزبان.<container-name>: نام کانتینر.<container-path>: مسیر مقصد در کانتینر.
مثال عملی
اگر فایل ویرایش شده example.txt را در مسیر /home/user/ در میزبان داشته باشید و بخواهید آن را به مسیر /home/user/ در کانتینر my-container ارسال کنید، دستور زیر را وارد کنید:
lxc file push /home/user/example.txt my-container/home/user/
جمعبندی
برای بررسی و ویرایش فایلهای داخل کانتینر از طریق CLI، میتوان از دستور lxc exec برای اتصال به شل کانتینر و استفاده از ویرایشگرهای متنی مانند nano یا vim بهره برد. همچنین، از دستورات lxc file pull و lxc file push میتوان برای انتقال فایلها بین میزبان و کانتینر استفاده کرد. این روشها به شما این امکان را میدهند که به راحتی فایلها را در کانتینر مشاهده و ویرایش کنید، و همچنین تغییرات را بین سیستم میزبان و کانتینر همگامسازی کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تنظیمات دسترسی و مجوز فایلها هنگام کپی” subtitle=”توضیحات کامل”]هنگامی که فایلها را بین میزبان و کانتینر کپی میکنید، دسترسیها و مجوزهای فایلها اهمیت زیادی دارند. این مجوزها تعیین میکنند که چه کسی و چه عملیاتی میتواند بر روی فایل انجام دهد. در LXC و LXD، میتوانید تنظیمات مربوط به دسترسی و مجوزهای فایلها را هنگام کپی یا انتقال فایلها اعمال کنید.
در این بخش، به بررسی نحوه تنظیم مجوزهای دسترسی فایلها هنگام کپی بین میزبان و کانتینر خواهیم پرداخت.
۱. مجوزهای فایل در لینوکس
قبل از بررسی نحوه انتقال فایلها، ضروری است که با مجوزهای فایل در سیستمهای مبتنی بر لینوکس آشنا شوید. مجوزهای فایل شامل سه سطح دسترسی میباشند:
- خواندن (r): دسترسی برای خواندن محتویات فایل.
- نوشتن (w): دسترسی برای ویرایش یا تغییر محتویات فایل.
- اجرا (x): دسترسی برای اجرای فایل (در صورتی که فایل اجرایی باشد).
این مجوزها بهصورت ترکیبی برای کاربر (u)، گروه (g) و دیگران (o) تنظیم میشوند.
بهطور مثال:
rwxr-xr--: این مجوز به این معنی است که صاحب فایل تمام دسترسیها را دارد، گروه فقط میتواند فایل را بخواند و دیگران تنها میتوانند فایل را بخوانند.
۲. تنظیم مجوزهای فایل هنگام انتقال با lxc file push و lxc file pull
هنگام کپی فایلها بین میزبان و کانتینر با دستورات lxc file push و lxc file pull، مجوزها بهطور خودکار از فایل اصلی حفظ میشوند. اما شما میتوانید مجوزهای فایل را بهطور دستی تنظیم کنید تا در هنگام انتقال تغییراتی در دسترسیها اعمال شود.
الف) کپی فایل از میزبان به کانتینر با lxc file push
هنگام انتقال فایل از میزبان به کانتینر با دستور lxc file push، فایل در کانتینر با همان مجوزهای میزبان کپی میشود. اگر بخواهید مجوزهای جدیدی برای فایل تنظیم کنید، باید ابتدا مجوزها را در میزبان تغییر دهید یا از دستور chmod برای تنظیم مجوزها استفاده کنید.
مثال:
برای تغییر مجوزهای فایل در میزبان قبل از انتقال، دستور زیر را میتوانید استفاده کنید:
chmod 644 /path/to/local/file
سپس فایل را به کانتینر منتقل کنید:
lxc file push /path/to/local/file <container-name>/path/to/destination/
در اینجا، فایل با مجوز 644 (خواندن و نوشتن برای صاحب، خواندن برای دیگران) به کانتینر کپی میشود.
ب) کپی فایل از کانتینر به میزبان با lxc file pull
برای انتقال فایل از کانتینر به میزبان با دستور lxc file pull، به همین صورت مجوزها از کانتینر به میزبان منتقل میشود. شما میتوانید بعد از انتقال، مجوزهای فایل را در میزبان تغییر دهید.
مثال:
برای تغییر مجوزهای فایل در کانتینر، ابتدا وارد کانتینر شوید و سپس دستور chmod را برای تغییر مجوزها اجرا کنید:
lxc exec <container-name> -- chmod 755 /path/to/container/file
پس از این، فایل را به میزبان انتقال دهید:
lxc file pull <container-name>/path/to/container/file /path/to/host/destination/
در این حالت، فایل با مجوز 755 (خواندن، نوشتن و اجرا برای صاحب، خواندن و اجرا برای دیگران) به میزبان منتقل میشود.
۳. استفاده از umask برای تعیین مجوزهای پیشفرض
هنگامی که فایلها را در سیستمهای لینوکسی ایجاد میکنید، ممکن است بخواهید مجوزهای پیشفرض فایلها را کنترل کنید. این کار از طریق تنظیم مقدار umask قابل انجام است. مقدار umask تعیین میکند که کدام مجوزها از فایلهای جدید حذف شوند.
مثال:
اگر بخواهید هنگام ایجاد فایلها با دستورات کپی، مجوزهای خاصی بهصورت پیشفرض تنظیم شوند، میتوانید مقدار umask را تغییر دهید.
برای تغییر umask برای یک جلسه شل، دستور زیر را اجرا کنید:
umask 022
در این صورت، تمامی فایلهای جدید که ایجاد میشوند، مجوز 755 (rwxr-xr-x) خواهند داشت.
۴. تنظیم مجوزها پس از انتقال فایلها
در صورتی که پس از کپی فایلها به کانتینر یا میزبان، نیاز به تغییر مجوزهای فایل داشته باشید، میتوانید از دستور chmod برای تنظیم مجوزها استفاده کنید.
دستور chmod برای تنظیم مجوزهای فایل
chmod <permissions> <file-path>
در این دستور:
<permissions>: مجوزهایی که میخواهید به فایل اختصاص دهید (برای مثال755).<file-path>: مسیر فایل مورد نظر در کانتینر یا میزبان.
مثال:
برای تنظیم مجوزهای خواندن، نوشتن و اجرا برای صاحب فایل و فقط خواندن برای دیگران، دستور زیر را اجرا کنید:
chmod 644 /path/to/file
جمعبندی
هنگام کپی فایلها بین میزبان و کانتینر با استفاده از دستورات lxc file push و lxc file pull، مجوزهای فایلها بهطور پیشفرض حفظ میشوند. اگر بخواهید مجوزهای خاصی برای فایلها تعیین کنید، میتوانید از دستور chmod در میزبان یا کانتینر برای تغییر مجوزها استفاده کنید. علاوه بر این، تنظیم مقدار umask به شما این امکان را میدهد که مجوزهای پیشفرض فایلهای جدید را کنترل کنید. بهطور کلی، مدیریت دقیق دسترسی و مجوزهای فایلها در کانتینرها، از اهمیت بالایی برخوردار است و باید با دقت انجام شود تا از مشکلات امنیتی جلوگیری شود.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 5. مدیریت Snapshotها و نسخهپشتیبان”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”ایجاد Snapshot با lxc snapshot” subtitle=”توضیحات کامل”]یکی از ویژگیهای مفید در مدیریت کانتینرها، ایجاد Snapshot است. Snapshot به شما این امکان را میدهد تا از وضعیت فعلی کانتینر یک نسخه پشتیبان (backup) تهیه کنید. این نسخه پشتیبان شامل تمامی تنظیمات، فایلها و وضعیت سیستم کانتینر است و میتواند برای بازیابی یا بازگشت به وضعیت قبلی در آینده استفاده شود.
در LXC و LXD، میتوانید از دستور lxc snapshot برای ایجاد Snapshot از کانتینرها استفاده کنید. این قابلیت مشابه با ایجاد نقطه بازگشت (restore point) برای سیستمهای عامل است.
نحوه ایجاد Snapshot از یک کانتینر
برای ایجاد Snapshot از یک کانتینر، دستور lxc snapshot بهصورت زیر استفاده میشود:
lxc snapshot <container-name> <snapshot-name>
در این دستور:
<container-name>: نام کانتینری است که میخواهید از آن Snapshot تهیه کنید.<snapshot-name>: نامی است که برای Snapshot جدید خود انتخاب میکنید. این نام باید یکتا باشد و برای شناسایی Snapshot از آن استفاده خواهید کرد.
مثال:
برای ایجاد یک Snapshot به نام my_snapshot از کانتینری به نام my_container، دستور زیر را اجرا کنید:
lxc snapshot my_container my_snapshot
این دستور یک Snapshot از وضعیت کنونی کانتینر my_container به نام my_snapshot ایجاد میکند.
مشاهده Snapshotهای موجود
پس از ایجاد Snapshot، میتوانید لیست Snapshotهای موجود را با استفاده از دستور lxc info مشاهده کنید. برای این کار، دستور زیر را اجرا کنید:
lxc info <container-name>
این دستور اطلاعات کاملی از کانتینر به همراه لیست Snapshotهای مربوطه را نمایش میدهد.
مثال:
برای مشاهده Snapshotهای کانتینر my_container، دستور زیر را اجرا کنید:
lxc info my_container
در خروجی این دستور، شما میتوانید بخش مربوط به snapshots را مشاهده کنید که شامل تمامی Snapshotهای موجود برای کانتینر است.
بازیابی از Snapshot
اگر بخواهید از Snapshot ایجاد شده برای بازگشت به وضعیت قبلی کانتینر استفاده کنید، میتوانید از دستور lxc restore استفاده کنید. این دستور کانتینر را به وضعیت Snapshot مورد نظر باز میگرداند.
lxc restore <container-name> <snapshot-name>
مثال:
برای بازگرداندن کانتینر my_container به وضعیت my_snapshot، دستور زیر را اجرا کنید:
lxc restore my_container my_snapshot
حذف Snapshot
اگر دیگر به Snapshot خاصی نیاز ندارید، میتوانید آن را با دستور lxc delete حذف کنید. این دستور Snapshot را از سیستم حذف میکند، اما تأثیری بر روی کانتینر اصلی ندارد.
lxc delete <container-name>/<snapshot-name>
مثال:
برای حذف Snapshot به نام my_snapshot از کانتینر my_container، دستور زیر را اجرا کنید:
lxc delete my_container/my_snapshot
جمعبندی
ایجاد Snapshot در LXC و LXD امکان تهیه نسخه پشتیبان از وضعیت فعلی کانتینر را فراهم میآورد و میتواند در مواقع ضروری برای بازیابی یا بازگشت به حالت قبلی مفید باشد. برای ایجاد Snapshot از دستور lxc snapshot استفاده میکنید و میتوانید بهراحتی آن را مشاهده، بازیابی یا حذف کنید. این ابزار یکی از امکانات مهم برای مدیریت کانتینرها و افزایش امنیت دادهها و تنظیمات آنها است.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”لیست Snapshotها با lxc info” subtitle=”توضیحات کامل”]برای مشاهده Snapshotهای موجود از یک کانتینر خاص در LXC یا LXD، میتوانید از دستور lxc info استفاده کنید. این دستور اطلاعات مفصلی درباره وضعیت کنونی کانتینر، شامل لیست Snapshotها، وضعیت شبکه، منابع سیستم و سایر تنظیمات مرتبط با کانتینر را نمایش میدهد.
نحوه مشاهده Snapshotهای کانتینر
برای مشاهده Snapshotهای موجود از یک کانتینر، از دستور lxc info بهصورت زیر استفاده میشود:
lxc info <container-name>
در این دستور:
<container-name>: نام کانتینر مورد نظر شما است.
این دستور، اطلاعات دقیقی از وضعیت کانتینر و تمامی Snapshotهای موجود آن را نمایش میدهد.
مثال:
برای مشاهده Snapshotهای کانتینر به نام my_container، دستور زیر را اجرا کنید:
lxc info my_container
خروجی دستور lxc info
در خروجی این دستور، بخشی تحت عنوان snapshots نمایش داده میشود که لیست تمامی Snapshotهای موجود برای کانتینر شما را شامل میشود. این بخش بهطور معمول بهصورت زیر نشان داده میشود:
Name: my_container
Location: none
Architecture: x86_64
Created: 2025/04/07 12:00 UTC
Status: Running
Snapshots:
- my_snapshot
- another_snapshot
در اینجا، بخش Snapshots شامل نام Snapshotها است که از کانتینر my_container گرفته شده است. در این مثال، دو Snapshot به نامهای my_snapshot و another_snapshot وجود دارند.
جمعبندی
با استفاده از دستور lxc info <container-name>، میتوانید لیست Snapshotهای موجود از یک کانتینر را مشاهده کنید. این قابلیت به شما کمک میکند تا وضعیت کانتینر و Snapshotهای آن را بررسی کرده و از آنها برای بازیابی یا مدیریت پیکربندی استفاده کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”بازگردانی Snapshot با lxc restore” subtitle=”توضیحات کامل”]در صورتی که بخواهید وضعیت یک کانتینر را به یک زمان مشخص برگردانید، میتوانید از Snapshotهایی که قبلاً گرفتهاید استفاده کنید. دستور lxc restore این امکان را میدهد تا کانتینر را به یک Snapshot خاص بازگردانید.
نحوه استفاده از دستور lxc restore
برای بازگردانی یک Snapshot خاص به کانتینر، از دستور lxc restore به شکل زیر استفاده میشود:
lxc restore <container-name> <snapshot-name>
در این دستور:
<container-name>: نام کانتینر مورد نظر که قرار است وضعیت آن بازگردانی شود.<snapshot-name>: نام Snapshot که میخواهید کانتینر به آن بازگردد.
مثال:
برای بازگردانی Snapshot به نام my_snapshot برای کانتینر my_container، دستور زیر را اجرا کنید:
lxc restore my_container my_snapshot
این دستور باعث میشود که کانتینر my_container به وضعیت ثبتشده در Snapshot به نام my_snapshot بازگردد.
نکات مهم:
- پس از استفاده از دستور
lxc restore، کانتینر به حالت متوقفشده میآید. بنابراین برای ادامه فعالیت کانتینر، باید آن را دوباره راهاندازی کنید. - دستور
lxc restoreبر روی تمامی تنظیمات کانتینر از جمله فایلها و پیکربندیها تأثیر میگذارد و آنها را به وضعیت Snapshot بازمیگرداند.
جمعبندی
دستور lxc restore <container-name> <snapshot-name> به شما این امکان را میدهد که وضعیت یک کانتینر را به حالت ذخیرهشده در یک Snapshot خاص بازگردانید. این فرآیند میتواند برای بازیابی اطلاعات یا حل مشکلات بهوجود آمده در کانتینر بسیار مفید باشد.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”حذف Snapshotها با lxc delete ” subtitle=”توضیحات کامل”]پس از آنکه از Snapshotهای مختلف برای ذخیرهسازی وضعیت یک کانتینر استفاده کردید، ممکن است بخواهید برخی از Snapshotها را که دیگر به آنها نیاز ندارید، حذف کنید. دستور lxc delete برای حذف Snapshotها از یک کانتینر استفاده میشود.
نحوه استفاده از دستور lxc delete برای حذف Snapshot
برای حذف یک Snapshot خاص از یک کانتینر، از دستور lxc delete به شکل زیر استفاده میشود:
lxc delete <container-name>/<snapshot-name>
در این دستور:
<container-name>: نام کانتینر مورد نظر که Snapshot آن قرار است حذف شود.<snapshot-name>: نام Snapshot که میخواهید حذف کنید.
مثال:
برای حذف Snapshot به نام my_snapshot از کانتینر my_container، دستور زیر را اجرا کنید:
lxc delete my_container/my_snapshot
با اجرای این دستور، Snapshot با نام my_snapshot از کانتینر my_container حذف خواهد شد.
نکات مهم:
- حذف یک Snapshot به معنای از بین رفتن وضعیت ذخیرهشده در آن است و دیگر قادر نخواهید بود که به آن وضعیت برگردید.
- حذف Snapshot هیچ تاثیری بر روی خود کانتینر ندارد و کانتینر بهطور معمول به کار خود ادامه خواهد داد.
- برای حذف چندین Snapshot، باید این دستور را برای هر کدام از Snapshotها بهطور جداگانه اجرا کنید.
جمعبندی
دستور lxc delete <container-name>/<snapshot-name> برای حذف Snapshotهای غیرضروری یا قدیمی از کانتینر استفاده میشود. این فرآیند به شما کمک میکند تا فضای ذخیرهسازی را مدیریت کرده و تنها Snapshotهای مورد نیاز خود را نگهداری کنید. حذف Snapshot تأثیری بر روی خود کانتینر ندارد و کانتینر بهطور معمول ادامه میدهد.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 6. انتقال و همگامسازی کانتینرها”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”کپی کانتینر از یک سرور LXD به دیگری با lxc copy” subtitle=”توضیحات کامل”]یکی از قابلیتهای کاربردی در LXD، کپی کردن کانتینرها از یک سرور به سرور دیگر است. با استفاده از دستور lxc copy میتوانید کانتینری را از یک سرور LXD به سرور دیگری انتقال دهید، بدون اینکه نیازی به توقف کانتینر یا دستکاری خاصی باشد. این دستور بهویژه زمانی که نیاز دارید کانتینرهای خود را به سرور جدید منتقل کنید یا از یک سرور به سرور دیگر برای ذخیرهسازی یا مدیریت بهتر استفاده کنید، بسیار مفید است.
نحوه استفاده از دستور lxc copy
برای کپی کردن یک کانتینر از یک سرور LXD به سرور دیگر، دستور زیر را به کار میبرید:
lxc copy <container-name> <remote-name>:<container-name>
در این دستور:
<container-name>: نام کانتینری که قصد کپی کردن آن را دارید.<remote-name>: نام سرور مقصد که در آن کانتینر کپی میشود.<container-name>(در مقصد): نام کانتینری که میخواهید در سرور مقصد ذخیره کنید. این میتواند همان نام کانتینر اصلی یا نام جدید باشد.
مثال:
فرض کنید شما میخواهید کانتینر my_container را از سرور source-server به سرور destination-server کپی کنید. ابتدا باید هر دو سرور را به عنوان سرورهای از راه دور (remote) به LXD معرفی کرده باشید.
- برای کپی کانتینر از سرور مبدا به مقصد:
lxc copy my_container destination-server:my_container_copy
در این مثال، کانتینر my_container از سرور source-server به سرور destination-server کپی میشود و در سرور مقصد به نام my_container_copy ذخیره خواهد شد.
نحوه تنظیم remote (در صورت نیاز)
اگر سرور مقصد را به عنوان remote قبلاً تنظیم نکردهاید، ابتدا باید آن را اضافه کنید:
- برای اضافه کردن سرور مقصد به عنوان remote، از دستور زیر استفاده کنید:
lxc remote add destination-server <destination-server-ip>
در اینجا <destination-server-ip> آدرس IP یا DNS سرور مقصد است.
انتقال یا کپی با استفاده از LXD API
اگر بخواهید از API برای کپی کردن کانتینر استفاده کنید، میتوانید از درخواستهای HTTP به API استفاده کنید که این کار نیاز به تنظیمات و اسکریپتهای پیچیدهتر دارد. اما استفاده از دستور lxc copy بسیار سادهتر و راحتتر است.
نکات مهم:
- در صورت استفاده از
lxc copy، تمام تنظیمات، شبکهها، و Snapshotهای کانتینر منتقل میشوند. - کپی کردن کانتینر یک فرآیند زمانبر بسته به اندازه کانتینر و پهنای باند شبکه است.
- اگر کانتینر را با نام جدیدی کپی میکنید، نام جدید بهطور خودکار در سرور مقصد ایجاد میشود.
جمعبندی
دستور lxc copy به شما این امکان را میدهد که کانتینرها را به راحتی بین سرورهای مختلف LXD کپی کنید. این دستور برای انتقال سریع کانتینرها به سرور جدید یا پشتیبانگیری از آنها بسیار مفید است. شما میتوانید با استفاده از این دستور، کانتینرهای موجود را به نامهای جدید یا با همان نام در سرور مقصد ذخیره کنید و فرآیند کپی کردن را بهطور مستقیم انجام دهید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”استفاده از –mode pull یا –mode push برای بهینهسازی انتقال” subtitle=”توضیحات کامل”]در زمان کپی کردن کانتینرها با دستور lxc copy، میتوان از گزینههای --mode pull و --mode push برای بهینهسازی نحوه انتقال دادهها استفاده کرد. این دو حالت به شما این امکان را میدهند که انتقال کانتینر را بر اساس نیازهای خود تنظیم کنید تا از پهنای باند و منابع بهصورت بهینه استفاده کنید.
این گزینهها بهویژه زمانی که حجم دادهها زیاد باشد و یا شبکه با پهنای باند محدود وجود داشته باشد، مفید هستند.
نحوه استفاده از --mode pull و --mode push
در کپی کردن کانتینر با lxc copy، گزینههای --mode pull و --mode push میتوانند بهطور خاصی مدیریت شوند تا فرآیند انتقال سریعتر و بهینهتر انجام شود.
--mode pull
حالت pull به شما این امکان را میدهد که کانتینر را از سرور مقصد به سرور محلی (میزبان اصلی) بکشید (یعنی کانتینر از سرور مقصد به سرور محلی دانلود میشود). در این حالت، تمام دادهها از سرور مقصد به سرور مبدا منتقل میشوند.
فرم دستور:
lxc copy <container-name> <remote-name>:<container-name> --mode pull
مثال:
اگر شما میخواهید کانتینر my_container را از سرور مقصد destination-server به سرور محلی خود (میزبان اصلی) منتقل کنید، دستور بهصورت زیر خواهد بود:
lxc copy my_container destination-server:my_container --mode pull
در این حالت، دادهها از سرور مقصد به سرور محلی کشیده میشوند.
--mode push
حالت push به شما این امکان را میدهد که کانتینر را از سرور محلی (میزبان اصلی) به سرور مقصد منتقل کنید (یعنی کانتینر از سرور محلی به سرور مقصد آپلود میشود). این حالت زمانی مناسب است که میخواهید کانتینر را از سیستم محلی خود به سرور مقصد انتقال دهید.
فرم دستور:
lxc copy <container-name> <remote-name>:<container-name> --mode push
مثال:
اگر شما میخواهید کانتینر my_container را از سرور محلی خود به سرور مقصد destination-server انتقال دهید، دستور بهصورت زیر خواهد بود:
lxc copy my_container destination-server:my_container --mode push
در این حالت، دادهها از سرور محلی به سرور مقصد منتقل میشوند.
نحوه انتخاب --mode pull یا --mode push
انتخاب بین --mode pull و --mode push بستگی به نیاز شما دارد:
- اگر میخواهید دادهها از سرور مقصد (دور) به سرور محلی شما (میزبان) منتقل شوند، از
--mode pullاستفاده کنید. - اگر میخواهید دادهها از سرور محلی شما (میزبان) به سرور مقصد (دور) منتقل شوند، از
--mode pushاستفاده کنید.
این تنظیمات به شما این امکان را میدهند که فرآیند انتقال را بسته به منابع و نیازهای شبکه بهینه کنید.
جمعبندی
استفاده از گزینههای --mode pull و --mode push در دستور lxc copy به شما کمک میکند تا نحوه انتقال کانتینرها بین سرورهای LXD را بهصورت بهینه تنظیم کنید. این دو حالت بسته به اینکه میخواهید دادهها از سرور مقصد به سرور محلی منتقل شوند یا از سرور محلی به سرور مقصد، انتخاب میشوند. انتخاب مناسب این گزینهها میتواند بهطور قابل توجهی سرعت و کارایی انتقال را بهبود بخشد و از پهنای باند بهصورت بهینه استفاده کند.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”انتقال کامل همراه با Snapshotها” subtitle=”توضیحات کامل”]زمانی که میخواهید یک کانتینر را از یک سرور LXD به سرور دیگر منتقل کنید و بههمراه آن تمام Snapshotها و پیکربندیهای آن را انتقال دهید، میتوانید از دستور lxc copy استفاده کنید. در این حالت، از گزینه --storage و --mode میتوان برای بهینهسازی انتقال بهره برد.
انتقال کامل شامل نهتنها خود کانتینر، بلکه Snapshotهای مربوط به آن نیز میشود. این کار برای حفظ نسخههای قبلی کانتینر و مدیریت وضعیتهای مختلف آن، بسیار مفید است.
نحوه انتقال کامل کانتینر همراه با Snapshotها
برای انتقال کامل یک کانتینر به همراه Snapshotها به سرور دیگر، مراحل زیر را دنبال کنید:
1. استفاده از دستور lxc copy همراه با گزینههای --mode و --storage
دستور زیر به شما این امکان را میدهد که کانتینر و تمام Snapshotهای آن را به سرور مقصد منتقل کنید. برای این کار باید از گزینه --mode برای تعیین نحوه انتقال و --storage برای مدیریت سیستم ذخیرهسازی استفاده کنید.
فرم دستور:
lxc copy <container-name> <remote-name>:<container-name> --mode pull --storage <storage-pool>
در این دستور:
<container-name>: نام کانتینر.<remote-name>: نام سرور مقصد.<storage-pool>: استخر ذخیرهسازی که قرار است دادهها در آن ذخیره شوند.--mode pull: به این معنی که دادهها از سرور مقصد به سرور مبدا کشیده میشوند.
مثال:
اگر شما میخواهید کانتینر my_container به همراه تمام Snapshotهای آن از سرور مبدا به سرور مقصد با نام destination-server منتقل کنید، دستور بهصورت زیر خواهد بود:
lxc copy my_container destination-server:my_container --mode pull --storage default
در این مثال، تمام Snapshotها و پیکربندیهای کانتینر my_container از سرور مبدا به سرور مقصد منتقل خواهند شد. گزینه --storage default به این معنی است که دادهها در استخر ذخیرهسازی پیشفرض مقصد ذخیره میشوند.
انتقال به همراه Snapshotها با --mode push
اگر بخواهید که کانتینر را از سرور محلی به سرور مقصد منتقل کنید و در این فرآیند Snapshotهای کانتینر نیز منتقل شوند، از گزینه --mode push استفاده کنید.
فرم دستور:
lxc copy <container-name> <remote-name>:<container-name> --mode push --storage <storage-pool>
مثال:
اگر شما میخواهید کانتینر my_container همراه با Snapshotهای آن از سرور محلی به سرور مقصد destination-server منتقل کنید، دستور بهصورت زیر خواهد بود:
lxc copy my_container destination-server:my_container --mode push --storage default
در این مثال، تمام Snapshotهای کانتینر my_container از سرور محلی به سرور مقصد انتقال خواهند یافت.
بررسی وضعیت و تأیید انتقال
برای بررسی وضعیت کانتینرها و اطمینان از انتقال صحیح Snapshotها، میتوانید از دستور lxc info استفاده کنید:
lxc info <container-name>
این دستور اطلاعات مربوط به کانتینر، از جمله Snapshotهای موجود، وضعیت شبکه و دیگر تنظیمات را نمایش میدهد.
مثال:
lxc info my_container
این دستور اطلاعات دقیقی از کانتینر my_container را در سرور مقصد نمایش خواهد داد.
جمعبندی
انتقال کامل یک کانتینر به همراه تمام Snapshotهای آن از سرور LXD به سرور دیگر، با استفاده از دستور lxc copy و گزینههای --mode pull یا --mode push انجام میشود. این روش به شما این امکان را میدهد که تمام نسخهها و وضعیتهای کانتینر را بهطور کامل به سرور مقصد منتقل کنید. گزینه --storage نیز به شما این امکان را میدهد که سیستم ذخیرهسازی مقصد را انتخاب کنید. با استفاده از این قابلیتها میتوانید مدیریت کانتینرها و Snapshotهای خود را در محیطهای چندسروری بهراحتی انجام دهید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تنظیم اتصال به سرور Remote با lxc remote add” subtitle=”توضیحات کامل”]در مدیریت کانتینرهای LXD، برای مدیریت کانتینرها روی سرورهای مختلف، ابتدا باید سرورهای Remote را به سیستم LXD خود اضافه کنید. دستور lxc remote add برای افزودن یک سرور Remote به سیستم شما استفاده میشود. این امکان را به شما میدهد که از یک رابط واحد به کانتینرها و منابع مختلف موجود روی سرورهای مختلف دسترسی داشته باشید.
در این بخش از آموزش های ارائه شده توسط فرازنتورک، به بررسی نحوه تنظیم اتصال به سرور Remote با استفاده از دستور lxc remote add میپردازیم و نحوه افزودن یک سرور LXD به سیستم خود را توضیح خواهیم داد.
نحوه استفاده از دستور lxc remote add
برای افزودن یک سرور Remote به سیستم LXD، از دستور lxc remote add به همراه پارامترهای مورد نیاز استفاده میکنید. این پارامترها شامل نام سرور، آدرس IP یا DNS سرور و اعتبارنامههای احراز هویت هستند.
فرم دستور بهصورت زیر است:
lxc remote add <remote-name> <remote-address> --accept-certificate
در این دستور:
<remote-name>: نام دلخواه شما برای سرور Remote.<remote-address>: آدرس IP یا نام دامنه سرور Remote که به آن متصل میشوید.--accept-certificate: این گزینه بهطور خودکار گواهی سرور Remote را قبول میکند. اگر سرور شما گواهی خود را تایید نکرده باشد، این گزینه مفید است.
مثال عملی
برای اتصال به یک سرور LXD از راه دور که دارای آدرس IP 192.168.1.100 است، و نام سرور Remote را بهعنوان remote-server تعیین میکنید، دستور زیر را اجرا خواهید کرد:
lxc remote add remote-server 192.168.1.100 --accept-certificate
این دستور سرور LXD جدید را به نام remote-server به لیست سرورهای شما اضافه میکند و به شما اجازه میدهد که به آن سرور دسترسی پیدا کنید. اگر سرور از گواهی SSL استفاده میکند که بهطور خودکار توسط سیستم شما شناسایی نمیشود، گزینه --accept-certificate باعث میشود که گواهی سرور پذیرفته شود.
استفاده از تنظیمات پیشرفته
اگر نیاز به وارد کردن اطلاعات احراز هویت خاصی برای اتصال به سرور Remote دارید (مانند نام کاربری و کلمه عبور)، میتوانید از گزینههای اضافی مانند --password برای تنظیم کلمه عبور استفاده کنید:
lxc remote add <remote-name> <remote-address> --password <your-password> --accept-certificate
در این حالت، شما باید اطلاعات کاربری و رمز عبور خود را بهطور دستی وارد کنید تا از آن برای احراز هویت استفاده شود.
مشاهده سرورهای Remote
پس از افزودن سرور Remote به سیستم LXD، میتوانید لیست سرورهای Remote متصل به سیستم خود را با دستور زیر مشاهده کنید:
lxc remote list
این دستور تمامی سرورهای Remote که به سیستم شما اضافه شدهاند را نمایش میدهد و به شما این امکان را میدهد که از وضعیت هرکدام مطلع شوید.
جمعبندی
دستور lxc remote add به شما این امکان را میدهد که سرورهای LXD Remote را به سیستم خود اضافه کنید و از آنها برای مدیریت کانتینرها و منابع استفاده کنید. این ابزار برای محیطهای چندسروری بسیار مفید است، زیرا به شما امکان میدهد که از یک سیستم مرکزی به مدیریت کانتینرهای مختلف در سرورهای مختلف بپردازید. استفاده از گزینه --accept-certificate برای پذیرش گواهیهای سرور و سایر تنظیمات احراز هویت برای اتصال ایمن و ساده به سرورهای Remote کاربردی است.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 7. تغییر نام، جابهجایی و تنظیم مجدد کانتینر”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تغییر نام کانتینر با lxc move” subtitle=”توضیحات کامل”]دستور lxc move در LXD به شما این امکان را میدهد که نام یک کانتینر را تغییر دهید یا آن را از یک سرور به سرور دیگر منتقل کنید. این دستور برای جابجایی کانتینرها در داخل همان سرور یا بین سرورهای مختلف کاربرد دارد.
در این بخش، نحوه استفاده از دستور lxc move برای تغییر نام کانتینر و انتقال آن به سرورهای دیگر بررسی میشود. این دستور بسیار کاربردی است بهویژه زمانی که شما بهطور موقت نیاز به تغییر نام یک کانتینر یا انتقال آن به یک سرور دیگر دارید.
نحوه استفاده از دستور lxc move
برای تغییر نام یک کانتینر، از دستور lxc move به شکل زیر استفاده میشود:
lxc move <old-name> <new-name>
در این دستور:
<old-name>: نام فعلی کانتینر که میخواهید آن را تغییر دهید.<new-name>: نام جدیدی که میخواهید برای کانتینر تنظیم کنید.
مثال عملی برای تغییر نام کانتینر
فرض کنید که یک کانتینر به نام my-container دارید و میخواهید آن را به نام new-container تغییر دهید. برای این کار از دستور زیر استفاده میکنید:
lxc move my-container new-container
این دستور کانتینر my-container را به کانتینری به نام new-container تغییر نام میدهد.
انتقال کانتینر بین سرورهای مختلف
دستور lxc move به شما این امکان را میدهد که کانتینر را از یک سرور LXD به سرور دیگری منتقل کنید. برای این کار باید ابتدا به سرور مقصد دسترسی داشته باشید و سپس دستور زیر را برای انتقال کانتینر اجرا کنید:
lxc move <container-name> <remote-name>:<new-container-name>
در اینجا:
<container-name>: نام کانتینری که میخواهید منتقل کنید.<remote-name>: نام سرور مقصد که در لیست سرورهای Remote شما قرار دارد.<new-container-name>: نام جدید کانتینر در سرور مقصد.
مثال عملی برای انتقال کانتینر بین سرورها
اگر بخواهید کانتینر my-container را از سرور محلی به یک سرور Remote به نام remote-server منتقل کنید و نام جدید آن در سرور مقصد new-container باشد، دستور زیر را اجرا میکنید:
lxc move my-container remote-server:new-container
این دستور کانتینر my-container را از سرور محلی به سرور remote-server منتقل میکند و آن را با نام جدید new-container در سرور مقصد ذخیره میکند.
جمعبندی
دستور lxc move ابزار قدرتمندی برای تغییر نام کانتینرها یا جابجایی آنها بین سرورهای مختلف است. این دستور بهویژه زمانی که نیاز به جابجایی کانتینرها به سرورهای مختلف دارید یا فقط قصد تغییر نام آنها را دارید، بسیار مفید است. با استفاده از این دستور، میتوانید به راحتی کانتینرهای خود را مدیریت کرده و تغییرات لازم را بهطور موثر و سریع انجام دهید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”انتقال کانتینر بین Storage Poolها” subtitle=”توضیحات کامل”]Storage Poolها مکان هایی هستند که کانتینرها و ماشینهای مجازی در آنجا ذخیره میشوند. هر Storage Pool ممکن است از یک تکنولوژی ذخیرهسازی خاص استفاده کند (مانند ZFS، LVM، یا btrfs). گاهی اوقات نیاز است که یک کانتینر از یک Storage Pool به یک Storage Pool دیگر منتقل شود. این کار میتواند به دلایل مختلفی مانند بهینهسازی فضا، تغییر تکنولوژی ذخیرهسازی یا جابجایی دادهها بین محیطهای مختلف انجام شود.
برای انتقال یک کانتینر از یک Storage Pool به دیگری، دستور lxc move با استفاده از گزینههای اضافی مورد استفاده قرار میگیرد. این دستور، کانتینر را همراه با تمام دادهها و تنظیمات آن به یک Storage Pool جدید منتقل میکند.
نحوه استفاده از دستور lxc move برای انتقال کانتینر بین Storage Poolها
برای انتقال یک کانتینر به Storage Pool دیگر، ابتدا باید یک Storage Pool مقصد تعریف شده باشد. سپس از دستور lxc move به همراه گزینههای لازم استفاده میشود:
lxc move <container-name> --storage <new-storage-pool>
در اینجا:
<container-name>: نام کانتینری که میخواهید منتقل کنید.<new-storage-pool>: نام Storage Pool جدید که کانتینر باید به آن منتقل شود.
مثال عملی برای انتقال کانتینر به Storage Pool جدید
فرض کنید که یک کانتینر به نام my-container دارید و میخواهید آن را از Storage Pool فعلی به یک Storage Pool جدید به نام new-pool منتقل کنید. برای این کار دستور زیر را اجرا میکنید:
lxc move my-container --storage new-pool
این دستور کانتینر my-container را از Storage Pool فعلی به new-pool منتقل میکند.
نکات مهم در انتقال کانتینر بین Storage Poolها
- پشتیبانگیری: قبل از انجام انتقال، بهتر است که از کانتینر خود پشتیبان تهیه کنید. انتقال کانتینر بین Storage Poolها ممکن است در برخی موارد موجب از دست رفتن دادهها شود، بنابراین پشتیبانگیری اهمیت زیادی دارد.
- حجم ذخیرهسازی: قبل از انتقال کانتینر، اطمینان حاصل کنید که فضای کافی در Storage Pool مقصد وجود دارد.
- تغییر تنظیمات: ممکن است پس از انتقال کانتینر به Storage Pool جدید، نیاز به تنظیم مجدد بعضی از گزینهها مانند تنظیمات شبکه یا منابع (CPU، RAM) داشته باشید.
- نظارت بر وضعیت انتقال: انتقال کانتینر ممکن است زمانبر باشد بسته به حجم دادهها و سرعت ذخیرهسازی. برای بررسی وضعیت انتقال، از دستور
lxc listمیتوانید استفاده کنید تا ببینید کانتینر در کدام Storage Pool قرار دارد.
جمعبندی
انتقال کانتینرها بین Storage Poolها در LXD فرآیندی است که به شما این امکان را میدهد که کانتینرها را به راحتی از یک Storage Pool به دیگری منتقل کنید. این قابلیت به شما کمک میکند تا دادهها و منابع خود را بهینهسازی کرده و از تکنولوژیهای ذخیرهسازی مختلف بهره ببرید. برای انتقال موفقیتآمیز کانتینر، باید مطمئن شوید که فضای کافی در Storage Pool مقصد وجود دارد و از دادههای خود پشتیبان تهیه کردهاید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تغییر پروفایل کانتینر فعال یا غیرفعال” subtitle=”توضیحات کامل”]در LXD، پروفایلها مجموعهای از تنظیمات پیشفرض هستند که برای کانتینرها و ماشینهای مجازی اعمال میشوند. این پروفایلها میتوانند شامل تنظیمات شبکه، منابع سیستم (CPU، RAM، دیسک) و ویژگیهای خاصی مانند محدودیتهای I/O و امنیت باشند. تغییر پروفایل کانتینر میتواند به شما این امکان را بدهد که تنظیمات منابع یا دیگر ویژگیها را برای کانتینرهای فعال یا غیرفعال تغییر دهید.
برای تغییر پروفایل یک کانتینر فعال یا غیرفعال در LXD، ابتدا باید مطمئن شوید که کانتینر موجود است و سپس پروفایل مورد نظر را به کانتینر اعمال کنید.
نحوه تغییر پروفایل یک کانتینر فعال یا غیرفعال
برای تغییر پروفایل یک کانتینر، از دستور lxc profile استفاده میشود. با استفاده از این دستور میتوانید پروفایلهای موجود را مشاهده کرده و آنها را به کانتینر اعمال یا حذف کنید.
1. مشاهده پروفایلهای موجود
برای مشاهده پروفایلهای موجود در سیستم، از دستور زیر استفاده میکنید:
lxc profile list
این دستور فهرستی از پروفایلهای موجود را نمایش میدهد.
2. تغییر پروفایل کانتینر
برای تغییر پروفایل یک کانتینر، از دستور lxc profile edit یا lxc profile assign استفاده میشود. این دستورات پروفایل جدید را به کانتینر اعمال میکنند.
برای تغییر پروفایل یک کانتینر فعال، از دستور زیر استفاده کنید:
lxc profile assign <container-name> <new-profile>
در اینجا:
<container-name>: نام کانتینری که میخواهید پروفایل آن را تغییر دهید.<new-profile>: نام پروفایلی که میخواهید به کانتینر اختصاص دهید.
مثال عملی برای تغییر پروفایل کانتینر
فرض کنید کانتینر my-container دارید و میخواهید پروفایل آن را به پروفایل جدید custom-profile تغییر دهید. دستور زیر را اجرا میکنید:
lxc profile assign my-container custom-profile
این دستور پروفایل custom-profile را به کانتینر my-container اختصاص میدهد.
3. تغییر پروفایل یک کانتینر غیرفعال
اگر کانتینر در حال اجرا نیست و میخواهید پروفایل آن را تغییر دهید، کافی است کانتینر را متوقف کرده و سپس پروفایل جدید را به آن اختصاص دهید.
برای متوقف کردن کانتینر از دستور زیر استفاده کنید:
lxc stop <container-name>
سپس پروفایل جدید را به کانتینر اختصاص دهید:
lxc profile assign <container-name> <new-profile>
و در نهایت، کانتینر را دوباره راهاندازی کنید:
lxc start <container-name>
جمعبندی
تغییر پروفایل کانتینر در LXD به شما این امکان را میدهد که تنظیمات کانتینر را بهراحتی به روزرسانی کنید. این کار بهویژه در مواقعی که نیاز به تغییر منابع یا ویژگیهای دیگر کانتینر دارید، بسیار مفید است. با استفاده از دستور lxc profile assign میتوانید پروفایل جدید را به کانتینر اختصاص دهید. توجه داشته باشید که اگر کانتینر در حال اجرا باشد، ممکن است لازم باشد آن را متوقف کرده و سپس پروفایل جدید را اعمال کنید.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 8. مدیریت منابع کانتینر در زمان اجرا”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”تغییر مقدار CPU و RAM با lxc config set” subtitle=”توضیحات کامل”]در LXD، میتوانید منابع سیستمی کانتینرها مانند CPU و RAM را بهراحتی تنظیم کنید. این کار به شما این امکان را میدهد که بر اساس نیازهای خود، منابع را بهطور داینامیک مدیریت و تخصیص دهید. دستور lxc config set به شما کمک میکند تا تنظیمات مختلف کانتینر را بهویژه منابعی مانند CPU و RAM را بهراحتی تغییر دهید.
با استفاده از این دستور، میتوانید میزان مصرف CPU و RAM را محدود کنید و تنظیمات را برای کانتینرها انجام دهید. این تغییرات حتی اگر کانتینر در حال اجرا باشد نیز قابل اعمال است.
نحوه تغییر CPU و RAM کانتینر با lxc config set
1. تغییر مقدار CPU
برای محدود کردن تعداد هستههای CPU که به یک کانتینر اختصاص داده میشود، از گزینه limits.cpu استفاده میکنیم. بهطور پیشفرض، یک کانتینر به تمامی هستههای سیستم میزبان دسترسی دارد. با استفاده از دستور زیر میتوانید تعداد هستههای CPU که به یک کانتینر تخصیص میدهید را محدود کنید.
برای تغییر مقدار CPU یک کانتینر، از دستور زیر استفاده کنید:
lxc config set <container-name> limits.cpu <number-of-cores>
در اینجا:
<container-name>: نام کانتینری که میخواهید تعداد هستههای CPU آن را تغییر دهید.<number-of-cores>: تعداد هستههای CPU که میخواهید به کانتینر اختصاص دهید.
مثال عملی:
فرض کنید کانتینر my-container دارید و میخواهید فقط 2 هسته CPU به آن اختصاص دهید. دستور زیر را اجرا کنید:
lxc config set my-container limits.cpu 2
این دستور تعداد هستههای CPU که به کانتینر my-container اختصاص داده شده را به 2 هسته محدود میکند.
2. تغییر مقدار RAM
برای محدود کردن حافظه RAM که به یک کانتینر اختصاص داده میشود، از گزینه limits.memory استفاده میکنیم. با این دستور میتوانید میزان حافظه مورد استفاده کانتینر را محدود کنید.
برای تغییر مقدار RAM یک کانتینر، از دستور زیر استفاده کنید:
lxc config set <container-name> limits.memory <memory-size>
در اینجا:
<container-name>: نام کانتینری که میخواهید مقدار RAM آن را تغییر دهید.<memory-size>: میزان حافظه RAM که میخواهید به کانتینر اختصاص دهید (مثلاً2GB،1024MBیا512MB).
مثال عملی:
فرض کنید کانتینر my-container دارید و میخواهید مقدار RAM آن را به 2 گیگابایت محدود کنید. دستور زیر را اجرا کنید:
lxc config set my-container limits.memory 2GB
این دستور مقدار حافظه RAM که به کانتینر my-container اختصاص داده شده را به 2 گیگابایت محدود میکند.
تغییر همزمان CPU و RAM
برای تغییر همزمان منابع CPU و RAM یک کانتینر، میتوانید هر دو دستور را به ترتیب زیر اجرا کنید:
lxc config set <container-name> limits.cpu <number-of-cores>
lxc config set <container-name> limits.memory <memory-size>
مثال عملی:
فرض کنید میخواهید به کانتینر my-container 2 هسته CPU و 4 گیگابایت حافظه RAM اختصاص دهید. دستورات زیر را اجرا کنید:
lxc config set my-container limits.cpu 2
lxc config set my-container limits.memory 4GB
این دستورات منابع CPU و RAM کانتینر my-container را بهصورت همزمان به 2 هسته CPU و 4 گیگابایت حافظه محدود میکند.
جمعبندی
دستور lxc config set یک ابزار قدرتمند برای مدیریت منابع کانتینرها در LXD است. با استفاده از این دستور میتوانید محدودیتهای مربوط به CPU و RAM کانتینرها را تغییر دهید و منابع سیستم را بهطور داینامیک مدیریت کنید. این ویژگی به شما این امکان را میدهد که در صورتی که نیاز به تخصیص منابع خاصی به کانتینرها دارید، بهراحتی تنظیمات را تغییر دهید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”بررسی استفاده از منابع با lxc info و lxc top” subtitle=”توضیحات کامل”]در LXD، برای نظارت و بررسی استفاده از منابع سیستم مانند CPU، RAM و I/O، دو دستور اصلی وجود دارد: lxc info و lxc top. این دستورات به شما این امکان را میدهند که وضعیت و منابع استفادهشده توسط کانتینرها را بهطور دقیق مشاهده کنید و به این ترتیب بتوانید مشکلات مربوط به مصرف منابع را شناسایی و مدیریت کنید.
1. استفاده از دستور lxc info
دستور lxc info اطلاعات کلی و دقیق در مورد وضعیت کانتینرها را ارائه میدهد. این دستور به شما امکان میدهد تا وضعیت منابعی که یک کانتینر مصرف کرده، وضعیت شبکه، پروفایلها، زمان راهاندازی و سایر جزئیات مهم را مشاهده کنید.
نحوه استفاده از lxc info:
برای مشاهده اطلاعات دقیق از وضعیت یک کانتینر خاص، دستور زیر را اجرا کنید:
lxc info <container-name>
در اینجا:
<container-name>: نام کانتینری که میخواهید اطلاعات آن را مشاهده کنید.
مثال عملی:
برای مشاهده اطلاعات وضعیت کانتینر به نام my-container، دستور زیر را اجرا کنید:
lxc info my-container
این دستور اطلاعات مربوط به کانتینر my-container را نمایش میدهد که شامل جزئیاتی مانند:
- وضعیت کانتینر (در حال اجرا، متوقف شده)
- منابع مصرفی (CPU، RAM)
- مدتزمان اجرای کانتینر
- IP کانتینر و سایر اطلاعات شبکه
- تعداد پروسههای در حال اجرا
- حجم دیسک استفادهشده و دیگر اطلاعات سیستم
2. استفاده از دستور lxc top
دستور lxc top برای نظارت لحظهای بر مصرف منابع سیستم توسط کانتینرها استفاده میشود. این دستور مشابه با دستور top در لینوکس است که اطلاعات زنده و بهروزی از مصرف منابع را نمایش میدهد. از این دستور برای مشاهده وضعیت منابعی مانند CPU، RAM، و سایر منابع بهطور لحظهای میتوانید استفاده کنید.
نحوه استفاده از lxc top:
برای نمایش وضعیت مصرف منابع کانتینرهای در حال اجرا، دستور زیر را اجرا کنید:
lxc top
این دستور به شما یک لیست از تمامی کانتینرهای در حال اجرا را نشان میدهد که شامل مصرف CPU، RAM و دیگر جزئیات منابع است.
اگر بخواهید وضعیت یک کانتینر خاص را مشاهده کنید، میتوانید نام کانتینر را نیز به دستور اضافه کنید:
lxc top <container-name>
مثال عملی:
برای مشاهده مصرف منابع کانتینر my-container، دستور زیر را اجرا کنید:
lxc top my-container
این دستور اطلاعاتی از قبیل میزان مصرف CPU، استفاده از RAM و سایر منابع را در زمان واقعی برای کانتینر my-container نمایش میدهد.
جمعبندی
دستور lxc info به شما امکان میدهد تا اطلاعات جامعی از وضعیت کانتینرها بهدست آورید و از آن برای بررسی دقیق وضعیت سیستم و منابع استفادهشده بهره ببرید. از سوی دیگر، دستور lxc top برای مشاهده مصرف منابع در زمان واقعی و نظارت بر فعالیتهای کانتینرها در حال اجرا بسیار مفید است. با استفاده از این دستورات، میتوانید بهراحتی وضعیت منابع و فعالیتهای کانتینرها را مدیریت کرده و از مشکلات منابع جلوگیری کنید.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”اعمال محدودیتها بدون نیاز به خاموش کردن کانتینر” subtitle=”توضیحات کامل”]یکی از ویژگیهای برجسته در LXD این است که میتوان محدودیتها و تنظیمات مختلف را برای کانتینرها اعمال کرد بدون اینکه نیاز به خاموش کردن آنها باشد. این قابلیت به مدیران سیستم این امکان را میدهد که کانتینرهای در حال اجرا را بدون هیچگونه وقفهای پیکربندی کنند و محدودیتهای مختلف را بر روی آنها اعمال نمایند.
این امر بهویژه برای تنظیمات منابع مانند حافظه (RAM)، CPU، I/O و شبکه کاربردی است، چرا که میتواند بهطور مستقیم و در حال اجرا تغییر کند و نیاز به راهاندازی مجدد کانتینر نیست.
1. اعمال محدودیتهای منابع (مثل CPU و RAM) بدون خاموش کردن کانتینر
در LXD میتوانید محدودیتهای منابع مانند حافظه و CPU را بهطور مستقیم و بدون نیاز به توقف کانتینر تغییر دهید.
مثال: محدود کردن حافظه RAM
برای محدود کردن حافظه RAM یک کانتینر بدون خاموش کردن آن، از دستور زیر استفاده میکنیم:
lxc config set <container-name> limits.memory <memory-limit>
در اینجا:
<container-name>: نام کانتینری که میخواهید محدودیتها را برای آن اعمال کنید.<memory-limit>: مقدار محدودیت حافظه که میتوانید بهصورت عددی (برای مثال2GB،512MB) وارد کنید.
مثال عملی:
برای محدود کردن حافظه کانتینر به 1 گیگابایت، دستور زیر را اجرا کنید:
lxc config set my-container limits.memory 1GB
این تغییر بلافاصله اعمال میشود و بدون نیاز به خاموش کردن کانتینر انجام میشود.
2. اعمال محدودیتهای CPU بدون خاموش کردن کانتینر
شما همچنین میتوانید محدودیتهایی برای CPU کانتینرهای در حال اجرا اعمال کنید.
مثال: محدود کردن تعداد هستههای CPU
برای محدود کردن تعداد هستههای CPU که کانتینر میتواند از آنها استفاده کند، از دستور زیر استفاده میکنیم:
lxc config set <container-name> limits.cpu <cpu-limit>
در اینجا:
<container-name>: نام کانتینری که میخواهید محدودیتها را برای آن اعمال کنید.<cpu-limit>: تعداد هستههای CPU که کانتینر میتواند از آنها استفاده کند.
مثال عملی:
برای محدود کردن کانتینر my-container به استفاده از 2 هسته CPU، دستور زیر را اجرا کنید:
lxc config set my-container limits.cpu 2
3. اعمال محدودیتهای I/O (ورودی/خروجی) بدون خاموش کردن کانتینر
محدود کردن I/O نیز بدون نیاز به خاموش کردن کانتینر امکانپذیر است. برای محدود کردن میزان I/O، میتوانید از دستور زیر استفاده کنید.
مثال: محدود کردن وزن I/O
برای محدود کردن وزن I/O (که نشاندهنده اهمیت I/O برای کانتینر است)، دستور زیر را اجرا میکنیم:
lxc config set <container-name> limits.blkio.weight <weight-value>
در اینجا:
<container-name>: نام کانتینر<weight-value>: وزن I/O که بهصورت عددی مشخص میشود (مثلاً مقدار عددی از 10 تا 1000)
مثال عملی:
برای محدود کردن وزن I/O کانتینر my-container به مقدار 500، دستور زیر را اجرا کنید:
lxc config set my-container limits.blkio.weight 500
این تغییر بلافاصله اعمال میشود.
4. اعمال محدودیتهای شبکه بدون خاموش کردن کانتینر
شما میتوانید محدودیتهایی مانند پهنای باند شبکه برای کانتینرها را بدون خاموش کردن آنها تنظیم کنید. این تنظیمات میتواند شامل محدودیتهای ورودی و خروجی شبکه باشد.
مثال: محدود کردن پهنای باند شبکه
برای محدود کردن پهنای باند شبکه، از دستور زیر استفاده میکنیم:
lxc config set <container-name> limits.network <limit-value>
در اینجا:
<container-name>: نام کانتینر<limit-value>: مقدار محدودیت پهنای باند شبکه که بهصورت عددی (بر حسب کیلوبیت بر ثانیه یا مگابیت بر ثانیه) مشخص میشود.
مثال عملی:
برای محدود کردن پهنای باند ورودی و خروجی کانتینر به 100 مگابیت بر ثانیه، دستور زیر را اجرا کنید:
lxc config set my-container limits.network 100M
این تغییر بلافاصله اعمال میشود و نیازی به راهاندازی مجدد کانتینر نیست.
جمعبندی
LXD امکان اعمال محدودیتها برای منابع مختلف کانتینرها را بدون نیاز به خاموش کردن آنها فراهم میکند. شما میتوانید بهراحتی محدودیتهایی برای حافظه، CPU، I/O و شبکه تعیین کنید و این تغییرات بلافاصله در سیستم اعمال میشود. این ویژگی برای مدیران سیستم بسیار مفید است چرا که میتوانند منابع را بهطور پویا مدیریت کنند و بدون وقفه در عملیات کانتینر، عملکرد آنها را بهینه کنند.
[/cdb_course_lesson][cdb_course_lesson title=”فصل 9. نظارت و گزارشگیری کانتینرها”][/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”استفاده از lxc monitor برای رویدادهای لحظهای” subtitle=”توضیحات کامل”]در LXD، ابزار lxc monitor به مدیران سیستم این امکان را میدهد تا بهطور زنده و لحظهای رویدادهای مربوط به کانتینرها و منابع سیستم را پیگیری کنند. این ابزار بهویژه برای نظارت بر وضعیت کانتینرها، تشخیص مشکلات و دریافت اطلاعات فوری در خصوص تغییرات یا رویدادهای اتفاق افتاده مفید است.
با استفاده از lxc monitor میتوان بهطور مستقیم از رویدادهایی مانند شروع، توقف، تغییرات پیکربندی و خطاها در کانتینرها اطلاع پیدا کرد. این رویدادها میتوانند به مدیر سیستم کمک کنند تا تصمیمات بهموقعی برای مدیریت منابع بگیرد یا اقدامات اصلاحی انجام دهد.
1. مشاهده رویدادهای لحظهای کانتینرها با lxc monitor
برای شروع نظارت بر رویدادهای لحظهای و دریافت اطلاعات بهروز درباره وضعیت کانتینرها، دستور lxc monitor را اجرا میکنیم.
مثال:
برای مشاهده تمامی رویدادها از تمامی کانتینرها، دستور زیر را اجرا کنید:
lxc monitor
این دستور تمامی رویدادهای مربوط به کانتینرهای در حال اجرا را نمایش میدهد، از جمله مواردی مانند شروع کانتینر، توقف آن، خطاها و تغییرات پیکربندی.
2. مشاهده رویدادهای خاص برای یک کانتینر
اگر فقط میخواهید رویدادهای مربوط به یک کانتینر خاص را مشاهده کنید، میتوانید از گزینه --type بههمراه نام کانتینر استفاده کنید. این کار به شما امکان میدهد تا تنها رویدادهای مربوط به کانتینر خاصی را مشاهده کنید.
مثال:
برای مشاهده رویدادهای لحظهای کانتینر با نام my-container، دستور زیر را اجرا کنید:
lxc monitor --type container my-container
این دستور فقط رویدادهای مرتبط با کانتینر my-container را نشان میدهد.
3. فیلتر کردن رویدادها با استفاده از شرایط خاص
شما میتوانید با استفاده از فیلترهای خاص، رویدادهای دقیقتری را دریافت کنید. بهعنوانمثال، برای مشاهده فقط رویدادهای خطا میتوانید از گزینههای فیلتر استفاده کنید.
مثال: مشاهده فقط رویدادهای خطا
برای مشاهده فقط رویدادهای خطا، دستور زیر را اجرا کنید:
lxc monitor --type event --filter "type=error"
این دستور فقط رویدادهایی را که شامل خطا هستند، نمایش میدهد.
4. مشاهده جزئیات بیشتر در مورد یک رویداد خاص
زمانی که شما از lxc monitor برای نظارت بر رویدادهای کانتینر استفاده میکنید، میتوانید جزئیات بیشتری را از طریق فیلترهای دقیقتر یا استفاده از افزونهها دریافت کنید. این کار میتواند شامل اطلاعات اضافی در مورد وضعیت سیستم یا رفتارهای خاص کانتینرها باشد.
مثال: مشاهده جزئیات اضافی برای شروع و توقف کانتینر
برای مشاهده رویدادهای شروع و توقف کانتینر و دریافت اطلاعات بیشتر، میتوانید از فیلترهای زیر استفاده کنید:
lxc monitor --type event --filter "type=start,stop"
این دستور رویدادهای شروع و توقف تمامی کانتینرها را با جزئیات نمایش میدهد.
5. مشاهده رویدادهای مربوط به پیکربندی
lxc monitor همچنین قادر است رویدادهایی را که به پیکربندی کانتینرها یا منابع وابسته به آنها مرتبط هستند، نمایش دهد. این رویدادها میتوانند شامل تغییرات در پیکربندی کانتینر یا تغییرات در منابع شبکه، حافظه و CPU باشند.
مثال: مشاهده تغییرات پیکربندی کانتینر
برای نظارت بر تغییرات پیکربندی یک کانتینر خاص، میتوانید دستور زیر را اجرا کنید:
lxc monitor --type event --filter "type=config-change"
این دستور فقط رویدادهایی که به تغییرات پیکربندی مرتبط هستند را نمایش میدهد.
جمعبندی
ابزار lxc monitor یک ابزار قدرتمند برای نظارت لحظهای بر رویدادهای مختلف کانتینرها در LXD است. این ابزار به مدیران سیستم این امکان را میدهد که تغییرات، خطاها و وضعیتهای جدید را بهطور زنده پیگیری کنند و در صورت لزوم واکنش نشان دهند. با استفاده از فیلترها و تنظیمات خاص، میتوانید دقیقاً رویدادهای مورد نظر خود را مشاهده کنید و اطلاعات ضروری را در زمان واقعی دریافت نمایید. این قابلیت برای مدیریت کانتینرها و نگهداری سیستم در سطحی کارآمد بسیار مهم است.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”لاگگیری کانتینرها با lxc info –show-log” subtitle=”توضیحات کامل”]در سیستمهای مبتنی بر LXD، داشتن دسترسی به لاگهای کانتینرها یکی از جنبههای مهم برای نظارت و عیبیابی است. ابزار lxc info --show-log به مدیران سیستم این امکان را میدهد که لاگهای مرتبط با فعالیتهای یک کانتینر خاص را مشاهده کنند. این اطلاعات میتواند شامل جزئیات مربوط به شروع و توقف کانتینر، خطاها، یا وضعیتهای غیرمنتظره باشد.
این دستور معمولاً در زمان مواجهه با مشکلاتی مانند کرش کردن کانتینر، مشکلات عملکردی، یا خطاهای پیکربندی مفید است و به مدیر سیستم کمک میکند تا دلیل مشکلات را شناسایی کند.
1. مشاهده لاگهای کانتینر خاص
برای مشاهده لاگهای مربوط به یک کانتینر خاص، از دستور lxc info با گزینه --show-log استفاده میکنیم. این دستور بهطور پیشفرض لاگهای جدیدترین کانتینرهای فعال را نشان میدهد.
مثال:
برای مشاهده لاگهای کانتینر با نام my-container، دستور زیر را اجرا کنید:
lxc info my-container --show-log
این دستور تمامی لاگها، از جمله اطلاعات شروع و توقف کانتینر، خطاها و سایر رویدادهای مهم را نمایش میدهد.
2. مشاهده لاگهای کانتینر در حالت Debug
برای دریافت اطلاعات بیشتر و دقیقتر در مورد فعالیتهای کانتینر، میتوانید لاگها را در حالت debug مشاهده کنید. این حالت شامل جزئیات بیشتری از وضعیتهای داخلی کانتینر و سیستم است که ممکن است برای عیبیابی مفید باشد.
مثال:
برای مشاهده لاگها در حالت debug برای کانتینر my-container، دستور زیر را اجرا کنید:
lxc info my-container --show-log --level=debug
این دستور لاگهای دقیقتری را از کانتینر my-container نمایش میدهد که شامل اطلاعات داخلی بیشتر برای تحلیل مشکلات احتمالی است.
3. مشاهده لاگهای کانتینرهای مختلف
در صورتی که بخواهید لاگهای مربوط به چند کانتینر را همزمان مشاهده کنید، میتوانید برای هر کانتینر بهطور جداگانه دستور lxc info با گزینه --show-log را اجرا کنید.
مثال:
برای مشاهده لاگهای دو کانتینر بهطور جداگانه، دستورهای زیر را اجرا کنید:
lxc info container1 --show-log
lxc info container2 --show-log
این دستورات لاگهای هر کدام از کانتینرها را بهطور جداگانه نمایش میدهند.
4. ذخیره لاگها در فایل
گاهی اوقات نیاز است که لاگهای یک کانتینر برای تحلیلهای بیشتر ذخیره شوند. میتوانید خروجی لاگها را به یک فایل ذخیره کنید تا بعداً آن را بررسی کنید یا با تیمهای دیگر به اشتراک بگذارید.
مثال:
برای ذخیره لاگهای کانتینر my-container در یک فایل متنی، دستور زیر را اجرا کنید:
lxc info my-container --show-log > container_logs.txt
این دستور تمامی لاگهای مربوط به کانتینر my-container را در فایل container_logs.txt ذخیره میکند.
5. محدود کردن تاریخ و زمان برای مشاهده لاگها
در برخی موارد ممکن است بخواهید فقط لاگهای یک بازه زمانی خاص را مشاهده کنید. این قابلیت برای تحلیل دقیقتر رویدادها و پیگیری مشکلات مهم است. البته برای اعمال این فیلتر ممکن است به اسکریپتها و ابزارهای اضافی نیاز باشد، زیرا lxc info --show-log بهطور پیشفرض چنین فیلترهایی را ارائه نمیدهد.
جمعبندی
دستور lxc info --show-log یکی از ابزارهای حیاتی برای نظارت بر فعالیتهای کانتینرها و تجزیه و تحلیل مشکلات است. با استفاده از این دستور، میتوان بهطور دقیق اطلاعات مربوط به شروع، توقف و خطاهای کانتینرها را دریافت کرد. این دستور میتواند به مدیران سیستم کمک کند تا مسائل پیکربندی یا مشکلات عملکردی کانتینرها را شناسایی کنند. همچنین با تنظیمات اضافی، مانند حالت debug یا ذخیره خروجی در فایل، میتوان اطلاعات بهدستآمده را برای استفادههای بعدی ذخیره یا تحلیل کرد.
[/cdb_course_lesson][cdb_course_lesson icon=”fa fa-solid fa-circle-down” badge=”lecture” title=”بررسی رویدادهای مربوط به شبکه و دیسک” subtitle=”توضیحات کامل”]در سیستمهای مبتنی بر LXD و LXC، نظارت و بررسی رویدادهای مربوط به شبکه و دیسک برای تشخیص مشکلات عملکردی و بهینهسازی منابع بسیار اهمیت دارد. مشکلات شبکه و دیسک میتوانند تأثیرات زیادی بر روی عملکرد کانتینرها و سرورهای میزبان بگذارند. برای بررسی این رویدادها، ابزارهای مختلفی وجود دارند که میتوانند به شناسایی مشکلات کمک کنند.
این قسمت به بررسی روشهای بررسی و نظارت بر رویدادهای شبکه و دیسک در کانتینرهای LXD و LXC خواهد پرداخت.
1. بررسی رویدادهای شبکه
شبکه یکی از اجزای اصلی هر سیستم است که مشکلات آن میتواند بهطور مستقیم بر عملکرد کانتینرها تأثیر بگذارد. برای نظارت بر رویدادهای شبکه و بررسی وضعیت اتصالات، چندین ابزار و دستور مختلف وجود دارد.
استفاده از lxc monitor
دستور lxc monitor برای دریافت رویدادهای لحظهای و تغییرات در سیستم مورد استفاده قرار میگیرد. این دستور میتواند برای مشاهده رویدادهای مربوط به شبکه، از جمله اتصالات و قطع شدنهای شبکه در کانتینرها مفید باشد.
مثال:
برای مشاهده رویدادهای شبکه و دیسک در کانتینرها از دستور زیر استفاده کنید:
lxc monitor --type network
این دستور رویدادهای مربوط به تغییرات شبکه، از جمله اتصال و قطع شبکه در کانتینرها را نمایش میدهد.
مشاهده وضعیت شبکه کانتینر
برای مشاهده وضعیت شبکه یک کانتینر خاص و اطلاعات مربوط به پیکربندیهای شبکهای آن، میتوانید از دستور lxc network استفاده کنید.
lxc network show lxcbr0
این دستور اطلاعات مربوط به شبکه پیشفرض (مانند lxcbr0) که به کانتینرها متصل است را نشان میدهد.
2. بررسی رویدادهای دیسک
دیسک یکی دیگر از منابع حیاتی است که مشکلات آن میتواند به مشکلات عملکردی کانتینرها منجر شود. برای نظارت بر وضعیت دیسک، میتوان از ابزارهایی مانند lxc info و lxc monitor استفاده کرد.
استفاده از lxc info
با استفاده از دستور lxc info میتوانید اطلاعات مربوط به فضای دیسک و استفاده از آن توسط کانتینر را مشاهده کنید.
مثال:
برای مشاهده اطلاعات مربوط به دیسک کانتینر my-container، از دستور زیر استفاده کنید:
lxc info my-container
این دستور اطلاعاتی مانند فضای استفادهشده و آزاد دیسک، فضای ذخیرهسازی و سایر جزئیات مرتبط با دیسک را نمایش میدهد.
استفاده از lxc monitor برای رویدادهای دیسک
برای دریافت رویدادهای لحظهای و بررسی تغییرات وضعیت دیسک، میتوانید از دستور lxc monitor استفاده کنید.
مثال:
برای نظارت بر رویدادهای مربوط به دیسک در کانتینرها، از دستور زیر استفاده کنید:
lxc monitor --type disk
این دستور رویدادهایی مانند افزایش یا کاهش استفاده از دیسک را نمایش میدهد و به مدیر سیستم کمک میکند تا تغییرات آنی وضعیت دیسک را مشاهده کند.
3. بررسی استفاده از منابع شبکه و دیسک با lxc top
دستور lxc top میتواند برای نظارت بر مصرف منابع شبکه و دیسک در کانتینرهای مختلف بهطور همزمان استفاده شود. این دستور اطلاعاتی نظیر مصرف CPU، RAM و دیسک را بهصورت لحظهای نمایش میدهد.
مثال:
برای مشاهده وضعیت مصرف منابع شبکه و دیسک در کانتینرهای مختلف، از دستور زیر استفاده کنید:
lxc top
این دستور فهرستی از کانتینرها همراه با مصرف منابع آنها، شامل شبکه و دیسک، نمایش میدهد.
4. بررسی لاگهای سیستم برای مشکلات شبکه و دیسک
در موارد خاص، لاگهای سیستم میتوانند اطلاعات بسیار مفیدی درباره مشکلات شبکه و دیسک ارائه دهند. بهویژه در سیستمهای مبتنی بر LXD و LXC، لاگها ممکن است حاوی اطلاعاتی در مورد مشکلات اتصال شبکه، مشکلات دیسک یا وضعیتهای غیرمنتظره باشند.
برای مشاهده لاگهای مربوط به سیستم، میتوانید از دستور dmesg یا ابزار journalctl استفاده کنید.
استفاده از dmesg
دستور dmesg برای مشاهده لاگهای مربوط به کرنل و سیستم استفاده میشود. این دستور میتواند اطلاعاتی در مورد مشکلات شبکه یا دیسک ارائه دهد.
dmesg | grep -i network
dmesg | grep -i disk
این دستورات فقط لاگهای مربوط به شبکه یا دیسک را فیلتر و نمایش میدهند.
استفاده از journalctl
اگر از systemd برای مدیریت سیستم استفاده میکنید، دستور journalctl میتواند اطلاعات لاگهای دقیقتر را نمایش دهد.
journalctl -u lxd.service | grep -i network
journalctl -u lxd.service | grep -i disk
این دستورات لاگهای مربوط به سرویس LXD را که شامل اطلاعات شبکه و دیسک است، نمایش میدهند.
جمعبندی
بررسی و نظارت بر رویدادهای شبکه و دیسک یکی از بخشهای حیاتی مدیریت کانتینرها است. استفاده از ابزارهایی مانند lxc monitor، lxc info و lxc top میتواند به مدیران سیستم کمک کند تا وضعیت شبکه و دیسک کانتینرها را در زمان واقعی پیگیری کنند. همچنین، ابزارهای لاگگیری مانند dmesg و journalctl میتوانند اطلاعات مفیدی در مورد مشکلات و تغییرات شبکه و دیسک فراهم کنند. نظارت دقیق بر این رویدادها میتواند به شناسایی مشکلات پیش از وقوع و بهبود عملکرد کانتینرها کمک کند.
[/cdb_course_lesson][/cdb_course_lessons]
- پرسشهای شما، بخش مهمی از دوره است:
هر سوال یا مشکلی که مطرح کنید، با دقت بررسی شده و پاسخ کامل و کاربردی برای آن ارائه میشود. علاوه بر این، سوالات و پاسخهای شما به دوره اضافه خواهند شد تا برای سایر کاربران نیز مفید باشد. - پشتیبانی دائمی و در لحظه:
تیم ما همواره آماده پاسخگویی به سوالات شماست. هدف ما این است که شما با خیالی آسوده بتوانید مهارتهای خود را به کار بگیرید و پروژههای واقعی را با اعتماد به نفس کامل انجام دهید. - آپدیت دائمی دوره:
این دوره به طور مداوم بهروزرسانی میشود تا همگام با نیازهای جدید و سوالات کاربران تکمیلتر و بهتر گردد. هر نکته جدید یا مشکل رایج، در نسخههای بعدی دوره قرار خواهد گرفت.
حرف آخر
با ما همراه باشید تا نه تنها به مشکلات شما پاسخ دهیم، بلکه در مسیر یادگیری و پیشرفت حرفهای، شما را پشتیبانی کنیم. هدف ما این است که شما به یک متخصص حرفهای و قابلاعتماد تبدیل شوید و بتوانید با اطمینان پروژههای واقعی را بپذیرید و انجام دهید.
📩 اگر سوالی دارید یا به مشکلی برخوردید، همین حالا مطرح کنید!
ما در کوتاهترین زمان ممکن پاسخ شما را ارائه خواهیم داد. 🙌[/cdb_course_lesson][/cdb_course_lessons]
خدمات شبکه فراز نتورک | پیشرو در ارائه خدمات دیتاسنتری و کلود

نقد و بررسی وجود ندارد.