LXC总是先创建后使用,当一个进程在LXC中运行的时候,进程依赖于一些在lxc创建时配置的一些系统资源的虚拟化和隔离。默认的一些pids、sysv ipc、mount points都会被虚拟化出来和隔离起来,这些配置可以明确的在一个配置文件中定义,例如:如果在创建时没有指定network配置,则lxc会共享创建lxc容器的network环境,但是如果指定了network的配置,则会为lxc创建出一个新的network栈。
配置文件定义了不同的系统资源给lxc使用,目前utsname、network、mount points、root file system、user namespace、cgroup被支持。配置文件中的每个值都是key=value的格式。
为了减轻管理员管理多个lxc实例的鸭梨,lxc的配置文件可以嵌套在一个文件中,比如:network的配置可以配置在一个单独的文件中,然后这个network配置文件可以被多个lxc实例使用。所以lxc实例迁移到其他机器时只需要更新这个文件而已。
#指定了要加载的配置文件 lxc.include=/path/filelxc配置文件还允许你设置lxc实例的架构,例如:你可以在64位的宿主机器上面运行一个32位的容器的32位程序。
#值可以使用x86、i686、x86_64、amd64 lxc.arch=ustname选项定义了lxc容器的hostname、这意味着lxc容器可以有自己的hostname
#设置hostname lxc.utsname=lxc还允许你定义一个信号数字,当你在使用lxc-stop命令停止一个lxc实例的时候,可以使用该信号停止实例。例如:SIGKILL、SIGRTMIN+14等等
#设置信号 lxc.stopsignal=network选项定义了容器实例虚拟出来的network环境,network虚拟化工作在第二层,为了使用network虚拟化,必须为lxc容器定义一个网络接口,可以设置多个网络接口在一个lxc实例上面,即时宿主机上只有一个物理网口。
#指定lxc容器使用哪种类型的虚拟网络,几个虚拟化网络可以指定在同一个容器中,作为多个虚拟网口使用,虚拟网络主要有以下类型:empty、veth、valn、macvlan、phys。 #empty:只会创建一个loopback接口 #veth:一个和宿主机等同的网络设备会被建立,容器将连接到lxc.network.link定义的网桥上面,从而与外部通讯,网桥必须事先建立好。默认情况下lxc会自动为创建好的网络设备指定一个名称,如果你希望自己指定名称,可以使用lxc.network.veth.pair定义 #vlan:一个vlan接口会被连接到lxc.network.link指定的接口上,vlan id通过lxc.network.vlan.id来指定 #macvlan:一个macvlan接口会被连接到lxc.network.link指定的接口上,lxc.network.macvlan.mode设置macvlan的模式。 #phys:建立一个新网络空间,lxc.network.link指定的物理接口会被分配给容器 lxc.network.type= #指定network的状态,up使网络处于可用状态 lxc.network.flags=up #设置一个接口用于真实的流量传输,比如一个网桥接口、一个真实物理接口 lxc.network.link= #默认的网络设备名称是自动分配的,如果要自己指定,则可以手动设置,例如:eth0 lac.network.name= #默认网络接口的mac是自动分配的,你也可以自己指定 lxc.network.hwaddr= #指定一个ipv4地址作为虚拟网络的ip地址,可以指定多个虚拟网络地址 lxc.network.ipv4= #设置一个ipv4格式的地址,作为容器内部的gateway,你也可以设置为auto模式,这样意味着你从网桥获取地址,并把它作为gateway。auto只能用于veth金额macvlan lxc.network.ipv4.gateway= #设置一个ipv6地址作为虚拟网络的地址 lxc.network.ipv6= #指定一个ipv6地址作为gateway,也可以设置为auto,自动到网桥去获取。auto只能用于veth和macvlan模式 lxc.network.ipv6.gateway= #指定一个脚本,在容器创建好虚拟网络后执行。 lxc.network.script.up= # lxc.network.script.down=在严格隔离容器里面,可以有自己私有的pseudo tty接口
#设置容器有自己的pseudo tty接口,value指定了最大的tty数目 lxc.pts=如果容器有配置root filesystem和inittab文件,则你可以设置output输出到那个console中
#指定一个文件的路径,然后console的输出会写到该文件中,none会disable该功能 lxc.console=也可以设置通过ttys连接console
# lxc.tty=开启kmsg软连接
#创建/dev/kmsg到/dev/console的软连接 lxc.ksmg=mount points选项指定不同的挂载点,这个挂载点是容器私有的额,在进程外部是看不到的。
#指定一个文件位置,该文件是fstab格式的,里面包含了挂载信息。 lxc.mount= #在一行中指定一个挂载点,是fatab格式的。不用写在fstab文件中 lxc.mount.entry=容器的root文件系统可以使用不同于宿主机的系统
#指定容器的root文件系统。可以使一个镜像文一个目录、一个块设备,如果没有指定,则容器和宿主机共享一个文件系统,设定此项以后,容器内所有进程将会把此目录根目录。 lxc.rootfs= #在旋转之前递归的绑定root文件系统? lxc.rootfs.mount= #在lxc.rootfs下面的那个目录转动原来的root文件系统,默认是mnt目录。 lxc.pivotdir=cgroup选项可以配置不同的子系统,lxc不检查子系统名称的正确性。详细的cgroup介绍请看:xxxxxx
#设置子系统,例如:lxc.cgroup.cpuset.cpus lxc.cgroup.[subsystem name]如果容器以root用户运行,则可以禁止一些功能
#指定在容器中禁止哪些功能,在一行中定义几个cap,用空格分开,都是以'CAP_'开头,具体cap可以参考http://manpages.ubuntu.com/manpages/saucy/man7/capabilities.7.html lxc.cap.drop= #在容器中保持哪些cap lxc.cap.keep=UID映射,在容器中可以开启私有的user namespace。例如:你可以映射容器中的uid 0到宿主机的uid 20000上。容器中的root用户只是限制于容器中。
#value的第一个字母是'u'或者'g',代表是用户还是组要进行映射,接下来是第一个容器中要被映射的user id,最后是宿主机中user id lxc.id_map=日志设置,在容器中也是可以设置日志信息的。容器的启动日志只收集ERROR级别的信息,记录到以容器名开头,以.log结尾的文件中,或者记录在/var/log/lxc下面。默认的日志级别和日志路径都是可以在配置文件中修改的。
#指定日志级别,value是0到8的整数,0=trace,1=debug,2=info,3=notice,4=warn, 5=error,6=critical,7=alert,8=fatal. lxc.loglevel= #指定日志路径 lxc.logfile=
下面给出一个例子:
lxc.utsname = complex lxc.network.type = veth lxc.network.flags = up lxc.network.link = br0 lxc.network.hwaddr = 4a:49:43:49:79:bf lxc.network.ipv4 = 10.2.3.5/24 10.2.3.255 lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3597 lxc.network.ipv6 = 2003:db8:1:0:214:5432:feab:3588 lxc.network.type = macvlan lxc.network.flags = up lxc.network.link = eth0 lxc.network.hwaddr = 4a:49:43:49:79:bd lxc.network.ipv4 = 10.2.3.4/24 lxc.network.ipv4 = 192.168.10.125/24 lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3596 lxc.network.type = phys lxc.network.flags = up lxc.network.link = dummy0 lxc.network.hwaddr = 4a:49:43:49:79:ff lxc.network.ipv4 = 10.2.3.6/24 lxc.network.ipv6 = 2003:db8:1:0:214:1234:fe0b:3297 lxc.cgroup.cpuset.cpus = 0,1 lxc.cgroup.cpu.shares = 1234 lxc.cgroup.devices.deny = a lxc.cgroup.devices.allow = c 1:3 rw lxc.cgroup.devices.allow = b 8:0 rw lxc.mount = /etc/fstab.complex lxc.mount.entry = /lib /root/myrootfs/lib none ro,bind 0 0 lxc.rootfs = /mnt/rootfs.complex lxc.cap.drop = sys_module mknod setuid net_raw lxc.cap.drop = mac_override
可以参看一下:运维和开发