今天小编给大家分享的是Docker容器的由来的详细介绍,相信大部分人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,话不多说,一起往下看吧。
一、docker的介绍
2010年dotCloud公司在旧金山成立,PAAS平台的服务供应商;2013年dotCloud更名为Docker股份有限公司(Docker,Inc)。Docker公司专注开源容器引擎的开发,他们的容器引擎产品就叫docker,基于go语言,并遵从Apache2.0协议。
创始人 Solomon
上一篇文章我们跟大家介绍了什么是容器技术,容器技术的底层支持其实就是Linux Container(LXC)技术,LXC技术在 linux 2.6 的 kernel 里就已经存在了,但是LXC设计之初并非为专门为PAAS云计算考虑的,所以LXC缺少一些标准化的管理手段,那时候LXC想用好非常费劲。于是,docker发现了这点,然后针对LXC做了上层标准管理方面的支持,让LXC更加好用。
那么为什么dotCloud公司能发现这个机遇搞出个docker然后声名大噪呢?就像为什么马云能在中国、在合适的时间创立了阿里巴巴,做了中国首富... 其实,这都是时代的造就。我们深入分析IT架构的发展变革史就能明白一些东西了。
早期,我们IT行业要成功开发出一个产品,那么要关心的的东西太多了。机房选址、服务器硬件、网络设备、布线、上架、装系统、搭环境、开发、测试... 只要是跟IT相关的你都得去关心安排好。这个时期是传统IT管理与建设的初期,IT资源成本很高,涉及的人才成本也高。
图1 早期机房建设和维护工作
云计算IAAS时代,AWS、腾讯云、阿里云的出现解决了早期传统IT管理的痛苦,用户有了云将不再面对硬件底层管理的问题,开发和测试都是在云主机上操作。然而,云主机就是一个个不一样的操作系统,硬件底层管理问题没有了,但是中间件相关的问题依然存在!IT运维人员要为开发测试人员提供完善的、稳定的云主机环境,这个过程也是相对复杂的,因为开发测试人员要求的环境也是多种多样,IT运维人员需要花费一定的时间和精力去维护和完善。当前大部分公司还是处在这个阶段。
虚拟机 vs 容器 架构区别
容器PAAS时代,这个时代即将到来!(其实,已经来了)。容器技术的出现就是为了解决上面两个时期遗留的痛点问题。有了容器技术,开发者更加专注于程序的开发和测试,开发结束后能快速方便的把开发好的APP迁移到另外一个容器环境里。简单来说,开发人员只需为应用创建一次运行环境,就可以在任何环境里运行;Build Once, Run Anywhere。对于IT运维人员来说,也是好事!再也不用苦逼的为开发人员搞一套又一套不一样的开发环境了,搞出一套PAAS平台,随便让开发使,他们再怎么折腾也不会改变底层的东西,所以不用花大力气去维护这些环境;Configure Once, Run Anything。既然这个容器PAAS这么牛逼,那么想做的人也是非常多,docker公司之所以能占领先机搞定,主要是因为它在这领域有一定的积累,之前也跟CoreOS合作过(CoreOS也是做容器技术方面很牛的公司,后来跟docker分道扬镳,Rocket是CoreOS发布的跟docker竞争的产品)。所以,在云计算PAAS风口上,docker在合适的时间通过自己的技术积累发布了这套开源容器管理引擎,想不出名也难了!
二、 docker的组成架构
docker设想是交付运行环境如同海运,OS如同一个货轮,每一个在OS基础上的软件都如同一个集装箱,用户可以通过标准化手段自由组装运行环境,同时集装箱的内容可以由用户自定义,也可以由专业人员制造。这样,交付一个软件,就是一系列标准化组件的集合的交付,如同乐高积木,用户只需要选择合适的积木组合,并且在最顶端署上自己的名字(最后个标准化组件是用户的app)。
要实现这样的集装箱货轮海运的功能,那么docker是如何去设计如何区做的呢?我们先从docker的架构说起。
docker主要由以下模块组成:
Docker 客户端 - Client
Docker 服务器 - Docker daemon
Docker 镜像 - Image
Docker 仓库 - Registry
Docker 容器 - Container
docker经典架构图
Docker 采用的是 (C/S) 架构模式,使用远程REST API来管理和创建Docker容器。既然是采用REST模式,所以客户端和服务端可以不用在一个host上,可以分布式管理部署。
Docker 客户端 - Client
docker的客户端分命令和API两种类型。docker 的命令一般在系统安装好docker包后就可以使用,linux下直接是docker开头,可以用docker --help命令查看所有能运行的命令。docker的命令也非常好记,跟linux命令一样,用多了自然就会了;而且学习docker最好的也是从命令入手。
docker的API一般是写脚本或者开发的时候用比较多,而且都是REST风格的,用命令交互的话可以结合CURL使用。用API能做创建、删除、修改、查询等一系列操作,不过还得结合编程语言使用才会比较强大。
Docker 服务器 - Docker daemon
docker daemon就是docker的主服务,docker.service。在linux操作系统下,安装好了docker服务我们就可以使用systemctl start/status/stop docker.service去操作docker的服务。这个服务非常重要,如果你系统的docker.service存在异常,那么你的所有docker关联的组件都会出错。
Docker 镜像 - Image
docker的镜像这个很容易理解,如果你玩过vmware或者openstack的话就很容易懂了,vmware和openstack都有镜像模版的概念,我们要衍生创建虚拟机,就可以通过镜像模版来快速部署和生成相同类型的VM。docker的image也是一个道理,通过不同类型的模版,比如redis镜像、nginx镜像来快速创建出容器。好比复制克隆,只要资源够,想生成多少就多少。生成出新的容器你可以使用,然后到时候你又可以打包成镜像。有了镜像这个功能,为生产提供了很好的打包、迭代、传递方式。
Docker 仓库 - Registry
Registry就是仓库的意思,我们上面提到docker有镜像,那么镜像会因为业务的需要以不同类型的方式存在。所以,这么多类型的镜像如果没有一个很好的机制去管理,那么肯定会乱套。好比一生产车间,生产需要各种各样的螺丝钉、齿轮等配件,如果没有一个很好的仓库管理员负责对配件进行管理,那么车间里将乱七八糟。同样的,docker 镜像也需要标准化管理,那么负责这块功能的模块就是Registry。不过,要注意的是Registry分共有和私有两种。Docker Hub(https://hub.docker.com/) 是默认的 Registry,由 Docker 公司自己维护,上面有数以万计的镜像,用户可以自由下载和使用。 不过,使用公有镜像速度会很慢(加上GFW的原因),一般公司内部使用docker的话都得搭建私有仓库,不然很影响效率。
Docker 容器 - Container
Container就是容器实例了,类比KVM生成的虚拟机。Container是运行时状态,我们可以通过docker命令和API去控制和改变Container的状态,比如start、stop等等。上面所讲的client、daemon、image 和registry都是为了Container的运行稳定而服务的。
以上就是Docker容器的由来的详细介绍了,看完之后是否有所收获呢?如果想了解更多相关内容,欢迎关注亿速云行业资讯!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。