LXC مخفف Linux Containers می باشد که یک تکنولوژی مجازی ساز در لایه سیستم عامل می باشد.LXC بسیار سبک و سریع می باشد و امکان میزبانی چندین سیستم لینوکسی ایزوله که در واقع به آن کانتینر می گویند (Containers) را درون یک Host فراهم می آورد.
بر خلاف دیگر مجازی سازها مانند VirtualBox, KVM و vmware سیستم مهمان (guest) از همان کرنل میزبان (host) استفاده می کند.در این مطلب روش نصب،پیکربندی و کار با LXC آموزش داده خواهد شد.
نصب بسته ها :
#apt-get update
#apt-get install lxc lxctl lxc-templates
جهت بررسی وضعیت ,این دستور را اجرا کنید:
# lxc-checkconfig
در پایین خروجی دستور گفته شده را مشاهده می کنید :
# lxc-checkconfig
Kernel configuration not found at /proc/config.gz; searching…
Kernel configuration found at /boot/config-3.13.0-29-generic
— Namespaces —
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled
— Control groups —
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled
— Misc —
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled
Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig
ساخت Linux Containers :
تمامی فایل های نمونه کانینر ها در این مسیر قرار دارند :
/usr/share/lxc/templates/
جهت دیدن انها کافیست تا این دستور را اجرا کنید :
#ls /usr/share/lxc/templates/
خروجی دستور بالا را در پایین مشاهده می کنید :
#ls /usr/share/lxc/templates/
lxc-alpine lxc-archlinux lxc-centos lxc-debian lxc-fedora lxc-openmandriva
lxc-oracle lxc-sshd lxc-ubuntu-cloud lxc-altlinux lxc-busybox lxc-cirros lxc-download
lxc-gentoo lxc-opensuse lxc-plamo lxc-ubuntu
دستور کلی برای ساخت کانینر به این صورت می باشد :
#lxc-create -n <container-name> -t <template>
به عنوان نمونه :
#lxc-create -n ubuntu01 -t ubuntu
در دستور بالا کانتینری با نام ubuntu01 ایجاد خواهد شد که در پایین خروجی دستور را مشاهده می کنید :
# lxc-create -n ubuntu01 -t ubuntu
Checking cache download in /var/cache/lxc/trusty/rootfs-amd64 …
Installing packages in template: ssh,vim,language-pack-en
Downloading ubuntu trusty minimal …
I: Retrieving Release
I: Retrieving Release.gpg
I: Checking Release signature
I: Valid Release signature (key id 790BC7277767219C42C86F933B4FE6ACC0B21F32)
I: Retrieving Packages
I: Validating Packages
I: Retrieving Packages
I: Validating Packages
…
.
.
.
Generation complete.Processing triggers for libc-bin (2.19-0ubuntu6.6) …
Processing triggers for initramfs-tools (0.103ubuntu4.2) …
Download complete
Copy /var/cache/lxc/trusty/rootfs-amd64 to /var/lib/lxc/ubuntu01/rootfs …
Copying rootfs to /var/lib/lxc/ubuntu01/rootfs …
Generating locales…
en_US.UTF-8… up-to-date
Generation complete.
Creating SSH2 RSA key; this may take some time …
Creating SSH2 DSA key; this may take some time …
Creating SSH2 ECDSA key; this may take some time …
Creating SSH2 ED25519 key; this may take some time …
update-rc.d: warning: default stop runlevel arguments (0 1 6) do not match ssh Default-Stop values (none)
invoke-rc.d: policy-rc.d denied execution of start.
Current default time zone: ‘Etc/UTC’
Local time is now: Sat Jun 13 14:29:25 UTC 2015.
Universal Time is now: Sat Jun 13 14:29:25 UTC 2015.
##
# The default user is ‘ubuntu‘ with password ‘ubuntu‘!
# Use the ‘sudo’ command to run tasks as root in the container.
##
همانطور که در انتهای خروجی بالا مشاهده می کند نام کاربری و پسورد ورود به کانتینر ساخته شده ubuntu می باشد.
Starting Containers
بعد ساختن کانتینر برای start کردن ان کافیست تا دستور پایین را اجرا کنید :
#lxc-start -n ubuntu01 -d
جهت لاگین کردن به کانتینر از این دستور باید استففاده کرد :
#lxc-console -n ubuntu01
بعد از اجرای دستور بالا نام کاربری و پسورد ورود را درخواست می کند که اگر دقت کرده باشید این مشخصات را در پایان پیغام،هنگام ساختن کانتینر نمایش داده شد.در پایین خروجی دستور بالا مشاهده می کنید :
Ubuntu 14.04.2 LTS ubuntu01 tty1
ubuntu01 login: ubuntu
Password:
Welcome to Ubuntu 14.04.2 LTS (GNU/Linux 3.13.0-29-generic x86_64)
* Documentation: https://help.ubuntu.com/
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
ubuntu@ubuntu01:~$
جهت ساخت کانینر های که بر پایه ی rpm هستند مانند centos ابتدا این دستور را اجرا کنید :
#apt-get install yum
اکنون جهت ساخت یک کانینر centos این دستور را اجرا کنید :
#lxc-create -n centos01 -t centos
بعد از اجرای دستور بالا یکسری بسته نصب خواهد شد و در پایان پیغام ها اینچنین متنی را مشاهده خواهید کرد که در واقع مسیر ذخیره سازی و روش بازیابی پسورد کاربر root مربوط به کانتینر centos را نمایش داده است :
.
.
.
Complete!Fixing rpmdb location …
Download complete.
Copy /var/cache/lxc/centos/x86_64/6/rootfs to /var/lib/lxc/centos01/rootfs …
Copying rootfs to /var/lib/lxc/centos01/rootfs …
sed: can’t read /etc/init/tty.conf: No such file or directory
Storing root password in ‘/var/lib/lxc/centos01/tmp_root_pass’
Expiring password for user root.
passwd: Success
Container rootfs and config have been created.
Edit the config file to check/enable networking setup.
The temporary root password is stored in:
‘/var/lib/lxc/centos01/tmp_root_pass’
The root password is set up as expired and will require it to be changed
at first login, which you should do as soon as possible. If you lose the
root password or wish to change it without starting the container, you
can change it from the host by running the following command (which will
also reset the expired flag):
chroot /var/lib/lxc/centos01/rootfs passwd
پس از ورود به کانتینر centos درخواستی مبنی بر تعویض رمز عبور را مشاهده خواهید کرد.
جهت ساخت کانتینر opensuse از این دستور استفاده کنید :
#lxc-create -n opensuse1 -t opensuse
جهت خروج از کانینر کافیست تا Ctrl+a و سپس q را فشار دهید تا به ماشین host برگردید.توجه داشته باشید کانتینر در حالت اجرا باقی می ماند و فقط از کنسول آن خارج خواهید شد.جهت بازگشت دوباره به کنسول کانتینر می توانید این دستور را اجرا کنید :
#lxc-console -n ubuntu01
نمایش لیست کانتینر ها :
جهت نمایش لیستی از کانینر ها که روی ماشین host هستند از این دستور می توان استفاده کرد :
#lxc-ls
یک نمونه خروجی دستور بالا را در پایین مشاهده می کنید :
#lxc-ls
centos01
نمایش جزئیات کامل یک کانتینر :
جهت نماش اطلاعات بیشتر از یک کانتینر کافیست تا این دستور را اجرا کنید :
#lxc-info -n centos01
به جای centos01 باید نام کانتینر مورد نظر خود را بنویسید.در پایین خروجی دستور بالا را مشاهده می کنید :
# lxc-info -n centos01
Name: centos01
State: RUNNING
PID: 1717
IP: 10.0.3.149
CPU use: 0.80 seconds
BlkIO use: 8.93 MiB
Memory use: 12.05 MiB
KMem use: 0 bytes
Link: vethS9FTPV
TX bytes: 1.88 KiB
RX bytes: 1.84 KiB
Total bytes: 3.72 KiB
همانطور که مشاهده می کنید State, CPU usage و Memory usage کانتینر نمایش داده می شود.
نمایش IP address و وضعیت یک کانتینر :
جهت مشاهده ی وضعیت و IP Address یک کانتینر کافیست تا این دستور را اجرا کنید :
#lxc-ls --fancy centos01
به جای centos01 باید نام کانتینر مورد نظر را بنویسید.در پایین خروجی مربوط به دستور بالا را مشاهده می کنید :
#lxc-ls --fancy centos01NAME STATE IPV4 IPV6 AUTOSTART
———————————————-
centos01 RUNNING 10.0.3.149 – NO
Stopping Containers
جهت stop کردن یک کانتینر کافیست تا از این دستور استفاده کنید :
#lxc-stop -n centos01
توجه داشته باشید بجای centos01 باید نام کانینر مورد نظر خود را بنویسید.
اکنون جهت بررسی وضعیت کانتینر می توانید این دستور را احرا کنید :
#lxc-ls --fancy centos01
که همچین خروجی ای را مشاهده خواهید کرد :
#lxc-ls --fancy centos01NAME STATE IPV4 IPV6 AUTOSTART
—————————————-
centos01 STOPPED – – NO
Cloning Containers
این قابلیت وجود دارد که از یک کانتینر clone تهیه کردوبرای اینکار برای مثال قصد داریم تا از کانتینر centos01 یک clone با نام centos02 تهیه کنیم.به همین خاطر کافیست تا این دستور را اجرا کرد :
#lxc-clone centos01 centos02
با احرای دستور بالا چیزی شبیه به این را در خروجی مشاهده خواهید کرد :
Created container centos02 as copy of centos01
اکنون می توان کانتینر centos02 را start کرد :
#lxc-start -n centos02
و برای اتصال به آن نیز کافیست تا این دستور را اجرا کرد :
#lxc-console -n centos02
جهت خاموش کردن یک کانتینر نیز می توانید پس از ورود به آن دستور poweroff را اجرا نمایید.
گرفتن snapshot از یک کانتینر :
جهت snapshot گرفتن از یک کانتینر ابتدا کافیست تا این دستور را اجرا کنید :
#lxc-stop -n centos01
سپس این دستور را اجرا کنید :
#lxc-snapshot -n centos01
در ubuntu 15.04 فایل های snapshots در این مسیر ذخیره می شوند :
/var/lib/lxc/
در ubuntu 14.04 فایل های snapshots در این مسیر ذخیره می شوند :
/var/lib/lxcsnaps/
بازیابی Snapshots :
جهت بازیابی یک کانتینر از snapshot کافیست تا این دستور را اجرا کنید :
#lxc-snapshot -n centos01 -r snap0
حذف Containers :
جهت حذف کامل یک کانتینر از روی Host کافیست تا این دستور را اجرا کنید :
#lxc-destroy -n centos01
مدیریت Container ها با استفاده از پنل تحت وب LXC :
اگر تمایل به مدیرت LXC از طریق کنسول را ندارید.می توانید از LXC web panel استفاده کنید و به راحتی و با استفاده از یک مرورگر وب کانتینر های خود را مدیریت کنید.
جهت نصب LXC web panel این دستور را اجرا کنید :
#wget http://lxc-webpanel.github.io/tools/install.sh -O – | sudo bash
خروجی دستور بالا را در پایین مشاهده می کنید :
wget http://lxc-webpanel.github.io/tools/install.sh -O – | sudo bash
–2015-06-13 16:52:29– http://lxc-webpanel.github.io/tools/install.sh
Resolving lxc-webpanel.github.io (lxc-webpanel.github.io)… 23.235.43.133
Connecting to lxc-webpanel.github.io (lxc-webpanel.github.io)|23.235.43.133|:80… connected.
HTTP request sent, awaiting response… 200 OK
Length: 2678 (2.6K) [application/octet-stream]
Saving to: STDOUT
100%[===================================>] 2,678 –.-K/s in 0s
_ __ _______ __ __ _ _____ _
| | \ \ / / ____| \ \ / / | | | __ \ | |
| | \ V / | \ \ /\ / /__| |__ | |__) |_ _ _ __ ___| |
| | > <| | \ \/ \/ / _ \ ‘_ \ | ___/ _` | ‘_ \ / _ \ |
| |____ / . \ |____ \ /\ / __/ |_) | | | | (_| | | | | __/ |
|______/_/ \_\_____| \/ \/ \___|_.__/ |_| \__,_|_| |_|\___|_|
Automatic installer
2015-06-13 16:52:30 (393 MB/s) – written to stdout [2678/2678]
Installing requirement…
+ Installing Python pip
.
.
.
.
.Successfully installed flask Werkzeug Jinja2 markupsafe
Cleaning up…
Cloning LXC Web Panel…
Cloning into ‘/srv/lwp’…
remote: Counting objects: 167, done.
Receiving objects: 100% (167/167), 148.85 KiB | 0 bytes/s, done.
remote: Total 167 (delta 0), reused 0 (delta 0), pack-reused 167
Resolving deltas: 100% (63/63), done.
Checking connectivity… done.
Installation complete!
Adding /etc/init.d/lwp…
Done
Starting server…done.
Connect you on http://your-ip-address:5000/
برای دسترسی به LXC web panel کافیست تا یک مرورگر وب باز کرده و IP سرور خود با پورت 5000 را درون آن وارد کنید.
سلام حسین جان
دستت درد نکنه مقاله خوبی بود
خسته نباشی
درود امیر جان
خواهش می کنم
سلام حسین جان
مثل همیشه عالی و بدون اشکال
چاکرم 😉
[…] شده که به وسیله ی این Virtual Environment قادر خواهید بود تا LXC container های خود را راه اندازی و مدیریت کنید.Proxmox علاوه بر LXC از […]
سلام. …ممنون بابت این مقاله مفیدتون. من هم نصب کردم و خیلی هم حال کردم باهاش. چون رو لپتابم دیگه vmware نصب نمیشد. با توجه به قدیمی بودن cpu لپتاپم . اما با این lxc خیلی خوب تونست از خود کرنل vm بسازه و اجراش کنم.
فقط اگر براتون مقدوره یه مقاله بنویسید راجب :
1- راجب اینکه چطور میشه vhd یا هارد دیسک مجازی به این LXC اضافه یا تعریف کرد؟
2- چطور میشه برای LXC یک یا چند کارت شبکه جدید اضافه کرد؟
3- چطور میشه سیستم های داخل LXC رو با شبکه LAN بیرونی ارتباط داد؟
سپاسگذار میشم اگه بتونید بذارید چون خیلی گشتم ولی به جواب نرسیدم.
سلام
ممنون من با این وضعیت اقتصادی مجبورم به سیستم قدیمی بچسبم همین مطا لب دوستمون در بالا رو توضیح بدی ممنون میشم
زمانی که داشبور با اسکریبتی که لینکش محبت کردید گذاشتید فرایند نصب طی کردیم اما متاسفانه چیزی برای ما لود نکرد