在连续两年里为每一个项目都配备一个docker后,我变得越来越不喜欢使用docker了。

不过值得肯定的是,在写完dockerfile和docker-composer之后,一行代码直接部署的痛快感,真的会让人身心愉悦。

但是,为了这一行代码的部署,调试过程也是十分折磨人的。

docker表面上很方便,其实工具链之间的衔接十分糟糕。

docker将linux的namespace做了深层次的封装,使用户上手的难度非常低,部署到生产环境也很容易。但这仅限于小型项目,比如你的一个nodejs+mongodb或者php+mysql的架构方式。如果是稍微复杂一些的项目,依赖关系非常多的话,你会发现,docker会出现各种神奇的bug。比如docker-compose之间的依赖不会等待被依赖者加载完毕,挂载volume有时会无法在entrypoint或command中执行命令,必须要用COPY…诸如此类,原本不需要如此复杂的部署,如今却变得复杂和难以维护。

在进行多机部署的时候,跟着官方文档走都不能成功,上stackoverflow和github上查了半天也查不到任何解决办法,是经常发生的事情。

当然用多了之后会习惯docker的不完美,但也会让你思考,这个项目一定需要使用docker吗?

docker的确降低了运维难度,但是加大了运营成本。

在我看来,docker最大的一个缺点是,十分吃硬盘。docker封装的namespace,但是并没有对文件进行进一步的管理,只是粗暴的将文件到处复制粘贴。当服务器上开了数百个容器后发现QQ买卖平台1TB的硬盘被吃掉了一半时,我的内心里只有两个字:绝望。这意味着需要不停增加服务器资源才能维持系统的运行,如果不采用docker部署的方式,可能并不需要如此大的磁盘空间。

除了磁盘空间的占用外,作为一名中国用户,时区、墙等都是问题,当然这些问题都是可以解决的,但是也很花费时间。

我并不是在指责docker的不好,正相反,我觉得docker是个非常酷的工具。使用docker后,在我更新半年前写的爬虫时,完全不用担心该怎么从新部署,还是那条熟悉的命令即可完成,减轻了很多记忆上的压力。

那么在什么时候不必使用docker呢

架构简单,类似数据库+应用程序这种情况是不需要docker的,因为你花在调试docker上的时间可能比你完成具体业务逻辑的时间还要多(想偷懒不想安装各种库时除外);业务上docker会占用太多资源的时候可以考虑不使用docker,因为服务器资源真的很贵;

啊,想来想去,不使用docker的场景真少啊,说到底我还是喜欢使用docker的,连多找几个不用docker的理由都找不到(笑。

docker并不是万能的,但如果你现在告诉我不要使用docker,我可能还做不到(docker是一个让人用上就不想扔的产品,部署时的如丝般流畅还是够吸引人啊)。


更多相关文章

  1. docker 使用入门
  2. MongoDB Go Driver使用帮助文档
  3. kafka-python基本使用
  4. Elasticsearch从入门到放弃:索引基本使用方法
  5. BTree索引/Hash索引
  6. 如何使用Spark快速将数据写入Elasticsearch
  7. 浅谈使用ElasticSearch实现全文检索
  8. Elasticsearch索引管理工具Curator介绍
  9. Nodejs 中 ES Modules 入门使用讲解

随机推荐

  1. Android SDK Emulator: Compile Cyanogen
  2. android的线性布局
  3. android googlemap权限问题
  4. android双击事件
  5. 三款Android游戏源码
  6. Android shape 参数
  7. Android定义宽高比控件
  8. Android NDK Tools 下载链接大全
  9. android常用权限
  10. Eclipse adt Android Test Project