Docker容器概述

  • 容器技术的发展

       在过去十年里,围绕计算、存储、网络三大基础服务,围绕敏捷服务和规模处理两大核心诉求,新的概念、模式和工具争相涌现。这些创新的开源技术成果,提高了整个信息产业的生产效率,降低了应用信息技术的门槛让“互联网+”成为可能。

       如果说软件定义网络(SDN)和网络功能虚拟化(NFV)让互联网络的虚拟化进入了崭新的阶段,那么容器技术的出现,毫无疑问称得上计算虚拟化技术的又一大创新。从Linux Container到Docker,看似是计算技术发展的一小步,却是极为重要的历史性突破。

       容器带来的不仅仅是技术体验上的改进更多的是新的开发模式、新的应用场景、新的业务可能....容器技术自身在快速演进的同时,我们也很欣喜地看到,围绕着容器的开源生态系统越发繁盛。Docker三剑客Machine, Compose, Swarm相辅相成,集团作战:搜索巨人则推出Kubernetes,领航新一代容器化应用集群平台;还有Mesos、CoreOs,以及其他众多的开源工具。这些工具的出现,弥补了现有容器技术栈的不足,极大地丰富了容器技术的应用场景,增强了容器技术在更多领域的竞争力。

软件定义网络(SDN)介绍:

       软件定义网络(Software Defined Network,SDN)是由美国斯坦福大学CLean State课题研究组提出的一种新型网络创新架构,是网络虚拟化的一种实现方式。其核心技术OpenFlow通过将网络设备的控制面与数据面分离开来,从而实现了网络流量的灵活控制,使网络作为管道变得更加智能,为核心网络及应用的创新提供了良好的平台。

网络功能虚拟化(NFV)介绍:

        网络功能虚拟化(Network Functions Virtualization,缩为 NFV),一种对于网络架构(network architecture)的概念,利用虚拟化技术,将网络节点阶层的功能,分割成几个功能区块,分别以软件方式实作,不再局限于硬件架构。

 


  • 什么是容器?

1.容器技术已经成为应用程序封装和交付的核心技术;

2.容器技术的核心有以下几个内核技术组成:

    – CGroups(Control Groups)---实现对资源的配额和度量

    – NameSpace---进程隔离:实现Container的进程、网络、消息、文件系统和主机名的隔离

    – SELinux安全

3.由于是在物理机上实施隔离,启动一个容器,可以像启动一个进程一样快速。

  • 什么是Docker?

       Docker是完整的一套容器管理系统。Docker提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术。

       Docker 是 dotCloud公司开源的一项基于 LXC 技术之上构建的应用打包运行时引擎,源代码托管在 GitHub 上,完全基于go 语言开发并遵守 Apache2.0 协议开源。让开发者可以打包他们的应用到以及依赖包到一个可运行的环境中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙盒机制,相互之间不会有任何接口(类似iPhone的app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行,最重要的是,它们不依赖于任何语言、框架或包装系统。

       基于Linux平台上的多项开源技术,Docker提供了高效、敏捷和轻量级的容器方案,并支持部署到本地环境和多种主流云平台。可以说,Docker首次为应用的开发、运行和部署提供了“一站式”的实用解决方案。

扩展:LXC

       LXC为Linux Container的简写。Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源而且不需要提供指令解释机制以及全虚拟化的其他复杂性。

       LXC主要通过来自kernel的namepace实现每个用户实例之间的相互隔离,通过cgroup实现对资源的配额和度量。

扩展:沙盒

       沙盒也叫沙箱,英文sandbox。在计算机领域指一种虚拟技术,且多用于计算机安全技术。安全软件可以先让它在沙盒中运行,如果有恶意行为,则禁止程序的进一步运行,而这不会对系统造成任何危害。


  • docker容器技术和虚拟机的对比

相同点:docker容器技术和虚拟机技术,都是虚拟化技术。

不同点:docker相对于虚拟机,少了虚拟机操作系统这一层,所以docker的效率比虚拟机要高。

  • docker的特性

  1. 文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里;
  2. 资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用Cgroup;
  3. 日志记录:docker将会收集和记录每个进程容器的标准流;(stdout/stderr/stdin),用于实时检索或批量检索;
  4. 变更管理:容器文件系统的变更可以提交到新的容器中,并可重复使用以创建更多的容器。无需使用模板或手动配置;
  5. 交互式shell:docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell;

Docker优点

  1. 相比于传统的虚拟化技术,Docker容器更加简洁高效;
  2. 传统虚拟机需要给每个VM安装操作系统,但docker不需要安装操作系统,它比VM小,比VM快;
  3. 容器使用的共享公共库和程序。
  4. 在隔离性方面,传统的虚拟机方式提供的是相对封闭的隔离。但

       这并不意味着Docker就不安全,Docker利用Linux系统上的多种防护技术实 现了严格的隔离可靠性,并且可以整合众多安全工具。

Docker的缺点

  1. 容器的隔离性没有虚拟化强;
  2. 共用Linux内核,安全性有先天缺陷;
  3. SELinux难以驾驭;
  4. 监控容器和容器排错是挑战。

  • Docker与虚拟化

       在计算领域,一般指的是计算虚拟化(Computing Virtualization),或通常说的服务器虚拟化。虚拟化的核心是对资源的抽象,目标往往是为了在同一个主机上同时运行多个系统或应用,从而提高系统资源的利用率,并且带来降低成本、方便管理和容错容灾等好处。

       从大类上分,虚拟化技术可分为基于硬件的虚拟化和基于软件的虚拟化。其中,真正意义上的基于硬件的虚拟化技术不多见,少数如网卡中的单根多IO虚拟化(Single Root I/O Virtualization and Sharing Specification,SR-IOV)等技术。

       基于软件的虚拟化从对象所在的层次,又可以分为应用虚拟化和平台虚拟化(通常说的虚拟机技术即属于这个范畴)。

平台虚拟化又分为:

1.完全虚拟化:虚拟机模拟完整的底层硬件环境和特权指令的执行过程,客户操作系统无需进行修改。例如IBM p和z系列的虚拟化、VMwareWorkstation、VirtualBox、QEMU等。

2.硬件辅助虚拟化:利用硬件(主要是CPU)辅助支持(目前x86体系结构上可用的硬件辅助虚拟化技术包括Intel-VT和AMD-V)处理敏感指令来实现完全虚拟化的功能,客户操作系统无需修改,例如VMware Workstation、Xen、KVM。

3.部分虚拟化:只针对部分硬件资源进行虚拟化,客户操作系统需要进行修改。现在有些虚拟化技术的早期版本仅支持部分虚拟化。

4.准虚拟化(paravirtualization):部分硬件接口以软件的形式提供给客户机操作系统,客户操作系统需要进行修改,例如早期的Xen。

5.操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。容器相关技术即在这个范畴。

      所以,Docker以及其他容器技术,都属于操作系统虚拟化这个范畴,操作系统虚拟化最大的特点就是不需要额外的supervisor支持。

Docker和传统虚拟化的不同点:


  • Docker的三个核心概念

      1.镜像(Image)

      2.容器(Container)

      3.仓库(Repository)

1.Docker镜像(Image)

       Docker镜像类似于虚拟机镜像,可以将它理解为一个只读的模板。例如:一个镜像可以包含一个基本的操作系统环境,里面仅安装了Apache应用程序(或用户需要的其他软件)。可以把它称为一个Apache镜像。

       镜像是创建Docker容器的基础。通过版本管理和增量的文件系统,Docker提供了一套十分简单的机制来创建和更新现有的镜像,用户甚至可以从网上下载一个已经做好的应用镜像,并直接使用。

2.Docker容器(Container)

        Docker容器类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像创建的应用运行实例。可以将其启动、开始、停止、删除,而这些容器都是彼此相互隔离的、互不可见的。

        可以把容器看做是一个简易版的Linux系统环境(包括root用户权限、进程空间、用户空间和网络空间等)以及运行在其中的应用程序打包而成的盒子。

注意:镜像自身是只读的。容器从镜像启动的时候,会在镜像的最上层创建一个可写层。

3.Docker仓库(Repository)

       Docker仓库类似于代码仓库,它是Docker集中存放镜像文件的场所。有时候会看到有资料将Docker仓库和仓库注册服务器(Registry)混为一谈,并不严格区分。实际上,仓库注册服务器是存放仓库的地方,其上往往存放着多个仓库。每个仓库集中存放某一类镜像,往往包括多个镜像文件,通过不同的标签(tag)来进行区分。

参考资料:《Docker技术入门与实战(第三版)》

发布了118 篇原创文章 · 获赞 42 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41490561/article/details/104796241