【IT168 评论】最近,我们可能经常会听到一种说法"Docker正在彻底改变IT!"这种说法是否存在炒作嫌疑呢?Docker对于现有格局的破坏性到底在哪里?Docker和虚拟机之间有什么区别?Docker真正的附加价值在哪里?
我们在前面一篇文章中与Docker大牛Chanwit Kaewkasi探讨了这些问题,《Docker正在彻底改变IT?是炒作还是事实》。
一家之言难以求实,所以我们又找到了Nicolas De Loof来和我们共同探讨这些问题。
问:您是如何与Docker结缘的呢?
Nicolas De Loof:我工作的公司 CloudBees是dotCloud的竞争对手。我与Docker的第一次接触大多是负面的,因为它当时的运行是非常不灵活的。后来,我渐渐发现了不可变基础架构的好处,以及Docker如何让这一切变得更易于实现。
与此同时,我们关闭了PaaS优惠,我开始做更多的尝试,Docker自然的走入了我的生活。
问:我们经常听到"Docker正在彻底改变IT",你认同这种观点吗?Docker技术有什么破坏性?
Nicolas De Loof:容器并不是什么新鲜事物,谷歌已经使用了十年了,之前许多运营团队都采用了LXC。那么是什么让人们开始觉得“Docker有破坏性”呢?是因为它定义了一个更高的层次,以用户为中心的“distributing and running stuff”抽象。
Docker的主要价值在于分发镜像格式和管道。runtime也非常棒,因为它提供了合理的默认设置,很多东西可以直接使用,当然有经验的用户也可以调整runtime,实现细粒度的控制。
问:Docker与普通虚拟机有什么不同?
Nicolas De Loof:Docker与虚拟机的技术角度不同,当然这并不表示它们是完全对立的,事实上我们可以使用虚拟机来实现Docker。但对于大多数用户来说虚拟机的创建和管理是一成不变的,事实上它也需要我们升级维护。
虚拟机是一个完整系统,所以出现问题时很难找到根源所在。Docker与虚拟机并不是互斥的,他们是不同用途的互补技术,虚拟机允许用户通过API管理主机,并提供基础设施的弹性。与此同时,Docker允许将软件定义为小型乐高块来组装,因此它们采用了不变的基础架构,微服务,分布式软件等现代架构。
问:您如何在日常工作中使用Docker?
Nicolas De Loof:就我个人来说,比较依赖Docker进行各种测试,所以我要确保有一个可以与他人共享的可再生环境,防止对我工作站的影响。
除此之外,公司还提供了基于Docker的弹性CI / CD解决方案“CloudBees Jenkins Enterprise”,作为Docker专家,我会尝试让它采用最好的Docker特性。
问:使用Docker时您遇到过什么问题?您认为目前存在的挑战是什么?
Nicolas De Loof:数据持久性是Docker用户最容易误解的元素。有人说,在Docker中不能运行数据库,也许他们只是错过了文档中的“volumes”一章?
当一个人试图从多个容器访问它们时,就会遇到权限问题,这时如果我们试图以“绑定挂载”的方式来管理时,情况会变得更糟,而不会让docker daemon执行voodoo setup。
这并不是一个微不足道的问题,我希望Linux内核/文件系统驱动程序的上游功能做一些更改,以便更易于使用。
问:关于Docker生态系统的演变,您如何评价Docker决定 向CNCF 捐赠containerd runtime ?
Nicolas De Loof:正如我所说,Docker的技术价值不在container runtime,这并不是一个巨大的复制工程。但对于生态系统健康,它们需要确保信任和互操作性,因此必须有一个开放标准和参考实现。
作为一个Java开发人员,我需要对这个方法有一个标准的API文档和参考实现,这并不能防止替代的实现或创新。Docker采用了一种独特的方法:证明了可以工作,然后提取一个开源组件,并确保它成为由OCI驱动的标准化容器生态系统的一部分。
问:您希望在下一个Docker发行版中看到什么功能?
Nicolas De Loof: 首先,我希望获得无特权嵌套容器“Docker in Docker”的支持。DinD的额外特权使得它很难安全,但在我的CI / CD用例的另一边,我需要让用户在dockerized构建环境中运行docker。这在技术上是可行的,因为LXD依赖Linux内核可以做到。
我希望看到的另一个特性是在容器级别实现的用户名称空间,我可以在每个容器的基础上配置用户ID映射。有了文件系统的支持,这就使得组装容器和完全支持共享volume变得很琐碎。但这是一个长期的努力,因为这仍然需要Linux内核文件系统中的一些修复(工作正在进行中)。
问:您能分享一个您在使用Docker时最喜欢的技巧吗?
Nicolas De Loof:考虑到不可变的基础设施,有很多中间件使用文件系统作为缓存,并且可能希望避免这种持久性。因此,我喜欢将它们作为只读容器(docker run -read-only)来约束它们,以确切地知道它们需要访问文件系统的位置,然后为实际的持久数据目录创建一个volume,并为其他所有东西(通常是缓存或日志文件)创建一个tmpfs。