Docker 1.3 发布:增加安全机制及进程注入

  • 张天雷

2014 年 10 月 18 日

话题:语言 & 开发架构

10 月 16 日,Docker 发布了1.3 版本。历经 45 个贡献者的多达 750 次代码提交,这次发布的版本除了进行以往发布例行的质量改善以外,还增加了不少有用的新功能,如数字签名机制、进程注入、更好的镜像创建方式以及安全选项,下面对这几个功能进行逐一介绍:

数字签名机制

在这个版本中,Docker 引擎将使用数字签名机制自动分析所有官方 Docker 镜像库(Repo)的来源和完整性。这种机制可以发现官方镜像库可能存在的入侵,从一定程度上保证镜像使用过程中的可信度。Docker 团队表示,该机制只是接下来要发布的众多新特性之一,更多的还包括镜像分发商和用户经常会用到的身份验证,PKI 管理以及镜像加密等。作为首次发布,该特性还处于继续研发的阶段,目前如果 Docker 引擎发现使用的镜像被入侵,只会抛出一个警告,而不是阻止用户继续使用该镜像。在未来的版本中,该特性将会被进一步增强,严格过滤恶意镜像。

Docker exec:进程注入

在开发基于 Docker 的应用过程中,开发者可能需要运行时查看应用。诸如 nsinit 和 nsenter 这样的工具,在过去的开发过程中,在一定程度上起到了作用,但是这些都是第三方工具,需要开发者自己去寻找、学习和管理。本次发布中,有了一个新的命令 exec,可以让开发者轻松在 Docker 容器里通过 API 和命令行工具生成进程,比如:

$ docker exec ubuntu_bash -it bash

就会在 ubuntu_bash 这个容器中运行 bash。

进一步来讲,通过提供 exec 命令,开发者就拥有了更灵活的应用开发调试助手。

Docker create:更加细化的镜像创建方式

之前开发者都是使用 run 命令来创建容器,并在其中运行应用。随着 Docker 的广泛应用,越来越多的开发者要求对容器的创建有更加细致的控制,本次发布的 create 命令就是解决这个需求的。通过 run 命令,开发者可以创建但是不去运行容器,稍后可以使用 start 和 stop 命令来控制容器的生命周期。

安全选项

可能国内很多同仁所关心的就是这个特性了,Docker 命令行工具新增加了一个参数,--security-opt,为用户设定个性化的 SELinux 和 AppArmor 标签和属性。比如,需要设置一个安全选项,让容器只能监听 Apache 端口,假设这个策略命名为 svirt_apache,那么就可以通过如下命令完成这个需求:

$ docker run --security-opt label:type:svirt_apache -i -t centos \ bash

这样做的好处就是,Docker 容器不一定要运行在支持 SELinux 的内核上,也无需用—privileged 参数运行,避免了很多安全隐患。

此外本次发布还有 Mac OS X 下的共享目录工具 boot2docker。


感谢郭蕾对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

语言 & 开发架构