核心知识点:

1.Docker的构想:对应用的封装、分发、部署、运行的生命周期的管理,一次封装到处运行

2.Docker的优点:一站式解决方案

3.Docker由LXC演变而来,迟迟没有集成到Linux主流内核中阻碍了它的发展。

4.Docker相对于LXC所做的重大提升:容器管理工具、分层文件系统和镜像机制

一、Docker开源项目背景

Docker是基于Go语言实现的开源容器项目,诞生于2013年年初,最初的发起者是dotCloud公司。

Docker自开源后收到广泛的关注和讨论,目前已有多个相关项目(包括Docker三剑客、Kubernets等),逐渐形成了围绕Docker容器的生态体系。

由于Docker在业界造成的影响力实在太大,dotCloud后来直接改名Docker Inc,并专注于Docker相关技术和产品的开发。

Docker项目已加入Liunx基金会,并遵循Apache2.0协议,全部开源代码均在https://github.com/docker/docker上进行维护。

在Linux基金会最近一次关于“最受欢迎的云计算开源项目”的调查中,Docker仅次于2010年发起的OpenStack项目,并人处于上升趋势。

现在主流的Linux操作系统都已经支持Docker。

Docker的构想是要实现“Build,Skip and Run Any APP,Anywhere”,即通过对应用的封装(Packaging)、

分发(Distribution)、部署(Deployment)、运行(Runtime)生命周期进行管理,达到应用组件“一次封装,到处运行”的目的。

这里的应用组件,既可以是一个WEB应用、一个编译环境,也可以是一套数据库平台服务,甚至是一个操作系统或集群。

基于Linux平台上的多项开源技术,Docker提供了高效、敏捷和轻量级的容器方案,并支持部署到本地环境和多种主流平台。

可以说,Docker首次为应用的开发、运行和部署提供了“一站式”的实用解决方案

二、Linux容器技术——巨人的肩膀

跟大部分新兴技术的诞生一样,Docker也并非“从石头缝里蹦出来的”,而是站在前人的肩膀上,其中最重要的是Linux容器(Linux Containers,LXC)技术

IBM DeveloperWorks网站关于容器技术的描述十分准确:“容器有效地将由单个操作系统管理的资源划分到孤立地组中,以更好地在孤立地组之间平衡有冲突的资源使用需求。

与虚拟化相比,这既不需要指令级模拟,也不需要及时编译,容器可以在核心CPU本地运行指令,而不需要任何专门的解释机制。

此外,也避免了准虚拟化和系统调用替换中的复杂性。”

当然,LXC也经历了长期的演化。最早的容器技术可以追溯到1982年Unix系列操作系统上的chroot工具(直到今天,主流的Unix、Linux操作系统任然支持和带有该工具)。

早期的容器技术包括Sun Solaris操作系统上的Solaris Containers(2004年发布),FreeBSD操作系统上的FreeBSDjail(2000年左右出现),以及GUN/Linux-VServer和OpenVZ。

在LXC之前,这些相关技术经过多年的演化已经十分成熟和稳定,但是由于各种原因,它们并没有被很好地集成到主流地Linux内核中,用户使用起来并不方便

例如,用户如果要使用OpenVZ技术,需要先手动给操作系统打上特定地内核补丁方可使用,而且不同版本并不一致。

类似地困难造成了在很长地一段时间内,这些优秀的技术只流传于技术人员地小圈子中。

后来LXC项目借鉴了前人成熟地容器设计理念,并基于一些列新引入的内核特性,实现了更具扩展性的虚拟化容器方案。

更加关键的是,LXC终于被集成到了主流Linux内核中,进而成为了Linux系统轻量级容器的事实标准

从技术的层面上看,LXC已经趟过了绝大部分的“坑”,完成了容器技术实用化的大半历程。

三、从Linux容器到Docker

在LXC的基础上,Docker进一步优化了容器的使用体验,让它进入寻常百姓家。

首先,Docker提供了各种容器管理工具(如分发、版本、移植等)让用户无需关注底层的操作,可以更简单命令的管理和使用容器。

其次,Docker通过引入分层文件系统构建和高效的镜像机制,降低了迁移难度,极大的提升了用户体验。用户操作Docker容器就像操作应用自身一样简单。

早期的Docker代码实现是直接基于LXC的。自0.9版本开始,Docker开发了libcontainer项目,作为更广泛的容器驱动实现,从而替换掉了LXC的实现。

目前,Docker还积极推动成立了runC标准项目,试图让容器支持不在局限于Linux系统,而是更安全、更具扩展性。

简单的讲,读者可以将Docker容器理解为一种轻量级的沙河(sandbox)。每个容器内运行着一个应用,不同的容器相互隔离,容器之间也可以通过互联网互相通信。

容器的创建和停止都十分快速,几乎跟创建和终止原生应用一致;另外,容器自身对系统资源的额外需求也十分有限,远远低于传统虚拟机。

很多时候,甚至直接把容器当作应用本身也没有任何问题。

Docker的前世今生的更多相关文章

  1. 【docker系列2】docker 的前世今生

    Docker 入门,共 3 篇,将带大家进入 Docker 的世界.首先了解 Docker 的发展历程, 然后快速掌握 Docker 的基本使用: Docker 版本及内核兼容性选择是这部分的重点内容 ...

  2. Docker 的前世今生

    虚拟化 「要解释清楚 Docker,首先要解释清楚容器(Container)的概念」.要解释容器的话,就需要从操作系统说起.操作系统太底层,细说的话一两本书都说不清楚.这里就一句话来总结一下:操作系统 ...

  3. Docker大行其道—初识

    导读 随着分布式.云计算.大数据的火热爆发,大量的云计算集群出现,光凭计算机硬件配置的已经无法再次一较高下,虚拟化成为其中最核心的技术.虚拟化既可以通过硬件模拟,也可以通过操作系统层面去实现,近年来热 ...

  4. [docker swarm] 从单容器走向负载均衡部署

    背景 之前写过<<docker-compose真香>> 和<docker-compose.docker stack前世今生>两篇博客, 回顾一下思路: ① dock ...

  5. Docker基础修炼1--Docker简介及快速入门体验

    本文作为Docker基础系列第一篇文章,将详细阐述和分析三个问题:Docker是什么?为什么要用Docker?如何快速掌握Docker技术? 本系列文章中Docker的用法演示是基于CentOS7进行 ...

  6. 自己编写k8s

    ## 基于Docker和Kubernetes的企业级DevOps实践训练营 ### 课程准备 1. 离线镜像包 百度:https://pan.baidu.com/s/1N1AYGCYftYGn6L0Q ...

  7. 【云计算】docker前世今生

    下一代云计算模式:Docker正掀起个性化商业革命 作者: 吴宁川  来源: ITValue  发布时间: 2015-09-20 10:41  阅读: 12976 次  推荐: 24          ...

  8. docker学习1:docker前世今生

    Docker简介 Docker是2013发起的一个项目,早在2013年,Docker自诞生起,就是整个技术界的明星项目,当时我还在上海实习,就在各种技术媒体上看到了Docker的介绍文章,很多技术媒体 ...

  9. docker4dotnet #4 使用Azure云存储构建高速 Docker registry

    使用Docker来构建应用程序最常见的操作就是 docker run 或者 docker pull了,但是由于众所周知的原因,在国内想要高速稳定的获取docker hub上面的资源并不是件容易的事情, ...

随机推荐

  1. 【VBA】获取当前工作表的用户名

    如何使用VBA获取当前工作表的用户名呢?请看如下代码: Sub 获取当前工作表的用户名() MsgBox "当前工作表的用户名为:" & Application.UserN ...

  2. PLSQL Developer设置技巧

    1.右键菜单 在PL/SQL Developer(下面简称PLD)中的每一个文本编辑窗口,如SQL Window,Command Window和Porgram Window,右键点击某个对象名称,会弹 ...

  3. mongo: 删

    删除:remove db.CollectionName.remove(查询表达式,选项); 查询表达式:匹配要删除的文档,它是一个json对象 选项:{justOne:true/false},是否只删 ...

  4. spring集成PHPRPC及使用

    PHPRPC,它的商业版本是Hprose.这里仅记录其使用方法.其它相关内容可自行搜索. 对于开源的东西,建议大家看看其源码. 1.需要引入的jar包:phprpc_spring.jar,http:/ ...

  5. MVC组件分析

    MVC组件分析   2 System.Web.Mvc V 4.0.0.0 组件分析 2.1 Routing组件(路由选择) Routing的作用就是负责分析Url Action的要求• 必须是一个公有 ...

  6. Android 使用SwipeBackLayout实现滑动返回上一级页面——实战来袭

    我们知道.APP在设计上习惯性的把返回button放在屏幕的左上角,那么,在非常多时候(尤其是大屏幕手机),操作改返回button,就会有诸多不便了.为了更加方便实现"返回"功能. ...

  7. 自己定义控件三部曲视图篇(二)——FlowLayout自适应容器实现

    前言:我最大的梦想,就是有一天.等老了坐在摇椅上回望一生,有故事给孩子们讲--. 相关文章: <Android自己定义控件三部曲文章索引>:http://blog.csdn.net/har ...

  8. java网络编程(2)InetAddress 类及udp协议

    InetAddress 类 JDK中为开发网络应用程序提供了java.net包,该包下的类和接口差点儿都是为网络编程服务的. InetAddress:用于描写叙述IP地址的对象 InetAddress ...

  9. Android开发系列之系统源码目录

    相信大家对于Google给出的那副经典Android架构图非常的熟悉,从下往上依次是Linux内核层(主要是负责硬件管理调度),HAL层(主要是硬件抽象层),libs层+Runtime,Framewo ...

  10. Hadoop2.6.0版本MapReudce示例之WordCount(二)

    继<Hadoop2.6.0版本MapReudce示例之WordCount(一)>之后,我们继续看MapReduce的WordCount示例,看看如何监控作业运行或查看历史记录,以及作业运行 ...