https://wiki.archlinux.org/index.php/Linux_Containers
所需的软件
安装LXC和拱arch-install-scripts的安装脚本包。
通过以下检查运行的内核是否正确配置为运行一个容器:
$ lxc-checkconfig
由于安全问题,ARCH默认的内核不让作为一个普通用户运行容器;因此,正常情况可以看到“User namespaces”的状态为missing。查看FS # 36969可以解决这个问题。
主机网络配置
lxcs支持不同的虚拟网络类型和网络设备(见lxc.container.conf(5))。大多数类型的虚拟网络需要主机上的桥接设备。下面提供的桥接设备的例子不意味着要受限制,而是说明性的。用户可以使用其他程序,以实现相同的结果。下面提供了一个有线和无线的例子,但其他设置也是可能的。用户被提供网络桥接设备的附加选项。
有线网络的例子
这个例子使用NetCTL:桥接模板可以在/etc/netctl/examples找到,通过编辑才能与网络主机的硬件和IP主机的网络范围相匹配。下面是两例桥配置,一个使用DHCP设置和另一个使用静态IP设置。
/etc/netctl/lxcbridge
Description="LXC bridge"
Interface=br0
Connection=bridge
BindsToInterfaces=('eno1')
IP=dhcp
SkipForwardingDelay=yes
/etc/netctl/lxcbridge
Description="LXC bridge"
Interface=br0
Connection=bridge
BindsToInterfaces=('eno1')
IP=static
Address=192.168.0.2/24
Gateway='192.168.0.1'
DNS=('192.168.0.1')
在尝试启动桥之前,请禁用主机上的运行网络接口,因为桥将取代它;这取决于主机网络是如何配置的,请参见网络配置。
用户已经使用NetCTL管理网络适配器,简单地切换到它:
# netctl switch-to lxcbridge
# netctl enable lxcbridge
在继续之前验证主机上的网络连接。这可以用一个简单的ping:
$ ping -c 1 www.baidu.com
无线网络的示例
无线网络不能直接桥接,在这种情况下,必须使用一个不同的方法。首先,一个桥梁必须创建类似于以前的例子,但它不应该有任何接口定义到它(除了容器本身的虚拟接口,这是自动完成的)。给桥分配一个静态IP地址,但不指定一个网关。
主机必须配置为使用iptables执行NAT:
# iptables -t nat -A POSTROUTING -o wlp3s0 -j MASQUERADE
在wlp3s0是无线接口的名称。启用默认情况下禁用的数据包转发。
剩下的步骤是相似的,除了一件事:为容器,网关必须配置为主机的IP地址(在本例中,它是192.168.0.2)。这是在/var/lib/lxc/container_name/config指定的(见下面)。
容器创建
在/usr/share/lxc/templates内选择你要的发行版的模板。用户希望安装非archlinux需要加装额外的软件包:
基于Debian的:debootstrap
基于Fedora:yumaur
运行lxc-create创建容器,安装的LXC根文件系统到/var/lib/lxc/CONTAINER_NAME/rootfs。例如创建一个名为“playtime”的Arch Linux LXC:
# lxc-create -n playtime -t /usr/share/lxc/templates/lxc-archlinux
提示:用户可以选择安装haveged开始haveged.service避免感知挂在安装过程中,等待系统熵是种子。没有它,私人/ GPG密钥的生成可以添加一个漫长的等待过程。
提示:用户能用-B btrfs创建Btrfs文件系统作为rootfs。这是方便如果克隆容器用LXC克隆命令的帮助。ZFS的用户相应地可以使用-B zfs,。
提示:截至2015七月,创建一个空的容器使用-t不工作,看到错误报告。作为一种替代方法可以使用-t /bin/true。
容器的配置
网络的基本配置
系统资源被定义为当一个进程使用/var/lib/lxc/CONTAINER_NAME/config中定义的容器。默认情况下,创建过程将使一个没有网络支持的最小设置。下面是一个与网络的示例配置:
/var/lib/lxc/playtime/config
# Template used to create this container: /usr/share/lxc/templates/lxc-archlinux
# Parameters passed to the template:
# For additional config options, please look at lxc.container.conf(5)
## default values
lxc.rootfs = /var/lib/lxc/playtime/rootfs
lxc.utsname = playtime
lxc.arch = x86_64
lxc.include = /usr/share/lxc/config/archlinux.common.conf
## network
lxc.network.type = veth
lxc.network.link = br0
lxc.network.flags = up
lxc.network.ipv4 = 192.168.0.3/24
lxc.network.ipv4.gateway = 192.168.0.1
lxc.network.name = eth0
## mounts
## specify shared filesystem paths in the format below
## make sure that the mount point exists on the lxc
#lxc.mount.entry = /mnt/data/share mnt/data none bind 0 0
#
# if running the same Arch linux on the same architecture it may be
# adventitious to share the package cache directory
#lxc.mount.entry = /var/cache/pacman/pkg var/cache/pacman/pkg none bind 0 0
Xorg程序设置(可选)
为了在主机的显示运行程序,一些绑定安装需要定义后使容器的程序可以访问主机的资源。添加以下部分/var/lib/lxc/playtime/config:
## for xorg
## fix overmounting see: https://github.com/lxc/lxc/issues/434
lxc.mount.entry = tmpfs tmp tmpfs defaults
lxc.mount.entry = /dev/dri dev/dri none bind,optional,create=dir
lxc.mount.entry = /dev/snd dev/snd none bind,optional,create=dir
lxc.mount.entry = /tmp/.X11-unix tmp/.X11-unix none bind,optional,create=dir
lxc.mount.entry = /dev/video0 dev/video0 none bind,optional,create=file
如果你仍然得到你LXC客户端不许可的错误,那么你可能需要在你的主机xhost +允许客户端连接到主机的显示服务器。注意打开您的显示服务器的安全问题,这样做。
离线