当前位置: 首页 > 科技观察

Docker真的万能吗?看完这篇文章就够了

时间:2023-03-13 16:57:59 科技观察

Docker不是容器,而是创建容器的工具和应用容器引擎。其实看它的两个slogan就很容易理解了。第一句是“Build,ShipandRun”,翻译过来就是“构建、发送、运行”;第二句是“Buildonce,Runanywhere”,即只要构建一次,就可以到处使用。比如你想在一块开阔的土地上盖房子,但是盖房子需要很多步骤,但是住了一段时间后,你想搬家,又得重新盖房子。Docker就像一个魔法。你可以复制你建造的房子,把它放在你的背包里,然后粘贴到另一个空地。它实际上是一个“镜像”。Docker的三个核心概念是image、container和repository。镜像不包含任何动态数据,构建后内容不会改变。每个人生成的不同图像可以相互交换,最终成为公共仓库。当你使用Docker的时候,你会发现它真的是一个宝藏。不需要特别繁琐的配置,就可以秒级启动应用,可以减少很多这种重复劳动。Docker不适合做桌面虚拟化,更适合做linux家族、Unix家族和应用程序的虚拟化。逻辑是这样的,在操作系统的概念中,有一个内核,docker是基于Linux内核的,它不适合Windows虚拟化,Windows操作系统还有另外一种虚拟技术Hype-y。Docker有一些缺点,表面上很方便,但实际上工具链之间的接口稍差。对linux的命名空间进行了深层次的封装,方便用户上手,也便于部署到生产环境。但仅限于小型项目。如果你切换到一个稍微复杂一些,依赖比较多的项目,你会发现它会出现各种奇怪的bug。比如docker-compose之间的依赖不会等待依赖加载完成。挂载卷有时无法在入口点或命令中执行命令。必须使用COPY等方式,变得复杂,难以维护。部署到多台机器时,按照官方文档是不会成功的。在stackoverflow和github上找了半天也没找到解决办法,这是常有的事。Docker确实可以降低运维难度,但是增加了运维成本。它最大的缺点之一就是非常吃硬盘。Docker封装的namespace并没有对文件做进一步的管理,只是简单的把文件复制粘贴到各处。当在服务器上打开数百个容器,发现1TB硬盘被吃掉一半时,意味着需要不断增加服务器资源来维持系统的运行。除了占用磁盘空间,作为中国用户,时区、墙壁等都是问题。当然,所有的问题都可以解决,但就是浪费时间。毫无疑问,Docker是一个非常酷的工具,它的优势远远大于它的劣势。但这不是万灵药。遇到简单的结构,比如数据库+应用,可以不用Docker,业务上占用资源太多的时候可以考虑不用Docker,因为服务器资源是挺贵的。