为什么要用Docker

最近总是听到Docker,于是想学习下。但学习是为了用,那为什么要使用Docker呢?请大家帮忙解解惑。以下是在网上找的几点使用Docker的理由,但感觉还是有疑问。具体列出来,大家帮忙看下。

(注:其中提到的Docker的优势,是从网上直接拷贝下来的,只为分析问题,并非有意抄袭;提问部分是我个人的想法,也是为了讨论问题,没有其他用意。)

1、更高效的利用系统资源
由于容器不需要进行硬件虚拟以及运行完整操作系统等额外开销,Docker对系统资源的利用率更高,无论是应用执行速度,内存消耗以及文件存储速度,都要比传统虚拟机技术更高效。因此,相比虚拟机技术,一个相同配置的主机,往往可以运行更多数量的应用。
更快速的启动时间
传统的虚拟机技术启动应用服务往往需要数分钟,而Docker容器应用,由于直接运行与宿主内核,无序启动完整的操作系统,因此可以做到妙级,甚至毫秒级的启动时间,大大的节约了开发,测试,部署的时间。

提问:不用虚拟机技术,不用启动完成的操作系统,这是否意味着,如果云上使用Docker部署,不同用户的应用,都是部署在一个操作系统。虽然Docker讲有沙漏安全机制,可沙漏真的就安全吗?其次,一个操作系统,其同时可运行的线程是有限的,使用Docker能解决这一问题吗?
如果不考虑安全问题,不考虑操作系统线程上线问题,那在一个操作系统上部署一个或多个WEB容器的方式,和使用Docker部署有什么区别吗?

2、一致的运行环境
开发过程中一个常见的问题是环境一致性问题,由于开发环境,测试环境,生产环境不一致,导致有些bug并未在开发过程中被发现,而Docker的镜像提供了除内核外完整的运行时环境,确保了应用运行环境一致性。从而不会再出现(这段代码在我机器上运行没问题啊)zz这类问题。

提问:用Docker就能保证运行环境的一致性吗?抛开历史数据的差异不提,只说运行环境。在采用虚拟化的情况下,多个环境只需要将一个环境做多个拷贝即可,那里来的不一致?出现不一致,只能说明不专业。至于最后一句“从而不会再出现(这段代码在我机器上运行没问题啊)zz这类问题”,一般出现这种问题,根本就不是软硬件环境的问题,大多是因为应用升级,历史数据兼容不好,或者是出现了没有预见到的使用过程的业务场景导致的。

3、持续交付和部署
对于开发和运维人员来说,最希望的就是一次创建或配置,可以在任意地方正常运行。

提问:这种说法太不负责,我相同的应用运行在不同的Docker环境,谁能保证一定能正常运行?我相同的应用,相同的Docker,不同的操作系统或系统版本,谁能保证一定能正常运行?

4、使用Docker可以通过定制应用镜像来实现持续集成,持续交付,部署。开发人员可以通过Dockerfile来进行镜像构建,并结合持续集成系统进行集成测试,而运维人员则可以在生产环境中快速部署该镜像,甚至结合持续部署系统进行自动部署

提问:请举例,有什么部署方式是不能持续集成,持续交付的?如果都能做到,那为什么就成立Docker的特点?

5、更轻松的迁移
由于Docker确保了执行环境的一致性,使得应用的迁移更加容易,Docker可以在很多平台上运行,无论是物理机,虚拟机,公有云,私有云,甚至是比较本,其运行结果是一致的,因此用户可以很轻易的将在一个平台上运行的应用,迁移到另一个平台上,而不用担心运行环境的变化导致应用无法正常运行的情况。

提问:在第3点不能确保的前提下,第5点就成立的条件

6、更轻松的维护和扩展
Docker使用的分层存数以及镜像的技术,使得应用重复部分的复用更为容易,也使得应用的维护更新更加简单,基于基础镜像进一步扩展镜像也变得非常简单,此外,Docker团队同各个开源项目团队一起维护了一大批高质量的官方镜像,既可以直接在生产环境使用,又可以作为基础进一步定制,大大的降低了应用服务的镜像制作成本。

提问:生成镜像这一步,本身就是多此一举。特别是对于使用java语言编写的应用。java编译后的二进制class文件本身就依赖于不同的jvm做到了跨平台,可复用,可移植。用Docker又多出个镜像,毫无意义。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值