Docker是什么:
Docker是一个用来装应用的容器,就好比杯子用来装水,笔筒用来装笔,书包用来装书一样,你可以把hello world放到Docker里,你可以把网站放到Docker里,你可以把你想的到的任何程序放到Docker里。
Docker的思想:
Docker 的思想来源于集装箱,集装箱最大的作用在于能够将货品标准化,在运输的过程中,不需要直接装载和卸载各种各样的商品,而是统一标准的集装箱,这样装载和卸载的环节就可以实现流水线和自动化了,并且商品封装在集装箱中,没有暴露在外面,提高安全性,集装箱与集装箱之间也是互相隔离,不会有任何相互影响的问题。我们也不再需要专门的船去运输专门的货品,只要货品在集装箱内好好封存着,那就可以使用一艘大船将他们都运走。并且你可以很方便的将集装箱装载到飞机、轮船、货车、火车,大大的提高了运输的便利性。
对于我们来说,Docker 也担任了集装箱类似的角色,我们的应用或者所依赖的第三方服务可以理解为货品,而 Docker 则是将我们的货品规范化管理起来,从而可以轻易的完成产品交付,环境转移等等诸多问题。还有我们的货品由Docker这个集中箱封装,对外隔离,提高安全性。并且 Docker 对于主机资源的消耗非常小,可以实现对服务器资源的最大利用。
Docker 解决了哪些问题?
组织有序性 以传统的方式部署你的应用,可能出现由于多个应用程序的依赖不用,导致应用之间的依赖变得非常混乱,若此时出现两个应用依赖同一个程序但却依赖不同版本,便会出现让人比较头痛的问题,使用Docker便可以很方便的帮我们管理各个应用的依赖,并以容器为基础将应用的运行环境独立开来,从而不会互相影响,还能提高资源利用率。
便携性 另一问题是,以传统的方式部署你的应用,如果我们的应用如果后期需要迁移(这里的迁移包括相同操作系统和不同操作系统的迁移),还是需要做大规模的集群,都是一件工作量非常大的操作。而容器化了的应用,对这些操作都是非常方便的。
安全性 最后一个不得不提的问题就是安全,以传统的方式部署你的应用,如果该应用被攻击者攻击,或者因为程序自身的bug,又或是运行环境多个应用间混乱的依赖关系导致的问题,这样的话,你的服务器系统安全危险级别会很高,因为这些问题将直接影响你的系统安全。但如果你的应用是运行在Docker容器中,那么一切的危害都会被隔离在容器内,因为容器的资源跟系统是隔离的,危害将被降到最低。
Docker VS VM
Docker 的核心是 基于 LXC(Liunx container) 技术的实现,可以理解为一个轻量级的虚拟机(实际上是容器的概念,Docker 不是虚拟机),Docker 使用 Linux 的 namespace 和 cgroups 技术实现容器隔离与资源限制。
类别 | Docker | VM |
操作系统 | 与宿主机共享OS | 在宿主机 OS 运行虚拟机 OS |
部署难度 | 非常简单 | 组件多, 部署复杂 |
启动速度 | 秒级 | 分钟级 |
执行性能 | 和物理系统几乎一致 | VM 会占用一些资源 |
镜像体积 | 镜像是 MB 级别 | 虚拟机镜像是 GB 级别 |
管理效率 | 管理简单 | 组件相互依赖, 管理复杂 |
隔离性 | 比较弱 | 彻底 |
Docker 的应用场景
- 面向产品:产品的交付模式改变
- 面向开发:个人开发环境发生改变
- 面向运维:
- 获得比虚拟机性能损失更小的解决方案
- 可以更快的进行自动化扩容(VM 是分钟级扩容,Docker 是秒级)
- Docker 适用于微服务架构
- 面向测试:
- 同一环境下多版本测试
- 自动化、微服务、大规模集群(微博红包案例)百度的 Paas 平台、等等…
- 应用场景扩展:http://www.docker.org.cn/docker/151.html
- docker中文学习网:http://www.docker.org.cn