什么是docker?
docker是一个由许多服务组成的程序,它提供了在几乎任何平台上开发,打包,交付,运行应用程序的一致方式。学习docker就是学习这些若干服务的知识,我们后续会详细讨论。
对于很多开发者而言,尝尝遇到这样一个困惑,这个程序或者代码在小王的本机上运行没有问题,但是在小刘的机器上怎么跑也跑不起来,所以为了在小刘的机器上能够运行,小王挥汗如雨,搞了一下午,发现是运行环境XXX地方配置不一致。这个时候,docker出来了,它大胆的宣布:只要你使用docker,只要你的程序或者代码能够在小王那里运行,那么一定在小刘那里也可以运行。也就是说,docker为我们屏蔽了很多运行环境的细节。
docker是一个管理你的机器的基础设施的运行平台。Docker提供了一种在DAPT环境中打包,交付,测试和运行应用程序的一致方式。
怎么理解这句话呢?
啥是DAPT?(Development, Testing, Acceptance, and Production)
说人话就是,你将你的应用程序打包成docker的镜像。然后在开发,测试,生产环境中运行相同的镜像。这样做会节省很多在各种环境中配置和安装应用的时间。
docker是怎么诞生的?
docker的诞生在网络上有很多资源,有兴趣的可以百度或者google搜索了解。在这里笔者只想说一句,从docker的诞生过程,可以证明一句很朴素的格言:创新永远是诞生奇迹的地方,如果你的创新还能给人带来舒适感和幸福感,哈哈,说不定你的这个创新离奇迹不远啦。
为什么docker如此风靡?
docker如此受欢迎,我思考的关键是:
- docker帮我们解决了什么问题?
- 以前这些问题又是如何解决的?
- 它们的解决方案存在哪些痛点?
docker帮我们轻松了开发,测试,发布和部署过程,以前这些在虚拟机上弄是一个很痛苦的过程,同时docker也帮我们节省了资源。为了说明这个问题,我用两幅图和一些说明来作比较:
Virtual Machine
- Hypervisors are used to manage Virtual machines
- A full copy of Guest OS is installed on top of the Host machine. These Guest os can be of few Gbs, where the hosted app is just of few Mbs.
- Heavyweight as explained above
- Difficult to monitor and time taking
Docker
- Docker engine takes care of running the image in an isolated runtime, docker container.
- The application only needs to be packed with its dependencies libraries.
- Much lightweight than Virtual Machines, and powerful at the same time
- Easy to manage, spinning up a container is just a matter of few commands and a few seconds.
大伙看到了吧,真的是一图胜千言,不要在意我在这里瞎说,大伙重点是理解这两幅图,并在以后的学习中不断提醒自己,docker的这个命令有没有跟这两幅图关联的部分,如果有的话,它属于哪一部分呢?因为这是对docker的入门理解,所以在这里不详细说明这两幅图,在以后的命令使用中,我们会慢慢理解。
为什么要使用docker?
有效的使用系统资源
docker容器不需要额外的虚拟化层,却是一个完整的客户操作系统。因此比传统的虚拟化技术能更好的利用资源。
更快的启动时间
容器化的应用程序只需要几秒钟,甚至几毫秒启动,因为它们直接运行在主机内核上。
一致的操作系统环境
docker镜像确保除了应用程序之外完整了运行时环境。这使得它可以在任何操作系统上运行。
持续的交付和部署
DevOps 想要从任何地方配置,Docker 允许您自定义 CI(持续集成)、CD(持续交付)和部署的镜像。
无痛迁移和维护
Docker 确保一致性,从而使从系统到系统的迁移变得简单。