返回 登录
0

不用root权限也能运行Docker——细数Docker 1.10的新功能

  Docker 1.10增加了新功能,从这个版本以后,用户在Linux上跑Docker时都不必再以root权限运行了。

  作为容器化产品家族的最新成员,Docker 1.10解决了长期以来一直困扰Docker的一个重大问题。

  到目前为止,所有容器都只能在Docker daemon下以root权限运行,而且各种潜在的安全问题多得要命,看得人头皮发麻。针对这一问题,Docker 1.10推出了用户命名空间功能。其实该功能在1.9版本中已经有了,不过那时还处在尝试阶段,到1.10版以后才正式面向广大用户开放这个功能,当然,1.10版在其他方面也做了改进。下面我们就来看看Docker 1.10都有哪些新亮点。

安全的命名空间
  通过命名空间,Docker 1.10将Docker daemon和容器区别开来,对二者的权限分别加以处理,同时为各个容器分配相应的权限等级。在1.10下,Docker daemon仍然要取得主机的root权限,但容器就可以不用了。

  不过,用户命名空间功能目前还只能在Linux平台上使用,Docker安全部门总监Nathan McCauley也承认这一点。Nathan表示将来Docker会把Windows自有的隔离机制集成到Docker中,而且Docker会实现对所有平台隔离机制的支持。

  作为对用户命名空间的补充,Docker还为提供了插件机制以满足用户在授权方面的需求。管理员可以针对自身所在的机构制定相应规则,Docker会按照这些规则来处理机构内部用户的访问权限。此外,Docker也可以依照设置好的规则来处理各个容器发送的系统调用请求(包括允许调用、禁止调用和跟踪监测三种模式)。

  在之前的版本中,由于Docker只能以root权限运行,所以运行Docker总是会遇到大量的潜在安全问题,这一问题给Docker造成了长期的困扰。对此很多人都颇有微词,比如说CoreOS就一直在个问题上强烈抨击Docker,而且CoreOS还推出了rkt container runtime 1.0,在该版本下,容器不必取得root权限也可以运行。(在rkt环境下可以直接运行Docker容器。)

  其实Docker早就意识到让容器以root权限运行会造成很多问题,为了弥补这个缺陷,Docker花费了大量的精力,研发出了命名空间机制,并先后经历了好几次修改才最终推出1.10这个稳定版本。目前CoreOS旗下的rkt也可以支持该功能,不过还处在尝试阶段。

对网络功能的重构
  除了命名空间以外,Docker 1.10在另外两个问题上也有很大的改进。其中一个是Docker Compose,Docker Compose是Docker的原生容器管理工具,通过它用户就可以在主机上创建多个容器。在Docker 1.10中Docker Compose采用了新的定义规则,可以通过多种方式对容器之间的网络连接加以设置,而Docker的网络连接子系统也为这项功能提供了支持。在创建包含多个容器的应用时,新版的Docker Compose可以大大减少我们的工作量,令主机和容器的设置变得更为简单。

  此外,Docker的网络性能也得到了改善。1.10版本为Docker daemon设置了专门的DNS客户端,这样,Docker就可以自动完成容器发现功能,不用再像以前一样靠/etc/hosts命令来执行发现功能。如有必要,用户也可以向外部服务器发送DNS查询请求。

  同时,Docker 1.10还针对内网环境提供了一项新功能,用户可以通过该功能对容器之间的网络通信加以限定,只需输入一行命令,即可将所有容器的通信范围都限定在用户私有的子网域内。

  Docker 1.10还引入了第三方解决方案,一举搞定了另外一个长期存在的问题——网络连接问题。Docker对这次的改进非常看好,还放出豪言称新版的网络拓扑功能无需经过任何改动即可用来开发基于Docker的应用,还可以直接部署在产品环境中。在以前,Docker因为一直沿用老旧的网络模型而颇受局限,在这一点上没少遭人诟病,随着1.10版的推出,这种尴尬的局面也彻底终结了。

评论