[zz]lxc學習


lxc能做什么:

可以為容器綁定特定的cpu和memory,分配特定比例的cpu時間、IO時間,限制可以使用的內存大小(包括內存和swap空間),提供device訪問控制,提供獨立的namespace(網絡、pid、ipc、mnt、uts)。

默認的lxc配置是隔離pids(進程) sysv ipc(進程間通信),和掛載點。如果想運行sshd,就必須提供一個新的網絡堆棧和hostname,如果想要避免文件沖突,需要重新掛載沖突文件到不同的地方。如果想要避免所有的沖突,你需要重新掛載一個文件系統。

lxc的實現:

Sourceforge上有LXC這個開源項目,但是LXC項目本身只是一個為用戶提供一個用戶空間的工具集,用來使用和管理LXC容器。LXC真正的實現則是靠Linux內核的相關特性,LXC項目只是對此做了整合。基於容器的虛擬化技術起源於所謂的資源容器和安全容器。

LXC在資源管理方面依賴與Linux內核的cgroups子系統,cgroups子系統是Linux內核提供的一個基於進程組的資源管理的框架,可以為特定的進程組限定可以使用的資源。LXC在隔離控制方面依賴於Linux內核的namespace特性,具體而言就是在clone時加入相應的flag(NEWNS NEWPID等等)。

lxc常見命令使用:

lxc-version 用於顯示系統LXC的版本號(可以通過此命令判斷系統是否安裝了lxc)

用法:lxc-version

例如:lxc-version

 lxc-checkconfig 用於判斷linux內核是否支持LXC

用法:lxc-checkconfig

例如:lxc-checkconfig

lxc-create用於創建一個容器

用法:lxc-create -n name [-f config_file]

         -n 后面跟要創建的容器名字 例如:-n foo

         -f 后面跟容器配置文件的路徑

注:1.采用lxc-create創建的容器,在停止運行后,不會被銷毀,要采用lxc-destroy命令才能銷毀

       2.容器命令空間是全局的,系統中不允許存在重名的容器,如果-n 后面跟一個已經存在的容器名,創建會失敗

例如:lxc-create --n foo --f foo.conf

lxc-execute 用於在一個容器執行應用程序

用法: lxc-execute -n name [-f config_file] [ -s KEY=VAL ]command

           -n 后面跟容器名字(容器名字用於管理容器)例如:-n foo

           -f 后面跟容器配置文件的路徑(如果沒有配置文件,可以直接用-s指定配置選項,如果什么都沒有,系統采用默認策略)例如:-f foo.conf

           -s 后面跟配置鍵值對 例如:lxc.cgroup.cpu.shares=512

       command 為要執行的命令 例如:/bin/bash

       這個命令會mount /proc 並且會自動創建/銷毀容器。

 注:1.如果容器還不存在,lxc-execute會自動創建一個,容器停止運行后會被自動銷毀

        2.用lxc-execute啟動應用程序,配置優先級如下:

          如果指定-f選項,那么之前創建容器(如果容器是已存在的)的配置文件不會被使用

          如果指定-s選項,則在命令行中的配置鍵值對會覆蓋配置文件(無論之前的還是-f指定的)相同配置

例如:lxc-execute --n foo --s lxc.cgroup.cpu.shares=512 /bin/bash

使用實際例子:

        lxc-execute -n test /bin/bash

        這個會啟動一個lxc並給出類似的一個cmd窗口,網絡是與操作系統共用的,這里好像僅僅是創建了一個命名空間

        如果沒有指定-f,默認的隔離將被使用,這個命令當你需要一個快速在一個隔離的環境中運行程序。在物理機上和container中都會運行lxc-init,在宿主機上面,這個程序用於轉發lxc-kill 信號到已經啟動的程序中 ,在container中,這個程序的pid為1,它會fork出要執行的命令(pid為2)並執行。

 

 lxc-start 用於在容器中執行給定命令

用法:lxc-start  -n name [-f config_file] [-c console_file] [-d] [-s KEY=VAL]
          [command]

      -d 將容器當做守護進程執行

     -f  后面跟配置文件

     -c 指定一個文件作為容器console的輸出,如果不指定,將輸出到終端

    -s 指定配置

    如果沒有指定命令,lxc-start 將要運行 /sbin/init

例如:lxc-start -n foo -f foo.conf -d /bin/bash

注:1.如果容器還不存在,lxc-start會自動創建一個,容器停止運行后會被自動銷毀

       2.lxc-start配置優先級與lxc-execute相同

       3.lxc-start 與lxc.execute的異同:

        lxc-start 和 lxc-execute都可以在容器中啟動進程,區別在於lxc-start直接創建進程,lxc-execute先創建lxc-init進程,然后在lxc-init中fork一個進程來執行。(關於第4點,lxc-init所占的是一個什么樣的地位?)

       The orphan process group and daemon are not supported by this  command,
       use the lxc-execute command instead

       If no command is specified, lxc-start will use the default "/sbin/init"
        command to run a system container.

      4.lxc-start用於在容器啟動system,lxc-execute用於在容器執行應用程序

 lxc-kill 發送信號給容器中的第一個用戶進程(容器內部進程號為2的進程)

用法:lxc-kil -n name SIGNUM

      -n 后面跟容器名

      SIGNUM  信號 (此參數可選,默認SIGKILL)

例如:lxc-kill -n foo

lxc-stop 用於停止容器中所有的進程

用法:lxc-stop -n name

       -n后面跟要停止的容器名

例如:lxc-stop --n foo

lxc-destroy 用於銷毀容器

用法:lxc-destroy -n name

       -n后面跟要停止的容器名

例如: lxc-destroy --n foo

lxc-cgroup 用於獲取或調整與cgroup相關的參數

用法:lxc-cgroup -n name subsystem value

        -n 后面跟要調整的容器名

例如: lxc-cgroup -n foo devices.list

           lxc-cgroup -n foo cpuset.cpus "0,3"

lxc-info 用戶獲取一個容器的狀態

 用法:lxc-info -n name

       -n后面跟操作的容器名

例如: lxc-info --n foo

注:容器的狀態有:STARTING RUNNING STOPPING STOPPED ABORTING

lxc-monitor 監控一個容器狀態的變換,當一個容器的狀態變化時,此命令會在屏幕上打印出容器的狀態

用法:lxc-monitor -n name

例如:lxc-monitor -n foo

 lxc-ls 列出當前系統所有的容器

用法:lxc-ls

例如:lxc-ls

lxc-ps 列出特定容器中運行的進程

用法:lxc-ps

例如:lxc-ps -n foo

更多的命令介紹可以再man page獲得

http://manpages.ubuntu.com/manpages/lucid/man7/lxc.7.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM