在Ubuntu系统中使用LXC容器的教程
使用“容器”来保证主机环境的安全性,这个概念早在十年前就已经存在(例如 freebsd 的 jail 虚拟化技术),但是直到最近,随着部署云架构需求越来越多,像 lxc 和 docker 这种 linux 下的容器才成为被关注的焦点。当然,由于主流厂商(云服务商如亚马逊主推 aws,微软主推 azure;发行版如红帽、ubuntu等)组成的强大靠山,docker 已经被放在媒体的聚光灯下面,其实,docker 里面所谓的“容器”技术是由 lxc 提供的。
你只是一个普通的 linux 用户,那 docker/lxc 能为你带来什么好处呢?容器可以将你的应用在不同的 linux 发行版之间迁移。想像一下这个场景:你正在用的发行版是 debian,你喜欢它的稳定性,同时你又想玩一款最新的 ubuntu 游戏,你不需要在电脑上装双系统然后重启进入 ubuntu,也不需要在 debian 上跑一个耗资源的 ubuntu 虚拟机,你只需要简单地生成一个 ubuntu 容器就够了。
抛开 docker 的好处不谈,让我们聊一下 lxc 容器的好处:我可以使用 libvirt 提供的接口来管理 lxc,这些接口和 docker 没有任何关系。如果你有使用基于 libvirt 库的管理工具(例如 virt-manager 和 virsh),你就可以使用它们来管理 lxc 容器。
在这篇教程中,我只介绍标准 lxc 容器管理工具的命令行操作,来教你如何在 ubuntu 下创建和管理 lxc 容器。
ubuntu 下安装 lxc
使用下面的命令安装 lxc 在用户态的工具:
然后检查当前内核是否支持 lxc。如果所有结果都是“enable”,说明内核支持:
安装完 lxc 工具后,就能看到 lxc 自动创建了一块桥接网卡(lxcbr0,可以在 /etc/lxc/default.conf 中设置)。
当你创建了 lxc 容器后,它的网口会自动链接到这个桥接网卡上,然后这个容器就能和外部世界通信了。
创建 lxc 容器
为了在指定环境下(比如 debian wheezy 64位)创建 lxc 容器,你需要一个相应的 lxc 模板。幸运的是 lxc 提供的工具集成了一整*成的 lxc 模板,你可以在 /usr/share/lxc/templates 目录下找到它们。
一个 lxc 模板实质上就是一个脚本,用于创建指定环境下的容器。当你创建 lxc 容器时,你需要用到它们。
比如你要新建 ubuntu 容器,使用下面的命令即可:
默认情况下,这个命令会创建一个最小的 ubuntu 环境,版本号与你的宿主机一致,我这边是“活泼的蝾螈”(版本号是13.10),64位。
当然你也可以创建任何你喜欢的版本,只要在命令里面加一个版本参数即可。举个例子,创建 ubuntu 14.10 的容器:
这个命令就会下载安装指定环境下的软件包,创建新容器。整个过程需要几分钟时间,与容器的类型有关,所以,你可能需要耐心等待。
下载安装完所有软件包后,lxc 容器镜像就创建完成了,你可以看到默认的登录界面。容器被放到 /var/lib/lxc/<容器名> 这个目录下,容器的根文件系统放在 /var/lib/lxc/<容器名>/rootfs 目录下。
创建过程中下载的软件包保存在 /var/cache/lxc 目录下面,当你想另外建一个一样的容器时,可以省去很多下载时间。
用下面的命令看看主机上所有的 lxc 容器:
------------------------------------
test-lxc stopped - - no
使用下面的命令启动容器。参数“-d”将容器作为后台进程打开。如果没有指定这个参数,你可以在控制台界面上直接把容器的运行程序关闭(lctt译注:ctrl+c组合键)。
打开容器后,看看状态:
-----------------------------------------
lxc running 10.0.3.55 - no
容器状态是“运行中”,容器 ip 是10.0.3.55。
你也可以看到容器的网络接口(比如我这里是 vethj06sfl)自动与 lxc 内部网桥(lxcbr0)连上了:
管理 lxc 容器
我们已经学习了怎么创建和启动 lxc 容器,现在来看看怎么玩一个正在运行着的容器。
第一步:打开容器控制台:
使用“crtl+a q”组合键退出控制台。
停止、删除容器:
$ sudo lxc-destroy -n <container-name>
复制容器,用下面的命令:
$ sudo lxc-clone -o <container-name> -n <new-container-name>
常见问题
这个小节主要介绍你们在使用 lxc 过程中碰到过的问题。
创建 lxc 容器时遇到下面的错误:
错误的原因是你运行了最新的 lxc,但是它所依赖的 libcgmanager 版本较老,两者不兼容。升级下 libcmanager 即可解决问题:
下一篇: MySQL8.0.12安装及配置