آموزش نصب و پیکربندی LXC در Ubuntu 14.04

LXC

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 centos01

NAME      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 centos01

NAME      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 را درون آن وارد کنید.

 

lxc-web-panel

 

lxc-web-panel

 

8 نظرات
  1. Amir Arsalan می گوید

    سلام حسین جان

    دستت درد نکنه مقاله خوبی بود

    خسته نباشی

    1. hos7ein می گوید

      درود امیر جان
      خواهش می کنم

  2. n4v4r3d می گوید

    سلام حسین جان
    مثل همیشه عالی و بدون اشکال

    1. hos7ein می گوید

      چاکرم 😉

  3. […] شده که به وسیله ی این Virtual Environment قادر خواهید بود تا LXC container های خود را راه اندازی و مدیریت کنید.Proxmox علاوه بر LXC از […]

  4. بهزاد می گوید

    سلام. …ممنون بابت این مقاله مفیدتون. من هم نصب کردم و خیلی هم حال کردم باهاش. چون رو لپتابم دیگه vmware نصب نمیشد. با توجه به قدیمی بودن cpu لپتاپم . اما با این lxc خیلی خوب تونست از خود کرنل vm بسازه و اجراش کنم.
    فقط اگر براتون مقدوره یه مقاله بنویسید راجب :
    1- راجب اینکه چطور میشه vhd یا هارد دیسک مجازی به این LXC اضافه یا تعریف کرد؟
    2- چطور میشه برای LXC یک یا چند کارت شبکه جدید اضافه کرد؟
    3- چطور میشه سیستم های داخل LXC رو با شبکه LAN بیرونی ارتباط داد؟
    سپاسگذار میشم اگه بتونید بذارید چون خیلی گشتم ولی به جواب نرسیدم.

  5. hurd می گوید

    سلام
    ممنون من با این وضعیت اقتصادی مجبورم به سیستم قدیمی بچسبم همین مطا لب دوستمون در بالا رو توضیح بدی ممنون میشم

  6. reza می گوید

    زمانی که داشبور با اسکریبتی که لینکش محبت کردید گذاشتید فرایند نصب طی کردیم اما متاسفانه چیزی برای ما لود نکرد

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.