Docker真的万能吗?看这一篇就够了

开发 前端
Docker并不是容器,而是创建容器的工具,是应用容器引擎。其实看它的两句口号就可以很容易的理解它。

 

Docker并不是容器,而是创建容器的工具,是应用容器引擎。其实看它的两句口号就可以很容易的理解它。第一句是“Build, Ship and Run”翻译过来便是“搭建、发送、运行”;第二句是“Build once,Run anywher”也就是只要搭建一次,到处都能用。比如你想在一片空地上盖房子,但你需要很多步骤才能将这个房子盖好,可是住了一段时间后你却想搬家了,只能重新盖房子。

Docker就像一个魔法,可以把你原本盖好的房子复制了放进背包里然后粘贴到另一个空地,其实就是“镜像”。Docker的三大核心概念分别是镜像(Image)、容器(Container)、仓库(Repository)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。每个人生成的不同镜像,可以互相交换,最终它就变成了一个公共仓库。

使用Docker时候,你会发现它真的是个宝藏,可以秒级开启应用,不用特别繁琐的配置什么,可以减轻很多这种重复性的劳动。Docker不适合虚拟化桌面,它比较适合linux族,Unix族以及应用程序的虚拟化。逻辑是这样的,在操作系统的概念里面,有一个内核,docker是基于Linux 内核,它不适用于Windows虚拟化,Windows操作系统有另外一个虚拟技术Hype-y。

Docker有一些缺点,表面上很方便,实际上工具链之间的衔接略微糟糕。它将linux的namespace做了深层次的封装,用户上手的难度低,部署到生产环境也很容易。但仅限于小型项目,换成稍微复杂一些的项目,依赖关系非常多的话,就能发现它会出现各种奇怪的bug。比如docker-compose之间的依赖不会等待被依赖者加载完毕,挂载volume有时会无法在entrypoint或command中执行命令,必须要用COPY等等,变得复杂和难以维护。

在进行多机部署的时候,跟着官方文档走都不能成功,上stackoverflow和github上查了半天也查不到任何解决办法,是经常发生的事情。Docker确实可以降低了运维难度,但是运营成本却提升了。它最大的一个缺点是十分吃硬盘。Docker封装的namespace,并没有对文件进行进一步的管理,只是粗暴的将文件到处复制粘贴。当服务器上开了数百个容器后发现1TB的硬盘被吃掉了一半时,意味着需要不停增加服务器资源才能维持系统的运行。除了磁盘空间的占用外,作为一名中国用户,时区、墙等都是问题。

当然所有问题都是可以解决的,只是比较浪费时间。毋庸置疑Docker是个非常酷的工具,它的优点还是远大于缺点的。但它并不是万能的,当你遇到架构简单,类似数据库+应用程序这种情况可以不用Docker,业务上Docker会占用太多资源的时候也可以考虑不用,因为服务器资源挺贵。

 

责任编辑:华轩 来源: 今日头条
相关推荐

2022-06-20 09:01:23

Git插件项目

2020-02-18 16:20:03

Redis ANSI C语言日志型

2023-02-10 09:04:27

2018-05-22 08:24:50

PythonPyMongoMongoDB

2019-05-14 09:31:16

架构整洁软件编程范式

2020-07-03 08:21:57

Java集合框架

2023-10-17 08:15:28

API前后端分离

2022-08-01 11:33:09

用户分析标签策略

2021-04-08 07:37:39

队列数据结构算法

2023-09-11 08:13:03

分布式跟踪工具

2018-11-14 11:57:28

2020-08-17 09:25:51

Docker容器技术

2022-05-19 08:28:19

索引数据库

2023-11-06 07:21:13

内存结构Jvm

2019-04-01 10:43:59

Linux问题故障

2020-10-21 14:12:02

Single Sign

2020-10-18 07:32:06

SD-WAN网络传统广域网

2022-07-06 12:07:06

Python函数式编程

2022-04-07 10:39:21

反射Java安全

2017-03-11 22:19:09

深度学习
点赞
收藏

51CTO技术栈公众号