Docker,用任何工具链和任何语言来构建任何应用

  在看过Docker的两个Hello World的程序后,咱们对Docker有了一个大概的感性的认识,那么Docker是究竟是什么呢?Docker是一个面向开发者和系统管理员编译,装载,和运行分布式应用的开放式平台。它包括了Docker引擎,一个可移植的,轻量级的,运行时环境和打包工具,还包括了Docker Hub,一个用于共享应用和自动化工做流的云服务。bash

 

Docker和通常的虚拟机有什么不一样之处服务器

  对通常的虚拟机而言,每一个虚拟化的应用包括的不单单是这个应用自己(大概数十M)以及应用所必需的bin文件和lib文件,此外还必须有一个虚拟化的操做系统(少则几G,多则十数G)。以下图所示。分布式

 

图1.通常虚拟机系统的结构(官网截图)工具

      

  而对于Docker而言,Docker引擎容器仅仅包含了应用自己和它的必须的依赖(文件或者镜像等),它在宿主操做系统中的用户空间(userspace)中以隔离的进程(容器)分别的运行着,只是和其余容器共享了Docker内核。这样,它就能在享有资源的隔离和分配的优点的同时,还保持高可移植性和高效性的优点。spa

 

图2.Docker的结构(官网截图)操作系统

 

文件系统blog

  为了进一步透彻地了解Docker的优点所在,咱们须要熟悉Docker的层次结构,这里详细了解一下Docker的文件系统。熟悉Linux系统的朋友应该知道,让一个Linux系统运行起来,咱们须要两个文件系统:进程

  1.boot文件系统(bootfs)内存

  2.root文件系统(rootfs)资源

  bootfs包括了boot加载器(bootloader)和内核(kernel),用户永远不对bootfs作任何修改,实际上,在boot加载完成之后,整个内核都在内存中了,bootfs会被卸载掉以释放和初始RAM磁盘相关联的内存。

  rootfs包括咱们熟悉的类Unix系统的标准结构:包括/dev, /proc, /bin, /etc, /lib, /usr, /tmp,以及全部用户须要运行各类应用的配置文件,二进制文件和库文件(像bash, ls等)

图3.Linux的bootfs和rootfs(官网用图)

 

  在不一样的Linux发行版中,内核也可能有很大的不一样,一般rootfs内核的内容和组织都是咱们的软件包依赖当前而不是另外一个发行版的主要缘由(这里就产生了应用对于不一样发行版的Linux的依赖性)。而Docker能够经过同时运行多个发行版来帮助咱们解决这个问题。

图4.Docker文件系统(官网用图)

 

  这里咱们应该理解了Docker的优点所在了,有了Docker,开发者们能够用任何工具链和任何语言构建任何应用。Docker化的应用彻底可移植,能够在任何地方运行。

  不只如此,开发者能够经过Docker Hub上的超过1.3W个应用来快速上手,并且这些应用由Docker来管理和维护更新以及相互之间的依赖关系,让管理员更便于了解开发者编写的应用是怎样工做的。开发者们能够经过Docker自动化他们的开发流程而且能经过公有的或者私有的云库进行团队合做。

  Docker能使开发者更快的构建和装载高质量的应用。

  对于系统管理员,使用Docker能够为开发提供标准化的环境,质量保证和生产团队。再也不是“在个人机器上工做”,经过Docker化应用及其依赖,系统管理员能够忽视操做系统底层的差别。此外,Docker引擎上的部署是以单元来实现的,而经过将这种方式标准化,系统管理员们能在工做负荷量上面得到更多的弹性。不管是私有服务器或者数据中心虚拟机仍是公有云,部署的工做量被基础结构技术的束缚程度都更低,而更多地是被商业政策优先引导。除此以外,Docker引擎的轻量级运行时环境实现了在响应指令变化时所须要的快速扩大(scale-up)放缩(scale-down)功能。

  Docker能使系统管理员在任何环境设施下部署和运行任何应用,更快,更可靠。

相关文章
相关标签/搜索