Docker与大数据

大数据时代迎来了Docker这项技术,无论是对业界,还是开发人员,都是一个值得兴奋的好事。因为多数的分布式处理系统,比如hadoop、spark,它们的环境搭建以及后期运维都是一件非常繁杂的大工程。而有了Docker,我相信hadoop、spark等的优势会发挥的更好。
Apache在其Hadoop wiki上整理了Docker中运行Hadoop的优势,以及要完全在Docker中运行Hadoop所需要完成的工作。在Docker,或者说其它容器中运行Hadoop YARN有很多优势,具体如下:

  1. 软件依赖和配置的隔离:在Docker中运行的应用,其软件依赖和配置是与宿主机完全没有关系的,跟其其它行在Docker中的应用也没有关系;
  2. 安全性:运行在Docker中的应用,在没有主动配置的情况下,基本没有办法访问(即便是Docker镜像中的root权限)宿主文件系统的内容,这可以很好的保护宿主文件系统、设备等等;
  3. 性能隔离:Docker可以对应用所需要的资源,如CPU计算资源、内存资源、存储资源、带宽等进行调控;
  4. 一致性:只要是源自同一个Docker镜像,所有的任务就具有完全一致的软件环境,跟宿主环境无关。比如一个Ubuntu镜像可以像使用真正Ubuntu系统一样利用其特性,哪怕宿主机器是RHEL;
  5. 快速部署:Docker有着强大的镜像存储和分发能力,开发者可以很方便的从镜像中心获取Hadoop YARN应用的镜像;
  6. 可编程:通过Dockerfile,开发者可以非常方便地对YARN应用的文件系统、环境配置和运行的脚本进行设置;

虽然容器的优势是明显的,但是目前Docker和YARN的情况却无法支撑完全在Docker中运行Hadoop YARN任务,Apache提出需要对Docker和YARN进行修改的想法,并给出了一些目前计划的工作:

  1. YARN的Docker执行器;
  2. Docker需要支持user namespaces,以便可以将Docker镜像中的root用户映射到宿主机的普通用户,来控制用户对宿主文件系统的访问;
  3. 容器的网络配置:这项工作主要为了让YARN的主节点同其他节点通信,Docker现有的NAT IP地址不允许运行在某个镜像中的任务访问另外一台物理宿主上运行的其他任务;
  4. 动态配置资源限制:目前Docker不支持动态对镜像资源进行配置;

Docker与虚拟机的区别

有一种夸张的说法是Docker将是现有虚拟技术的终结者,当然这种说法可能有些夸大其词了。Docker是面向应用的,旨在构建一个PaaS平台,而现有虚拟技术主要提供一个灵活的计算机资源池,构建一个IaaS平台。Docker有如下特性:

面向应用

一个软件系统包含很多部分,包含二进制文件、库文件、配置文件和依赖性,这就导致了软件安装的复杂性,而Docker把这种互相的依赖集中在容器内部,而与宿主机在一定程度上相互隔离,使开发与维护相互分离,简化了产品的上线流程。这大概也是众多厂商热情拥抱这项新技术的原因。Google、Amazon、Microsoft、VMware都纷纷加入Docker和Container所掀起的新时代云端虚拟化行列。

Linux Containers(LXU)技术

Docker与虚拟机同属于虚拟化技术,现在市面上的虚拟机多数是对主机的硬件虚拟化,不管是安装在操作系统之上的workstation,还是直接安装在硬件上的ESX或者ESXI,这些产品基于vSphere或Hyper-V这些技术,目的构建一个与宿主机相互隔离的系统。而Docker技术是利用container技术,使应用直接安装到容器上,而容器相对于宿主机仅仅只是一个或几个进程,将容器与宿主机器的系统隔离,方便开发与运维。Container 技术是一种在 操作系统内的 Kernel 层所打造虚拟运行环境,所以 Container 彼此之间共享了 Host OS 的 Kernel,但通过namespace 区分来达到隔离每个容器的目的。现在Docker容器不仅支持Linux系统,而且得到了Windows和MAC OS的支持。

高效性

启动一个虚拟机可能会花费掉几分钟时间,而Docker的在1秒之内即可成功启动。这是因为启动一个虚拟机相当于启动一个完整的操作系统,而启动一个Docker相当于启动一个进程。同时也使简化了开发、运维流程,加快了开发人员开发速度。