分享传递知识

Ubuntu 14.04 Server 安装LXC

在本教程中,我们将学习如何在Ubuntu-14.04 server 64bit上安装和设置LXC(Linux容器)

LXC简介(参考:https://zh.wikipedia.org/wiki/LXC)

LXC,其名称来自Linux软件容器(Linux Containers)的缩写,一种操作系统层虚拟化(Operating system–level virtualization)技术,为Linux内核容器功能的一个用户空间接口。它将应用软件系统打包成一个软件容器(Container),内含应用软件本身的代码,以及所需要的操作系统核心和库。通过统一的名字空间和共用API来分配不同软件容器的可用硬件资源,创造出应用程序的独立沙箱运行环境,使得Linux用户可以容易的创建和管理系统或应用容器。

在Linux内核中,提供了cgroups功能,来达成资源的区隔化。它同时也提供了名称空间区隔化的功能,使应用程序看到的操作系统环境被区隔成独立区间,包括进程树,网络,用户id,以及挂载的文件系统。但是cgroups并不一定需要引导任何虚拟机。

LXC利用cgroups与名称空间的功能,提供应用软件一个独立的操作系统环境。LXC不需要Hypervisor这个软件层,软件容器(Container)本身极为轻量化,提升了创建虚拟机的速度。软件Docker被用来管理LXC的环境。

但是,与某些虚拟化解决方案不同,访客系统(guest systems uses)使用主机系统的相同内核。 所有的客人(guest)将有效地共享您的主机系统的资源,如CPU,RAM,硬盘和网络等。 LXC运行在操作系统之上,允许您同时运行多个独立的发行版。

特点

LXC可以在单个主机上运行多个操作系统或应用程序实例,而不会导致CPU和内存的开销。 这节省了机架空间和电力。
在单个系统上安全且安全地运行多个应用程序,而不会相互干扰。 如果一个容器的安全性受到影响,其他容器不受影响。
容器可以用来快速建立“沙箱”环境,例如 测试Linux发行版的新版本,或为了测试/质量保证目的而模拟“干净的”环境。 将Btrfs文件系统用于容器存储库时,可以在几秒钟内克隆和生成新实例,而不需要大量额外的磁盘空间。

局限性

所有LXC容器都在主机系统的内核中运行,而不是使用不同的内核。
只允许Linux“来宾”(guest)操作系统。
LXC不是像Xen,KVM或libvirt这样的完整的虚拟化堆栈。
安全取决于主机系统。 LXC不安全。 如果您需要安全的系统,请使用KVM。

安装LXC

1) 首先更新以及打上最新的系统补丁
sudo apt-get update
sudo apt-get upgrade

2)安装LXC软件
sudo apt-get install lxc lxctl lxc-templates

3)检查LXC的环境
sudo lxc-checkconfig

你可以看到如下输出:
Kernel configuration not found at /proc/config.gz; searching…
Kernel configuration found at /boot/config-3.13.0-139-generic
— Namespaces —
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Warning: newuidmap is not setuid-root
Warning: newgidmap is not setuid-root
Network namespace: enabled
Multiple /dev/pts instances: enabled

— Control groups —
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

— Misc —
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
Bridges: enabled
Advanced netfilter: enabled
CONFIG_NF_NAT_IPV4: enabled
CONFIG_NF_NAT_IPV6: enabled
CONFIG_IP_NF_TARGET_MASQUERADE: enabled
CONFIG_IP6_NF_TARGET_MASQUERADE: enabled
CONFIG_NETFILTER_XT_TARGET_CHECKSUM: enabled
FUSE (for use with lxcfs): enabled

— Checkpoint/Restore —
checkpoint restore: enabled
CONFIG_FHANDLE: enabled
CONFIG_EVENTFD: enabled
CONFIG_EPOLL: enabled
CONFIG_UNIX_DIAG: enabled
CONFIG_INET_DIAG: enabled
CONFIG_PACKET_DIAG: enabled
CONFIG_NETLINK_DIAG: enabled
File capabilities: enabled

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

4)创建新的Linux容器(默认情况下,系统上已经安装了许多LXC模板容器。)

你可以使用如下命令来查看所有有效的容器模板:
sudo ls /usr/share/lxc/templates/

你应该看到以下可用模板列表:
lxc-alpine lxc-centos lxc-fedora lxc-oracle lxc-sshd
lxc-altlinux lxc-cirros lxc-gentoo lxc-plamo lxc-ubuntu
lxc-archlinux lxc-debian lxc-openmandriva lxc-slackware lxc-ubuntu-cloud
lxc-busybox lxc-download lxc-opensuse lxc-sparclinux

您可以使用 lxe-create 命令创建一个新的LXC容器:

例如,您可以使用ubuntu模板创建并命名为 ubuntu-container 的新容器

sudo lxc-create -n ubuntu-container -t ubuntu

其中 ubuntu-container 为你新命名的容器,ubuntu为容器模板。这个过程的时间根据你主机的性能决定。你可以看到如下输出(太多只选取一点):

Checking cache download in /var/cache/lxc/precise/rootfs-amd64 …
Installing packages in template: ssh,vim,language-pack-en,language-pack-es
Downloading ubuntu precise minimal …
I: Retrieving Release
I: Retrieving Release.gpg
I: Checking Release signature
I: Valid Release signature (key id 630239CC130E1A7FD81A27B140976EAF437D05B5)
I: Retrieving Packages
I: Validating Packages
I: Retrieving Packages
I: Validating Packages
I: Resolving dependencies of required packages…
I: Resolving dependencies of base packages…
……

运行命令结束后,你会看到新的Ubuntu容器已经创建。
默认的用户名是ubuntu和密码ubuntu。
创建LXC容器后,可以通过运行以下命令轻松启动它:

sudo lxc-start -n ubuntu-container -d

你可以使用以下命令检查正在运行的容器的状态:

sudo lxc-ls –fancy

最后,你可以使用lxc-console命令访问您的容器:
sudo lxc-console -n ubuntu-container

在给出用户名和密码后,上面的命令会进入登录提示符,你有一个常规的bash提示符,你可以在主机上做几乎所有的事情。

登录后,您应该看到以下输出:
Ubuntu 14.04.5 LTS ubuntu-container tty1

ubuntu-container login: ubuntu
Password:
Last login: Thu Jan 11 16:09:07 HKT 2018 on lxc/tty1
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-139-generic x86_64)

* Documentation: https://help.ubuntu.com/
ubuntu@ubuntu-container:~$

完成在容器的操作后,您可以输入exit退出其控制台,返回到登录界面

并通过在键盘上输入Ctrl-A和Q来返回主机。

您可以使用lxc-info命令查看运行容器的完整详细信息:

sudo lxc-info -n ubuntu-container

您也可以使用以下命令停止正在运行的容器:

sudo lxc-stop -n ubuntu-container

现在,使用以下命令检查Ubuntu容器的状态:

sudo lxc-ls –fancy ubuntu-container

5)开机自动启动容器

默认情况下,容器在重启后不会启动。 如果您想要在系统重启后自动启动容器,则需要在
/var/lib/lxc/ubuntu-container/config 中添加如下2行:
lxc.start.auto = 1
lxc.start.delay = 5

保存并关闭文件。
使用上述参数,容器将在主机服务器启动时启动,然后主机系统将等待5秒钟启动其他容器。

现在运行lxc-ls -fancy命令来检查你的容器是否设置为自动启动:
sudo lxc-ls –fancy

如下输出(AUTOSTART 默认为0):
NAME STATE AUTOSTART GROUPS IPV4 IPV6
ubuntu-container STOPPED 1 – – –

6)克隆容器
克隆容器与克隆虚拟机具有相同的意图和目的。 克隆允许您制作一个容器的精确副本并保存以备后用。 假设你想为开发目的设置一个容器,你必须安装一堆软件包并运行一些配置命令来使其正确。 当你的容器已经准备就绪时,你可以克隆它,这样下一次你不必再重做一切。

例如,要从现有容器ubuntu-container中克隆名为ubuntu-container2的新容器,首先需要在运行时停止它:

sudo lxc-stop -n ubuntu-container

然后你可以将原始容器复制到一个名为ubuntu-container2的新容器中:

sudo lxc-clone ubuntu-container ubuntu-container2

这个文件保存的路径:
/var/lib/lxc# ls
ubuntu-container ubuntu-container2

7)拍一个容器的快照
如果要获取容器ubuntu-container的快照,请输入以下命令:

sudo lxc-stop -n ubuntu-container
sudo lxc-snapshot -n ubuntu-container

你应该看到以下输出:
lxc_container: lxccontainer.c: lxcapi_snapshot: 2879 Snapshot of directory-backed container requested.
lxc_container: lxccontainer.c: lxcapi_snapshot: 2880 Making a copy-clone. If you do want snapshots, then
lxc_container: lxccontainer.c: lxcapi_snapshot: 2881 please create an aufs or overlayfs clone first, snapshot that
lxc_container: lxccontainer.c: lxcapi_snapshot: 2882 and keep the original container pristine.

保存的目录是(你快照的哪一个容器,就在/var/lib/lxc/你的容器名/snaps/):
/var/lib/lxc/ubuntu-container/snaps

你可以查看到快照(sudo 或root权限):
/var/lib/lxc/ubuntu-container/snaps# ls
snap0

您可以使用以下命令从快照中恢复容器:
sudo lxc-snapshot -n ubuntu-container -r snap0

8)删除容器
您也可以从系统中删除容器以释放磁盘空间。首先,您将需要使用lxc-stop命令停止正在运行的容器:
sudo lxc-stop -n ubuntu-container

一旦容器已经停止,并且你确定没有数据保留在容器上,你可以使用lxc-destroy命令删除容器:
sudo lxc-destroy -n ubuntu-container

9)通过ssh访问你的容器

要做到这一点,您需要在LXC的容器,本例子是ubuntu-container上打开/etc/ssh/sshd_config,并将SSH的侦听端口更改为与主机服务器不同的端口。

首先,你将需要 lxc-console 命令进入容器:

sudo lxc-console -n ubuntu-container

然后用 sudo vi /etc/ssh/sshd_config 把容器的ssh端口改为25001, 如下面所示:

# What ports, IPs and protocols we listen for
Port 25001

然后退出容器,进入LXC的主机服务器上用root或sudo 权限:

iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 25001 -j DNAT –to 10.0.3.188:25001

然后保存设置需要安装新的软件 iptables-persistent:

(删除iptables 规则:使用命令 iptables -t nat –line-numbers -L  查看规则所在的行号,
然后使用命令删除:iptables -t nat -D PREROUTING 2  # 这里的2指 规则所在的行)

sudo apt-get update
sudo apt-get install iptables-persistent

保存iptables 规则:
sudo invoke-rc.d iptables-persistent save

然后你就可以的电脑上用ssh连接容器:

ssh -p 25001 ubuntu@172.16.228.128

其中:10.0.3.188 为你容器的地址,LXC服务器的地址为:172.16.228.128

10)为你的容器添加双网卡

要做到这一点,你在LXC服务器上 sudo vi /var/lib/lxc/ubuntu-container/config 中添加:

# Network configuration
lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:36:0a:79

# Xinji add mac 地址你随便修改几个数值就可以
lxc.network.type = veth
lxc.network.link = lxcbr0
lxc.network.flags = up
lxc.network.hwaddr = 00:16:3e:36:0a:80

然后重启你的容器,然后进入你的容器,在 sudo vi /etc/network/interfaces 中添加:

auto eth1
iface eth1 inet dhcp

然后重启你的容器,然后进入你的容器,你就可以看到双网卡了。

xinji使用Google翻译以及自己的理解整理,想看原文的,请点击下方链接。

原文参看:https://hostpresto.com/community/tutorials/install-and-setup-lxc-on-ubuntu-14-04/

长空雪


关注公众号『长空雪』

搬孕工 分享孕妇写真 关注我微信公众号 长空雪 “情而不色”是我公众号的风格

赞(0) 打赏

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏