在CentOS7上使用LXC

安装

似乎将LXC相关的rpm和debootstrap的rpm都注册到了Epel仓库,所以需要先添加Epel,然后安装LXC相关的软件包。

$ sudo yum install -y epel-release
$ sudo yum update
$ sudo yum install lxc lxc-templates lxc-doc lxc-libs rsync debootstrap

如果您没有打算在LXC容器中使用Debian或Ubuntu,那么不需要安装debootstrap。
据说在安装容器时会使用rsync。

虚拟网络

在后续的研究中,我们将验证LXC能否单独提供虚拟网络,并利用bridge-utils构建虚拟网络。

$ sudo yum install bridge-utils

虚拟桥接口

只需要一个选项,下面的内容中创建/etc/sysconfig/network-scripts/ifcfg-lxcbr0,并重新启动NetworkManager以使其生效。。但是,不知何故,除非重新启动操作系统,否则它不会生效。

NAME=lxcbr0
DEVICE=lxcbr0
TYPE=Bridge
BOOTPROTO=static
ONBOOT=yes
IPADDR=172.16.1.1
PREFIX=24
DEFROUTE=no
NM_CONTROLLED=no
#DNS1=192.168.xxx.x
#SEARCH=example.com

安装LXC容器

CentOS

$ sudo lxc-create -n centos7 -t centos -- --release 7

当容器创建完成后,将默认密码输出到/var/lib/lxc/centos7/tmp_root_pass位置。

创建容器的CentOS版本可以使用`–release`参数进行指定。这可能会依赖于环境,但是由于CentOS 7目前不能稳定运行,所以虽然有点老旧,但如果在LXC容器中运行CentOS的话,目前(截至2016年4月)推荐使用CentOS 6。

Debian Linux (Debian操作系统)

$ sudo lxc-create -n debian_jessie -t debian -- --release jessie

在release中,可以指定Debian Linux的版本。如果要安装Debian Linux8,则指定jessie;而要安装Debian Linux7,则指定wheezy。

如果要达到更小的配置,您可以在/usr/share/lxc/templates/lxc-debian的以下行中通过$packages参数删除指定的软件包或使用–exclude参数来排除安装的软件包。

    echo "Downloading debian minimal ..."
    debootstrap --verbose --variant=minbase --arch=$arch \
        --include=$packages \
        "$release" "$cache/partial-$release-$arch" $MIRROR

网络接口设置

我们将在每个容器的配置文件中添加以下描述。
由于大多数设置应该在安装容器时已经配置好了,所以我认为只需设置lxc.network.link指定的接口名称即可。

lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = lxcbr0
lxc.rootfs = /var/lib/lxc/intranet/rootfs

启动容器

$ lxc-start -n debian_jessie

又或者,

$ lxc-start -n debian_jessie -d
$ lxc-console -n debian_jessie

如果使用前一个命令(不加-d选项)启动容器,则在容器启动后会自动连接到容器的控制台,并且在容器关闭之前无法退出容器的控制台。如果使用后一个命令(加入-d选项)启动容器,则在输入lxc-console命令之前不会连接到容器的控制台。而且,在连接到控制台后,可以使用Ctrl+a q组合键来退出容器的控制台。

容器的自动启动

将以下内容翻译成中文:
/var/lib/lxc//config

/var/lib/lxc//config 目录下的配置文件。

lxc.start.auto = 1

添加并

$ sudo systemctl enable lxc.service

如果我们像这样进行设置,即在操作系统启动时将lxc.service设为自动启动,那么设置了lxc.start.auto=1的容器应该会自动启动。

常见的问题

无法与互联网连接的容器。

如果您想通过LXC容器通过LXC主机连接到互联网,您需要更改LXC主机的防火墙设置。
建议您首先清除iptables配置,然后添加最基本的设置,这样便于故障排除。

sudo echo 1 > /proc/sys/net/ipv4/ip_forward
sudo iptables -F
sudo iptables -F -t nat
sudo iptables -t nat -A POSTROUTING -o eno16777736 -j MASQUERADE

请将eno16777736视为用于互联网连接的接口。

我想在不登录到LXC主机的情况下登录到容器中。

进行NAT(NAPT)配置,并在Windows PC上添加到虚拟网络的路由,即可在不登录LXC主机的情况下登录容器。

在命令提示符中,

> route add 172.16.1.0 mask 255.255.255.0 LXCホストのIPアドレス

又或者,

> route add 172.16.1.0 mask 255.255.255.0 LXCホストのIPアドレス -p

以类似这样的方式添加路由。前者需要在每次重启 Windows 时都添加路由。而后者使用“-p”选项,则可以在重启 Windows 后仍然保留路由设置。

忘记了容器的root密码。

在LXC中,由于可以直接从LXC主机引用容器的根文件系统,所以可以通过执行chroot命令来更改根密码以及其他帐户的密码。还可以执行软件包的安装。

无法从Debian容器执行ping命令

没有什么问题,但在Debian容器中,默认情况下没有安装ping命令。因此,如果需要,您需要手动安装。

$ sudo apt-get install iputils-ping

又或者,

$ sudo chroot /var/lib/lxc/debian_jessie/rootfs/ apt-get install iputils-ping

lxc-start: lxc_start.c: main: 295 若没有配置文件执行’/sbin/init’可能会导致主机崩溃。

当尝试启动容器时,

# lxc-start -n debian -d
lxc-start: lxc_start.c: main: 295 Executing '/sbin/init' with no configuration file may crash the host

如果输出了错误消息的情况下,请

# lxc-start -f /var/lib/lxc/debian8/config -n debian -d

只需指定配置文件,问题就能解决。只要成功启动一次,之后就不需要再指定配置文件了。原因不明。。。

广告
将在 10 秒后关闭
bannerAds