LXC使用指南

本文档详细介绍了Linux容器(LXC)的使用,包括安装、配置、控制组、网络流量管理和附录等内容。从lxc-create、lxc-destroy等基本操作到cgroup配置、网络配置等高级功能,全面阐述了如何创建、管理以及配置LXC容器,以实现资源隔离和高效利用。
摘要由CSDN通过智能技术生成
[b]目录
目录 1
1 lxc简介 1
2 lxc安装 1
2.1 系统及内核版本 1
2.2 安装lxc 1
3 lxc工具集 2
3.1 创建和销毁容器 2
3.1.1 lxc-create 2
3.1.2 lxc-destroy 2
3.2 在容器中运行与结束应用 2
3.2.1 lxc-execute和lxc-start 2
3.2.2 lxc-stop 3
3.3 lxc-console 3
3.4 冻结和解冻容器 3
3.4.1 lxc-freeze 3
3.4.2 lxc-unfreeze 3
3.5 获取容器的信息 4
3.5.1 lxc-ls 4
3.5.2 lxc-info 4
3.5.3 lxc-ps 4
3.5.4 lxc-netstat 4
3.5.5 lxc-cgroup 4
3.6监控容器 4
3.6.1 lxc-monitor 4
3.6.2 lxc-wait 5
3.6.3 lxc-kill 5
4 lxc配置 5
4.1 配置主机名 5
4.2 配置容器使用的虚拟化网络 6
4.3 容器伪终端和系统控制台 6
4.4 挂载点 7
4.5 根文件系统 7
4.6 控制组配置 7
4.6.1 控制组CPU配置 7
4.6.2 块设备配置 8
4.6.3 CUP计数信息(非配置信息) 8
4.6.4 CPU集合配置 8
4.6.5 设备白名单 10
4.6.6 内存配置 10
4.6.7 冷冻配置 11
4.6.8 网络通信配置 11
4.6.9 权限配置 11
4.6.10 其他配置项 12
5 连接容器实例 12
6 网络流量配置 15
7 附录和参考 17
7.1 brctl命令简介 17
7.2 tc命令简介 17
7.3 超级用户权限 18




1 lxc简介
容器有效地将由单个操作系统管理的资源划分到孤立的组中,以更好地在孤立的组之间平衡有冲突的资源使用需求。与虚拟化相比,这样既不需要指令级模拟,也不需要即时编译。容器可以在核心 CPU 本地运行指令,而不需要任何专门的解释机制。此外,也避免了准虚拟化(paravirtualization)和系统调用替换中的复杂性。
2 lxc安装
2.1 系统及内核版本
Fedora 13, 2.6.33内核
2.2 安装lxc
1) 安装lxc工具包
# yum install lxc
2) 检查内核是否支持lxc容器
# lxc-checkconfig
如果输出所有项均为enbale状态,则表明内核支持lxc容器,否则需重新编译内核打开相应功能项。
3) 通过shell在容器中运行一个程序(超级用户下)
a) 在当前目录下编译配置文件conf.txt,其内容为:
#Simplest lxc configuration
lxc.utsname = name
b) 挂载cgroup
# mkdir /cgroup
# mount –t cgroup cgroup /cgroup
c) 输入如下shell命令
# lxc-execute -n test -f conf.txt /bin/echo “hello world”
d) 输出结果为
hello world
4) 编辑/etc/fstab,使得在系统启动时自动挂载cgroup
# /bin/echo “cgroup /cgroup cgroup defaults 0 0” >> /etc/fstab
3 lxc工具集
3.1 创建和销毁容器
3.1.1 lxc-create
lxc-create -n name [-f config_file] [ -t template]
创建一个系统对象来存储配置和用户信息,该对象保存/usr/local/var/lib/lxc(注意该目录为版本相关的,不同版本的lxc可能不同)目录下,name为其标示符。如果配置文件未指定,则系统会支持默认的资源隔离:PID,sysv IPC和挂载点。
例如:
# lxc-create -n test
创建容器test,可在/usr/local/var/lib/lxc目录下发现创建了目录test,该文件中包含了默认的配置文件config
3.1.2 lxc-destroy
lxc-destroy -n name
销毁一个名称为name的容器,主要删除在/usr/local/var/lib/lxc中相应的文件,注意一定要在容器处于STOPPED状态时才能销毁容器.
例如:
# lxc-destroy -n test
销毁容器test.
3.2 在容器中运行与结束应用
3.2.1 lxc-execute和lxc-start
a) lxc-execute -n name [-f config_file] [-s EKY=VAL] command
在指定的容器name中运行由command指定的命令。如果容器name未创建,则lxc-execute使用指定的配置文件创建容器name。该命令通过中间进程lxc-init来启动需要运行的命令,并且lxc-init在创建命令后会等待该命令执行结束。因此lxc-init进程的pid为1,运行的命令的pid为2。
b) lxc-start -n name [-f config_file] [-s KEY=VAL] command
lxc-start在指定容器name中运行command指定的命令。注意lxc-start不支持孤儿进程组和守护进程,且如果command未指定,则会运行/sbin/init命令。
例如:
# lxc-create -n test –f conf.txt /bin/bash #运行bash
# lxc-start -n test /bin/bash #运行bash
注意,lxc-create用于在容器中运行一个应用,而lxc-start则用于在容器中运行一个系统。
3.2.2 lxc-stop
lxc-stop -n name
终止容器name的运行。
例如:
# lxc-stop -n test #终止容器test的运行
3.3 lxc-console
如果创建容器时候配置了tty,可通过如下命令连接到tty
lxc-console -n test -t 3 #连接到容器test的3号tty上。
3.4 冻结和解冻容器
3.4.1 lxc-freeze
lxc-freeze -n name
冻结所有在容器name中运行的程序,此处冻结是指挂起所有在指定容器中运行的程序。必须显式的使用lxc-ufreeze命令解除冻结。
#lxc-freeze -n foo #冻结容器foo中运行的所有程序
3.4.2 lxc-unfreeze
lxc-unfreeze -n name
解除容器name的冻结状态.
#lxc-ufreeze -n foo #将foo中冻结的程序恢复运行。
注意:该功能需要内核打开相应的功能!
3.5 获取容器的信息
3.5.1 lxc-ls
列出系统中存在的所有容器,选项和ls命令相同。
3.5.2 lxc-info
lxc-info -n name
列出容器name的运行信息:输出格式如下:
name is stopped
name is running
3.5.3 lxc-ps
显示特定容器的pids,选项和ps相同,为内置的ps
3.5.4 lxc-netstat
显示指定容器的网络状态,该命令建立在命令netstat之上,因此接受于netstat相同的参数。
3.5.5 lxc-cgroup
lxc-cgroup -n name subsystem [value]
显示或者设置与控制组相关联的子系统的值,如果value未指定则显示其值,否则设定相应子系统的值。
例如:
lxc-cgroup -n foo devices.list #显示允许容器foo使用的设备列表
lxc-cgroup -n foo cpuset.cpus “0,3” #将处理器0和3分配给容器foo
3.6监控容器
3.6.1 lxc-monitor
lxc-monitor -n name
监控指定容器的状态,其中名称为正则表达式。
例如:
lxc-monitor -n ‘foo|bar’ #监控容器foo和bar
lxc-monitor -n ‘.*’ #监控所有容器
lxc-monitor -n ‘[f|b].*’ #监控所有名称以f或b开始的容器
3.6.2 lxc-wait
lxc-wait -n name -s states
等待容器到达某一状态,然后退出,其中states可为若干状态.
例如:
lxc-wait -n foo ‘RUNNING’ #等待容器到RUNNING状态
lxc-wait -n foo ‘RUNNING|STOPPED’ #等待容器到达RUNNING或者STOPPED状态
注意:容器的状态分为:STOPPED, STARTING ,RUNNING, STOPPING, ABORTING.
3.6.3 lxc-kill
lxc-kill -n name SIGNUM
lxc-kill将信号SIGNUM发送给容器中的第一个进程。
例如:
lxc-kill -n foo 2 #向foo中第一个进程发送SIGINT信号
注意:如果使用lxc-execute运行的命令,信号首先发送给lxc-init,然后lxc-init将该信号传递给运行的第二个进程。如果发送的信号使得lxc-init进程终止,那么该信号不会传递给运行的第二个进程,并且导致容器中得应用结束运行。
4 lxc配置
每个lxc容器都对应于一个配置文件,该文件可在使用lxc-create、lxc-execute和lxc-start命令时指定,如果通过lxc-create创建的容器,则会在/var/lib/lxc/container-name/config中保存该配置。配置信息包括:主机名、网络、cgroup信息等。lxc配置文件中每一行采用key=val的形式,每行保存一个配置项。注释以#开头。
4.1 配置主机名
lxc.utsname = foo #配置主机名为foo
4.2 配置容器使用的虚拟化网络
lxc.network.type: 指定容器使用的虚拟化网络类型,该域一般为新的网络配置的开始,其可能值为:
值 类型
empty 创建仅有回路接口的网络
veth 创建一个对等网络,该网络的一端分配给容器,另一端与lxc.network.link指定的网桥连接。如果未指定网桥,端设备会被创建但是不会连接到任何网桥上。在默认情况下lxc会对容器外的网络设备选择一个名字,但是可以通过lxc.network.veth.pair选项来指定。
vlan 创建一个由lxc.network.link指定的虚拟局域网接口(网卡)分配给容器,vlan的标识符可由lxc.network.vlan.id指定。
phys 将
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值