Docker
Docker官网:https://www.docker.com/
什么是docker?
docker是将应用程序自动部署到容器的技术什么是容器?
容器是一种虚拟化的方案,与虚拟机不同,虚拟机是通过中间层将一台或多台虚拟系统独立运行在硬件之上,而容器是运行在操作系统的内核之上的,可以称为操作系统虚拟化。只能运行相同或相似的内核操作系统,依赖于linux内核特性:Namespace和Cgroups,所以docker上只能运行linux操作系统优点:
快 运行时的性能可以获取极大提升(经典的案例是提升97%)
管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。
敏捷 像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。
灵活 将应用和系统“容器化”,不添加额外的操作系统,
轻量 你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。
便宜 开源的,免费的,低成本的。由现代Linux内核支持并驱动。轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。
生态系统 正在越来越受欢迎,只需要看一看Google的趋势就知道了, docker or LXC. 还有不计其数的社区和第三方应用。
云支持 不计其数的云服务提供创建和管理Linux容器框架。
有关Docker性能方面的优势,还可参考此IBM工程师对性能提升的评测,从各个方面比VMs(OS系统级别虚拟化)都有非常大的提升有争论的地方:
能否彻底隔离
在超复杂的业务系统中,单OS到底能不能实现彻底隔离,一个程序的崩溃/内存溢出/高CPU占用到底 会不会影响到其他容器或者整个系统?很多人对Docker能否在实际的多主机的生产环境中支持关键任务系统还有所怀疑。就像有人质疑Node.JS单线程快而不稳,无法在复杂场景中应用一样。
不过可喜的是,目前Linux内核已经针对Container做了很多改进,以支持更好的隔离。
GO语言还没有完全成熟
Docker由Go语言开发,但GO语言对大多数开发者来说比较陌生,而且还在不断改进,距离成熟还有一段时间。此半git、半包管理的方式让一些人产生不适。
被私有公司控制
Docker是一家叫Dotcloud的私有公司设计的,公司都是以营利为目的,比如你没有办法使用源代码编绎Docker项目,只能使用黑匣子编出的 Docker二进制发行包,未来可能不是完全免费的。 目前Docker已经推出面向公司的企业级服务(咨询、支持和培训)。Doker目标:
提供简单轻量的建模方式(同一台宿主机可以运行多个容器)
职责的逻辑分离,加强开发人员的开发环境与生产部署的环境的一致性
快速高效的开发的生命周期,缩短从开发到生产的周期,使开发、测试、生产环境相一致,并且都以容器的方式进行交付,避免了额外调试部署的时间开销
鼓励使用面向服务的架构,鼓励单个容器之运行单一服务,这就形成了一种分布式模型,避免服务之间的互相应影响,在定位出现的问题时,也变得简单直接
Docker的使用场景:
使用docker容器开发,测试,部署服务.
创建隔离的运行环境.
搭建测试环境
构建多用户的平台即服务(PaaS)基础设施
提供软件机服务(SaaS)应用程序
高性能,超大规模的宿主机部署
Docker基本组成
Docker Client 客户端
Docker Daemon 守护进程
Docker Image 镜像
Docker Container 容器
Docker Registry 仓库
公有 Docker Hub https://hub.docker.com/
私有Docker容器的能力
文件系统隔离:每个容器有自己的root文件系统
进程隔离:每个容器都运行在自己的进程环境中
网络隔离:容器间的虚拟网络接口和IP地址都是分开的
资源隔离和分组:使用cgroups将cpu和内存之类的资源独立分配给每个Docker容器