先决条件:
- 之前我说过chroot jail和使用cgroups进行资源限制.
如果你还没有阅读它们, 那么我强烈建议你先阅读它们, 然后再继续。 - 参考docker团队非常好的演讲。
这将刷新上面学到的一些概念。该视频充当本文与上述早期文章中讨论的主题之间的桥梁。这说明了容器如何有用以及内部如何使用chroot和cgroup。
操作系统级虚拟化是一种服务器虚拟化方法, 其中操作系统的内核允许存在多个隔离的用户空间实例, 而不仅仅是一个实例。从其所有者和用户的角度来看, 此类实例有时被称为容器, 软件容器, 虚拟化引擎(VE)或 jail(FreeBSD jail或chroot jail), 看起来和感觉上像是一台真正的服务器。
上面的定义总结了有关容器的广泛概念, 但更准确地说, 传统的虚拟机使用了一种运行在内核之上的称为虚拟机监控程序的东西。该虚拟机监控程序通过监视其资源使用情况和访问模式, 为其上运行的应用程序提供虚拟化。这会导致大量开销, 从而导致不必要的性能损失。另一方面, 操作系统级虚拟化的工作方式有所不同。它使用名称空间和cgroup来限制应用程序的功能, 包括资源的使用。这是linux内核提供的功能。这几乎没有开销。
文章图片
该方法非常有效, Docker可以在内部使用这些容器来提供隔离的环境, 这对于部署多个集成系统非常有用。他们甚至必须创建自己的容器库。 Google在共享硬件上的容器上运行自己的服务。
安装 要在Ubuntu中安装lxc,
$ sudo apt-get install lxc lxctl lxc-templates
该软件包安装了LXC的要求, 一些模板, 并且还设置了容器的网络结构。
运行lxc-checkconfig以检查内核配置是否准备就绪。
$ sudo lxc-checkconfig
Kernel configuration not found at /proc/config.gz;
searching...
Kernel configuration found at /boot/config-4.4.0-24-generic
--- Namespaces ---
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
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
注意 :在引导新内核之前, 你可以检查其配置用法:CONFIG = / path / to / config / usr / bin / lxc-checkconfig
你还应该看到类似于上面的输出。
lxc提供了许多现成的模板, 这些模板对于快速部署确实很有帮助。
$ ls -l /usr/share/lxc/templates/
total 404
-rwxr-xr-x 1 root root 12973 May 18 14:48 lxc-alpine
-rwxr-xr-x 1 root root 13713 May 18 14:48 lxc-altlinux
-rwxr-xr-x 1 root root 11090 May 18 14:48 lxc-archlinux
-rwxr-xr-x 1 root root 12159 May 18 14:48 lxc-busybox
-rwxr-xr-x 1 root root 29503 May 18 14:48 lxc-centos
-rwxr-xr-x 1 root root 10374 May 18 14:48 lxc-cirros
-rwxr-xr-x 1 root root 19732 May 18 14:48 lxc-debian
-rwxr-xr-x 1 root root 17890 May 18 14:48 lxc-download
-rwxr-xr-x 1 root root 49600 May 18 14:48 lxc-fedora
-rwxr-xr-x 1 root root 28384 May 18 14:48 lxc-gentoo
-rwxr-xr-x 1 root root 13868 May 18 14:48 lxc-openmandriva
-rwxr-xr-x 1 root root 15932 May 18 14:48 lxc-opensuse
-rwxr-xr-x 1 root root 41720 May 18 14:48 lxc-oracle
-rwxr-xr-x 1 root root 11205 May 18 14:48 lxc-plamo
-rwxr-xr-x 1 root root 19250 May 18 14:48 lxc-slackware
-rwxr-xr-x 1 root root 26862 May 18 14:48 lxc-sparclinux
-rwxr-xr-x 1 root root6862 May 18 14:48 lxc-sshd
-rwxr-xr-x 1 root root 25602 May 18 14:48 lxc-ubuntu
-rwxr-xr-x 1 root root 11439 May 18 14:48 lxc-ubuntu-cloud
我们首先用“ubuntu”模板创建一个名为“my_container”的新容器。
这将需要一些时间, 并为你创建一个容器。是!就这么简单。
完成后, 最后几行显示容器根用户的密码。看起来与此类似,
$ sudo lxc-create -n my_container -t ubuntu
.....
.....
##
# The default user is 'ubuntu' with password 'ubuntu'!
# Use the 'sudo' command to run tasks as root in the container.
##
我们可以使用lxc-ls检查容器的状态。这将显示容器处于停止状态。
$ sudo lxc-ls --fancy
NAMESTATEIPV4IPV6AUTOSTART
----------------------------------------------
my_containerSTOPPED--NO
现在要启动容器, 请运行lxc-start。 -d参数创建一个守护程序。
$ sudo lxc-start -n my_container -d
使用lxc-ls检查容器的状态以验证其运行情况。我们可以使用lxc-console访问控制台。使用我们上面收到的凭据来访问控制台。
$ sudo lxc-console -n my_container
登录后, 在容器上运行以下命令,
$ top
然后在host-pc上运行以下命令以查看正在运行的进程的列表。
$ ps auxf
在某个地方, 你会发现一个与此相似的进程树,
文章图片
令人惊讶的是, 但是容器上的所有进程只是主机上的简单进程。重要的是所有这些都由内核隔离和监视。因此, 你可以将它们视为主机PC上的简单进程, 甚至可以杀死它们(仅当你具有足够的特权时)
你可以通过键入以下内容退出控制台并返回到主机Ctrl-A其次是问.
要获取有关正在运行的容器使用的更多信息,
$ sudo lxc-info -n my_container
你可以通过直接从主机访问此容器的根文件系统。你将需要root权限才能这样做。
$ sudo su
$ cd /var/lib/lxc/my_container/rootfs
而已。现在, 这就像一个全新的操作系统。你可以在此容器上运行任何服务。
将容器视为独立的操作系统, 可以在其中运行任何所需的操作。唯一使特别的是, 所有容器都在同一硬件上运行。因此, 实际上, 公司/机构购买重型共享计算机, 然后根据所需的多种服务来部署具有资源限制的容器。这使得它具有可伸缩性且易于管理。
要停止容器运行,
$ sudo lxc-stop -n my_container
要删除容器使用,
$ sudo lxc-destroy -n my_container
注意:
lxc提供了一个包装器和易于使用的API来使用内核功能。它在任何意义上都不等同于容器。
阅读文档以获取有关容器工作的更多详细信息。有很多命令非常有用, 可以使设置容器更加容易。
参考文献:
https://wiki.archlinux.org/index.php/Linux_Containers
https://linuxcontainers.org/lxc/introduction/
http://www.ubuntu.com/cloud/lxd
【Linux虚拟化(Linux容器(lxc)详细指南)】如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请写评论。
推荐阅读
- jQuery.fn.extend()方法用法示例介绍
- 如何使用Python读取、写入和解析JSON(完整指南)
- 解释JavaScript中for(.. in)和for(.. of)循环语句之间的区别()
- SPARK 应用如何快速应对 LOG4J 的系列安全漏洞
- Linux之date命令
- 爆测一周!22年必看最细致代码托管工具测评
- #yyds干货盘点#动力节点王鹤Springboot教程笔记SpringBoot集成Dubbo
- 从0开始,15分钟,完成OpenHarmony构建编译体验
- yum及dnf仓库的实现及管理软件详解