教你在 Ubuntu 上使用 LXC 容器

教你在 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 在用户态的工具:


  1. $ sudo apt-get install lxc

然后检查当前内核是否支持 LXC。如果所有结果都是“enable”,说明内核支持:


  1. $ lxc-checkconfig

安装完 LXC 工具后,就能看到 LXC 自动创建了一块桥接网卡(lxcbr0,可以在 /etc/lxc/default.conf 中设置)。

当你创建了 LXC 容器后,它的网口会自动链接到这个桥接网卡上,然后这个容器就能和外部世界通信了。

创建 LXC 容器

为了在指定环境下(比如 Debian Wheezy 64位)创建 LXC 容器,你需要一个相应的 LXC 模板。幸运的是 LXC 提供的工具集成了一整套现成的 LXC 模板,你可以在 /usr/share/lxc/templates 目录下找到它们。


  1. $ ls /usr/share/lxc/templates

一个 LXC 模板实质上就是一个脚本,用于创建指定环境下的容器。当你创建 LXC 容器时,你需要用到它们。

比如你要新建 Ubuntu 容器,使用下面的命令即可:


  1. $ sudo lxc-create -n <container-name> -t ubuntu

默认情况下,这个命令会创建一个最小的 Ubuntu 环境,版本号与你的宿主机一致,我这边是“活泼的蝾螈”(版本号是13.10),64位。

当然你也可以创建任何你喜欢的版本,只要在命令里面加一个版本参数即可。举个例子,创建 Ubuntu 14.10 的容器:


  1. $ sudo lxc-create -n <container-name> -t ubuntu -- --release utopic

这个命令就会下载安装指定环境下的软件包,创建新容器。整个过程需要几分钟时间,与容器的类型有关,所以,你可能需要耐心等待。

下载安装完所有软件包后,LXC 容器镜像就创建完成了,你可以看到默认的登录界面。容器被放到 /var/lib/lxc/<容器名> 这个目录下,容器的根文件系统放在 /var/lib/lxc/<容器名>/rootfs 目录下。

创建过程中下载的软件包保存在 /var/cache/lxc 目录下面,当你想另外建一个一样的容器时,可以省去很多下载时间。

用下面的命令看看主机上所有的 LXC 容器:


  1. $ sudo lxc-ls --fancy


  1. NAME STATE IPV4 IPV6 AUTOSTART
  2. ------------------------------------
  3. test-lxc STOPPED - - NO

使用下面的命令启动容器。参数“-d”将容器作为后台进程打开。如果没有指定这个参数,你可以在控制台界面上直接把容器的运行程序关闭(LCTT译注:Ctrl+C组合键)。


  1. $ sudo lxc-start -n <container-name> -d

打开容器后,看看状态:


  1. $ sudo lxc-ls --fancy


  1. NAME STATE IPV4 IPV6 AUTOSTART
  2. -----------------------------------------
  3. lxc RUNNING 10.0.3.55 - NO

容器状态是“运行中”,容器 IP 是10.0.3.55。

你也可以看到容器的网络接口(比如我这里是 vethJ06SFL)自动与 LXC 内部网桥(lxcbr0)连上了:


  1. $ brctl show lxcbr0

管理 LXC 容器

我们已经学习了怎么创建和启动 LXC 容器,现在来看看怎么玩一个正在运行着的容器。

第一步:打开容器控制台:


  1. $ sudo lxc-console -n <container-name>

使用“Crtl+a q”组合键退出控制台。

停止、删除容器:


  1. $ sudo lxc-stop -n <container-name>
  2. $ sudo lxc-destroy -n <container-name>

复制容器,用下面的命令:


  1. $ sudo lxc-stop -n <container-name>
  2. $ sudo lxc-clone -o <container-name> -n <new-container-name>

常见问题

这个小节主要介绍你们在使用 LXC 过程中碰到过的问题。

  1. 创建 LXC 容器时遇到下面的错误:

    $ sudo lxc-create -n test-lxc -t ubuntu



  1. lxc-create: symbol lookup error: /usr/lib/x86_64-linux-gnu/liblxc.so.1: undefined symbol: cgmanager_get_pid_cgroup_abs_sync

错误的原因是你运行了最新的 LXC,但是它所依赖的 libcgmanager 版本较老,两者不兼容。升级下 libcmanager 即可解决问题:


  1. $ sudo apt-get install libcgmanager0

原文发布时间:2014-11-27

本文来自云栖合作伙伴“linux中国”

时间: 2024-08-22 23:29:43

教你在 Ubuntu 上使用 LXC 容器的相关文章

在Ubuntu系统中使用LXC容器的教程

  使用"容器"来保证主机环境的安全性,这个概念早在十年前就已经存在(例如 FreeBSD 的 jail 虚拟化技术),但是直到最近,随着部署云架构需求越来越多,像 LXC 和 Docker 这种 Linux 下的容器才成为被关注的焦点.当然,由于主流厂商(云服务商如亚马逊主推 AWS,微软主推 Azure;发行版如红帽.Ubuntu等)组成的强大靠山,Docker 已经被放在媒体的聚光灯下面,其实,Docker 里面所谓的"容器"技术是由 LXC 提供的. 你只是

教你在 Debian 和 Ubuntu 上升级 MySQL

系统管理员的日常工作之一就是升级服务,为服务打上补丁包或升级一些花哨的功能.2013年初,最新的 MySQL 5.6发布,目标是提供更好的性能和扩展能力.如果你对此有点兴趣,倒是可以看看我写的这篇 如何在 Debian 和 Ubuntu 上升级 MySQL. 在这篇教程中,我会假设你已经通过 apt-get 安装了 MySQL.写这篇文章的时候,大部分 Linux 发行版上部署的都是 MySQL 5.5.这里我将向你们介绍如何从 MySQL 5.5升级到5.6. 步骤1:备份 MySQL 配置文

如何在 Ubuntu 上搭建网桥

顾名思义,网桥的作用是通过物理接口连接内部和外部网络.对于虚拟端口或者 LXC/KVM/Xen/容器来说,这非常有用.网桥虚拟端口看起来是网络上的一个常规设备.在这个教程中,我将会介绍如何在 Ubuntu 服务器上通过 bridge-utils (brctl) 命令行来配置 Linux 网桥. 网桥化的网络示例 图 01: Kvm/Xen/LXC 容器网桥示例 (br0) 在这个例子中,eth0 和 eth1 是物理网络接口.eth0 连接着局域网,eth1 连接着上游路由器和互联网. 安装 b

Ubuntu 上搭建网桥的方法详解

作为一个 Ubuntu 16.04 LTS 的初学者.如何在 Ubuntu 14.04 和 16.04 的主机上搭建网桥呢? 顾名思义,网桥的作用是通过物理接口连接内部和外部网络.对于虚拟端口或者 LXC/KVM/Xen/容器来说,这非常有用.网桥虚拟端口看起来是网络上的一个常规设备.在这个教程中,我将会介绍如何在 Ubuntu 服务器上通过 bridge-utils (brctl) 命令行来配置 Linux 网桥. 网桥化的网络示例 在这个例子中,eth0 和 eth1 是物理网络接口.eth

Linux 有问必答:如何在 Ubuntu 上配置网桥

Linux 有问必答:如何在 Ubuntu 上配置网桥 Question: 我需要在我的Ubuntu主机上建立一个Linux网桥,共享一个网卡给其他一些虚拟主机或在主机上创建的容器.我目前正在Ubuntu上使用网络管理器(Network Manager),所以最好>能使用网络管理器来配置一个网桥.我该怎么做? 网桥是一个硬件装备,用来将两个或多个数据链路层(OSI七层模型中第二层)互联,以使得不同网段上的网络设备可以互相访问.当你想要互联一个主机里的多个虚拟机器或者以太接口时,就需要在Linux

在ubuntu上部署Kubernetes管理docker集群示例

本文通过实际操作来演示Kubernetes的使用,因为环境有限,集群部署在本地3个ubuntu上,主要包括如下内容: 部署环境介绍,以及Kubernetes集群逻辑架构 安装部署Open vSwitch跨机器容器通信工具 安装部署Etcd和Kubernetes的各大组件 演示Kubernetes管理容器和服务 关于 Kubernetes 系统架构及组件介绍见这里. 1. 部署环境及架构 vSphere: 5.1 操作系统: ubuntu 14.04 x86_64 Open vSwith版本: 2

手把手教你在 CoreOS 上构建你的第一个应用

手把手教你在 CoreOS 上构建你的第一个应用 [编者的话]作者以自己的Mac笔记本为例,介绍了如何在CoreOS上安装WordPress应用,没有过多的理论解释,全部是实战类教程,推荐想快速了解CoreOS的同学阅读. 我相信你一定听说过CoreOS,但是你是否真正在它上面部署过一个应用了?可能很多人都没有部署过.在CoreOS上构建一个应用是非常困难且令人沮丧的(译者注:frustrating,用了这个词,看来确实难).因为文档比较散乱,并且你不得不在开始之前学习所有相关的技术,包括etc

游戏玩家的福音:在 Ubuntu 上安装开源 VoIP 应用 Mumble

游戏玩家的福音:在 Ubuntu 上安装开源 VoIP 应用 Mumble Mumble是一个自由开源的VoIP应用,在新的 BSD 许可证下发布,主要面向的用户群体是游戏玩家.运行起来类似于TeamSpeak和Ventrilo,用户通过连接到同一个服务器来实现相互通讯. Mumble提供了如下的漂亮特性: 低延迟,这点对游戏相当重要 提供游戏中的可视插件,通过它你可以知道是谁正在和你通话并定位他们的位置 交谈内容经过加密的,能够保护你的隐私和安全 界面简单易于上手 稳定高效的使用你的服务器资源

你有想过在Windows上体验Linux容器吗?

微软于本周三描述了它的下一个主要版本Windows Server 2016将如何改进运行容器. 下一个主要版本的Windows Server 2016,版本1709,预计将在今年秋天(也许是9月或10月)推行.它将有能力在同一台机器上运行Linux容器或Windows容器.这个功能是通过Docker与ARM.惠普.IBM.英特尔.微软和Linux基金会合作开发的开源LinuxKit工具实现的. Docker Linux和Ubuntu Linux容器 本周,Docker宣布了在Windows Se