容器化操作系统概览


【编者的话】随着容器技术,特别是Docker的兴起,许多新的专门运行容器的Linux发行版本也出现了。和传统的操作系统对比,使用这样的系统有一些优势所在,这篇文章我们来对比下主流的5款容器操作系统发行版本。

docker-os-vergleich.jpg


随着容器技术,特别是Docker的兴起,许多新的专门运行容器的Linux发行版本也出现了。和传统的操作系统对比,使用这样的系统有一些优势所在,这篇文章我们来对比下主流的5款容器操作系统发行版本。

概览

使用专门为容器设计的Linux发行版有如下优势:
  • 体积很小,你只需要一个最小化的OS
  • 最小化工具的开销
  • 自动更新
  • 大多数默认是集群模式
  • 自动运行Docker服务
  • 根文件系统只读
  • 可回滚自动更新(双分区更新模式)
  • 稳定性和安全性提升


我选择5个不同的发行版本来做个对比:

每个发行版本都用cloud-init来初始化运实例,他们又支持不同的特性,所以让我们研究下他们的cloud-init。

CoreOS

CoreOS是一个新的Linux发行版本,它被重新设计来提供现代基础设施。影响CoreOS的策略和架构被用于像Google、Facebook和Twitter这样的公司来运行其服务。

默认CoreOS配置了一些工具用来运行容器而且是分布式的。容器运行环境的关键特性是自动在CoreOS的机器上配置。而且CoreOS提供了自动系统升级的功能,这意味着你不用担心旧版本的问题。

在CoreOS上你可以配合fleet来使用Docker。 Fleet是一个分布式的init系统,它可将整个集群看作是一个init系统。你可以通过扩展后的systemd unit文件来启动fleet unit. 有了fleet,你可以运维分布式的容器应用。

运行CoreOS的主要优势是etcd。etcd是一个分布式的key/value存储,它再很多项目中都有应用,像Kubernetes、Cloud Foundry。你可以用etcd来做服务发现甚至更多。而且,主流的云服务商都提供了CoreOS的支持。

Project Atomic

Project Atomic通过可靠的操作系统平台集成了一些基于容器应用和服务部署的工具和模式来提供一种端到端的服务架构,他是现代化的,稳定的,而且安全的。

对于Redhat家族成员 Fedora、RHEL和CentOS都有各自独立的Atomic版本。如果你对其中一个比较熟悉,你也可以将其作为Atomic主机。Atomic Host ReadHat用rpm-ostree替换掉yum用于管理OS包,而且具有自动更新的功能,这意味着你可以回退到之前的版本。而且你也可以通过rpm-ostree-toolbox来创建你自己的镜像。

Project Atomic的一大优势是RedHat成熟的环境。你可以在Atomic主机上使用像SELinux、Kickstart、Anaconda等工具

我已经试过他们的快速上手教程, 但是由于文档中用了比较旧的Atomic版本所以没能跑起来。我下载了Fedora Atomic,然后成功的将其跑起来。

Ubuntu Snappy

Snappy Ubuntu Core是一个Ubuntu的衍生版本 --- 一个拥有和目前Ubuntu一样的库的最小化的服务器镜像,但是应用通过一种更简单的机制来提供。这种方式更快,更可靠,而且让我们为应用和用户提供更好的安全保障 --- 这就是我们为什么叫它们『Snappy』应用。

Ubuntu Snappy支持Canonical的AppArmor内核安全系统来提供友好的安全方案。这意味着Snappy可以让你完全隔离两个应用。Snappy可以很容易的通过像Docker一样的框架扩展 --- 给你的Snappy添加了框架之后你就可以在其上运行应用了。
ubuntu-snappy.png

在Snappy里所有的系统和应用文件都保存在单独的只读的镜像里。这意味着更新Snappy会非常容易和可预知。通过增量管理的机制,Snappy也可以保证下载的东西最小化。当然Snappy也提供系统和应用更新的回滚机制。

Snappy默认不包含Docker,但是你可以很方便的安装Docker来作为一种框架运行应用 --- 对于Docker容器的情况。 安装非常简单:
snappy install docker

当我在Snappy上尝试Docker的时候,我因为 permission denied 错误没能运行起来任何容器, 这个bug已经提交到 launchpad

RancherOS

我们启动RancherOS项目,我们构建了一个最小化的Linux版本用来完美地运行Docker容器。我们想直接在内核之上运行Docker,然后将所有的用户空间内的服务作为独立的容器运行。通过这样,RancherOS就不需要额外的包管理工具的机制。

简单来说RancherOS就是由容器构成的操作系统。它将Docker作为PID 1来运行,这就意味着Docker是内核启动的第一个进程。现在另一个有意思的事情是RancherOS运行了两个Docker服务,一个给系统(系统Docker),一个给用户(用户Docker),用户Docker运行在系统Docker之中。系统Docker负责初始化所有系统服务,包括udev、DHCP和终端。所以RancherOS用Docker作为init系统来以容器的方式管理所有的系统服务,而不是systemd、sysvinit或者upstart。
rancheros.png

RancherOS使用两个Docker服务的理由是即使你不小心停止或者删掉了所有的容器,你的系统依然能正常运行。

由于你把所有的东西都通过Docker容器来运行,你会拥有最新版的Docker。你可以通过启动额外的容器来扩展RancherOS。比如,你可以运行你自己的console容器来获取你最喜欢的console。由于你需要监控的安全漏洞的更少了,补丁自然打的少了,稳定性也提高了。

由于所有的系统服务都是由容器提供,你无需像apt-get或者yum的包管理工具。即便内核和initrd不是容器,RancherOS也使用Docker的打包和发布机制来分发内核和initrd更新。

RancherOS可以作为嵌入式系统的一个备选方案。

VMware - Photon

Photon是一个最小化容器化Host, 它被设计得非常轻量而且能在VMware的平台上快速启动。Photon的设计初衷是在虚拟化环境中运行容器应用。

VMware加入到为容器创建新的发行版本的大潮中。VMware Photon是一个专门为vSphere优化的最小化Linux容器发行版。Photon支持常见的容器,包括Docker、Rocket和Pivotal Garden容器规范(基于Vmware Warden)。另外,WMware Photon自带了一个高效的生命周期管理工具,其中包括了兼容yum的包管理工具。
photon.png

Photon最大的优势来自于VMware的Lightwave. Lightwave提供了集中化的认证和授权身份管理。 它支持很多开放标准,像LDAP、Kerberos、 SAML和OAuth2.0。简单来说,Lightwave给你的环境带来了一层新的容器安全。在上边的图表中你可以看到Lightwave是怎么提供集中化的认证和授权管理的。

对比表

5.png

结论

正如计算机科学行业里的道理一样,从来也没有万能膏药。你最好的选择通常由你的项目决定 - 如果你有greenfield项目你可能用新技术, 如果你有brownfield项目你可能需要可靠的技术。这并不意味着两种技术不能同时用。从另一个方面讲,你需要知道自己需要什么,你的团队对什么熟悉。而且不要忘了这些技术仍然处于起步阶段,仍然有一些在生产环境不容发生的问题。此外,这些新项目仍然在发展阶段,变化还比较大。

时间会告诉我们这些新的操作系统会如何影响服务器/云/数据中心的世界。我认为稳定的系统和这些新系统会依赖于你的环境而共存。

总之,你可以说你有很多选择来运行你的Docker基础设施。而且不要忘了:你也可以在传统系统上运行你的容器 --- 不需要立马就切换所有的东西。

原文链接:Docker: A Comparison of Minimalistic Operating Systems(翻译:张向军 校对:宋喻)

1 个评论

好文,赞

要回复文章请先登录注册