首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Linux 容器的建立和简单管理-2

Linux 容器的建立和简单管理-2

LXC 常见命令说明举例启动 LXC 虚拟计算机
1
# lxc-start  -n  cjhlxc1




确实的账号和密码都是 ubuntu 然后登录虚拟计算机见图 6
图 6.登录虚拟计算机列出当前系统所有的容器
检查目前有哪几个容器启动(若没有任何结果,则目前都没有容器启动)
1
2
# lxc-ls
cjhlxc1 foo




使用 console 登入容器第 3 个控制台
1
$ lxc-console -n cjhlxc1 –t 3




说明:如果没有指定 -t N 选项,则一个没有被使用的控制台将自动选择。要退出控制台,使用快捷键 Ctrl-a q 。
停止运行一个容器
1
# lxc-stop -n cjhlxc1




获取一个容器的状态
# lxc-info -n ol6ctr1
把一个容器销毁
1
# lxc-destroy -n cjhlxc11




复制一个容器
1
# lxc-clone -o cjhlxc1 -n ol6ctr2




暂停或恢复一个容器
1
2
# lxc-freeze -n cjhlxc1
# lxc-unfreeze -n cjhlxc1




LXC 虚拟网络接口设置了解 LXC 内置的网络架构不管是哪套虚拟系统,只要是运作在 Linux 系统架构之内,所使用的虚拟网络都是 Linux 系统缺省的虚拟网络架构(即 TAP/TUP, Bridge)图 7 是示意图 。
图 7.LXC    虚拟网络接口示意图图 7 这个结构中两个容器使用 Veth Bridge,因为默认情况下,LXC 的模板脚本设置网络都是基于 Veth Bridge。在这种模式下,容器从 dnsmasq 服务器获取其 IP 地址。主机允许的容器连接到网络的其余部分(使用 iptables 的 NAT 规则 ,但这些规则不允许传入的连接到容器)。
小贴士:什么是 veth
Linux container 中用到一个叫做 veth 的东西,这是一种比较新的设备,专门为 container 所建。veth 从名字上来看是 Virtual ETHernet 的缩写,它的作用很简单,就是要把从一个网络用户空间(network namespace )发出的数据包转发到另一个用户空间。veth 设备是成对的,一个是容器之中,另一个在容器之外,即在真实机器上能看到的。

除了 Veth Bridge 外,LXC 虚拟计算机还支持 Macvlan Bridge 和 Macvlan VEPA。有时我们可能需要一块物理网卡绑定多个 IP 以及多个 MAC 地址,虽然绑定多个 IP 很容易,但是这些 IP 会共享物理网卡的 MAC 地址,可能无法满足我们的设计需求,所以有了 MACVLAN 设备,其工作
MACVLAN 会根据收到包的目的 MAC 地址判断这个包需要交给哪个虚拟网卡。限于篇幅这里介绍 Macvlan Bridge 和 Macvlan VEPA,感兴趣的用户可以参考参考文献中的介绍。
与 KVM 相同 LXC 安装完成,缺省就会产生一个网络接口(包含以下功能:交换机(Switch Hub) + DHCP 服务器 + NAT + Cache DNS 服务器),网络接口名称也就是 lxcbr0,可以通过如下命令验证:
1
2
3
# brctl show
bridge name bridge id       STP enabled interfaces
lxcbr0      8000.3eef2e882ac9   no      vetheCYpw4




由上面的命令输出图就可以明显看到 lxcbr0 的相关信息,而这个网络接口,除了扮演交换机的功能之外,缺省也提供了 NAT 与 DHCP 的功能,简单来说就是 lxcbr0 除了提供交换机的功能之外,也提供了 DHCP 服务与 DNS 缓存服务 , 再通过 iptables 启动 NAT 的功能,由以下命令可以来证明,命令输出如下:
1
2
3
4
5
6
7
8
9
10
11
12
# iptables -t nat -L -n
Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  10.0.3.0/24         !10.0.3.0/24




DHCP 服务与 DNS 缓存服务的功能,可以通过如下命令验证
1
#ps aux | grep lxc




命令输出见图 8
图 8.查看    DHCP 服务与 DNS 缓存服务修改 LXC 网络接口的方法一般我们是通过修改 lxcbr0 的设置文件的方法来实现的。通过〝ifconfig lxcbr0〞的命令,可以得知 lxcbr0 本身的 IP 地址,而由〝ps aux | grep dnsmasq〞的命令,也可以清楚看到 DHCP Server 分配的 IP 范围,因此可以知道 LXC 缺省虚拟网络预设的 IP 区段为 10.0.3.0/24,那么,这些信息,可以修改吗?当然可以,以上这些网络信息,是 LXC 缺省预设的网络设置,所以可以通过修改配置文件的方式,来修改相关信息,以符合实际应用的状况,可以利用编辑器来修改 LXC 的网络配置文件:
1
# vi /etc/default/lxc




清单 1./etc/default/lxc 文件内容
1
2
3
4
5
6
7
LXC_BRIDGE="lxcbr0"
LXC_ADDR="10.0.3.1"
LXC_NETMASK="255.255.255.0"
LXC_NETWORK="10.0.3.0/24"
LXC_DHCP_RANGE="10.0.3.2,10.0.3.254"
LXC_DHCP_MAX="253"
LXC_SHUTDOWN_TIMEOUT=120




用户修改后要重新启动网络服务,使用如下命令:
1
#service lxc-net restart




设置 LXC 使用物理网络接口相比 KVM 来说,LXC 可以直接使用物理网络接口(比如在本文中物理网卡是 eth0、eth1,笔者准备把 eth0 分配给 LXC 虚拟网络 )。首先使用“ ifconfig –a”命令查看一下,其中而 eth1 为实体计算机实际对外联机所使用的网络接口,所 eth0 ,就可以拿来设定给 LXC 虚拟计算机来使用。然后修改修改 LXC 虚拟计算机的配置文件:/var/lib/lxc/cjhlxc1/config
1
#vi /var/lib/lxc/cjhlxc1/config




清单 2 /var/lib/lxc/cjhlxc1/config 文件内容
1
2
3
4
5
6
7
8
9
10
11
12
13
lxc.network.type=phys
lxc.network.link=eth0
lxc.network.flags=up
lxc.utsname = cjhlxc1
#lxc.network.hwaddr = 00:16:3e:f9:ad:be #此行要注释掉#
lxc.devttydir = lxc
lxc.tty = 4
lxc.pts = 1024
lxc.rootfs = /var/lib/lxc/myt2/rootfs
lxc.mount  = /var/lib/lxc/myt2/fstab
lxc.arch = amd64
lxc.cap.drop = sys_module mac_admin
lxc.pivotdir = lxc_putold




修改完成后存盘退出。简单说明一下以上参数:
lxc.network.type 指定用于容器的网络类型,包括四种类型:
  • empty:建立一个没有使用的网络接口
  • veth:容器将链接到 lxc.network.link 定义的网桥上,从而与外部通信。之前网桥必须在预先建立。
  • macvlan:一个 macvlan 的接口会链接到 lxc.network.link 上。
  • phys: lxc.network.link 指定的物理接口分配给容器。
lxc.network.flags 用于指定网络的状态,up 表示网络处于可用状态。
lxc.network.link 用于指定用于和容器接口通信的真实接口,比如一个网桥 br0 。
lxc.network.hwaddr 用于指定容器的网络接口的 mac 地址。
下面修改主机网络配置文件
1
#vim /etc/network/interface




注意此时配置文件是空文件,没有内容。通常可以设置为固定 IP 地址模式(见清单 3)或者通过 DHCP 服务器获取 IP 地址模式(见清单 4)
清单 3.固定 IP 地址模式
1
2
3
4
5
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
dns-nameservers 10.0.0.4




清单 4.通过 DHCP 服务器获取 IP 地址模式
1
2
3
4
5
6
7
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
        address 10.0.0.3
        netmask 255.255.255.0
        dns-nameservers 10.0.0.4




修改完成后存盘退出。然后重新启动网络服务:
1
#/etc/init.d/networking restart




下面启动 LXC 虚拟计算机
1
# lxc-start  -n  cjhlxc1




注意一旦 LXC 虚拟计算机启动成功,在宿主计算机上使用〝ifconfig -a〞查看主机网络接口,用户会发现此时网络接口 eth0 消失了,只有 eth1 。这是因为 eth0 已经让 LXC 虚拟计算机给使用了。然后我们使用如下命令“ lxc-console -n cjhlxc1”登录 LXC 虚拟计算机发现此时 LXC 虚拟计算机的网络接口是 eth0。然后我们可以使用 ping 命令测试一下 LXC 虚拟计算机和互联网是否联通。
总结LXC 中文名称就是 Linux 容器工具,容器可以提供轻量级的虚拟化,以便隔离进程和资源,使用 LXC 的优点就是不需要安装太多的软件包,使用过程也不会占用太多的资源,本文循序渐进地介绍在 Linux 容器的建立和管理方法以及虚拟网络接口的设置方法。
返回列表