Docker

Docker

九月 12, 2018

Docker官网:https://www.docker.com/

  1. 什么是docker?
    docker是将应用程序自动部署到容器的技术

  2. 什么是容器?
    容器是一种虚拟化的方案,与虚拟机不同,虚拟机是通过中间层将一台或多台虚拟系统独立运行在硬件之上,而容器是运行在操作系统的内核之上的,可以称为操作系统虚拟化。只能运行相同或相似的内核操作系统,依赖于linux内核特性:Namespace和Cgroups,所以docker上只能运行linux操作系统

  3. 优点:
    快 运行时的性能可以获取极大提升(经典的案例是提升97%)
    管理操作(启动,停止,开始,重启等等) 都是以秒或毫秒为单位的。
    敏捷 像虚拟机一样敏捷,而且会更便宜,在bare metal(裸机)上布署像点个按钮一样简单。
    灵活 将应用和系统“容器化”,不添加额外的操作系统,
    轻量 你会拥有足够的“操作系统”,仅需添加或减小镜像即可。在一台服务器上可以布署100~1000个Containers容器。
    便宜 开源的,免费的,低成本的。由现代Linux内核支持并驱动。轻量的Container必定可以在一个物理机上开启更多“容器”,注定比VMs要便宜。
    生态系统 正在越来越受欢迎,只需要看一看Google的趋势就知道了, docker or LXC. 还有不计其数的社区和第三方应用。
    云支持 不计其数的云服务提供创建和管理Linux容器框架。
    有关Docker性能方面的优势,还可参考此IBM工程师对性能提升的评测,从各个方面比VMs(OS系统级别虚拟化)都有非常大的提升

  4. 有争论的地方:
    能否彻底隔离
      在超复杂的业务系统中,单OS到底能不能实现彻底隔离,一个程序的崩溃/内存溢出/高CPU占用到底 会不会影响到其他容器或者整个系统?很多人对Docker能否在实际的多主机的生产环境中支持关键任务系统还有所怀疑。就像有人质疑Node.JS单线程快而不稳,无法在复杂场景中应用一样。
      不过可喜的是,目前Linux内核已经针对Container做了很多改进,以支持更好的隔离。
    GO语言还没有完全成熟
      Docker由Go语言开发,但GO语言对大多数开发者来说比较陌生,而且还在不断改进,距离成熟还有一段时间。此半git、半包管理的方式让一些人产生不适。
    被私有公司控制
    Docker是一家叫Dotcloud的私有公司设计的,公司都是以营利为目的,比如你没有办法使用源代码编绎Docker项目,只能使用黑匣子编出的 Docker二进制发行包,未来可能不是完全免费的。 目前Docker已经推出面向公司的企业级服务(咨询、支持和培训)。

  5. Doker目标:

  6. 提供简单轻量的建模方式(同一台宿主机可以运行多个容器)

  7. 职责的逻辑分离,加强开发人员的开发环境与生产部署的环境的一致性

  8. 快速高效的开发的生命周期,缩短从开发到生产的周期,使开发、测试、生产环境相一致,并且都以容器的方式进行交付,避免了额外调试部署的时间开销

  9. 鼓励使用面向服务的架构,鼓励单个容器之运行单一服务,这就形成了一种分布式模型,避免服务之间的互相应影响,在定位出现的问题时,也变得简单直接

  10. Docker的使用场景:

  11. 使用docker容器开发,测试,部署服务.

  12. 创建隔离的运行环境.

  13. 搭建测试环境

  14. 构建多用户的平台即服务(PaaS)基础设施

  15. 提供软件机服务(SaaS)应用程序

  16. 高性能,超大规模的宿主机部署

  17. Docker基本组成
    Docker Client 客户端
    Docker Daemon 守护进程
    Docker Image 镜像
    Docker Container 容器
    Docker Registry 仓库
    公有 Docker Hub https://hub.docker.com/
    私有

  18. Docker容器的能力
    文件系统隔离:每个容器有自己的root文件系统
    进程隔离:每个容器都运行在自己的进程环境中
    网络隔离:容器间的虚拟网络接口和IP地址都是分开的
    资源隔离和分组:使用cgroups将cpu和内存之类的资源独立分配给每个Docker容器