| 导语 前面我们介绍了什么是容器,那么这篇文章我们继续跟大家讲解什么是docker。 docker是目前最火的LXC高级容器引擎,docker到现在几乎是容器的代名词了,所以学习容器从docker入手是非常正确的!
一、docker的介绍
docker由来。
2010年dotCloud公司在旧金山成立,PAAS平台的服务供应商;2013年dotCloud更名为Docker股份有限公司(Docker,Inc)。Docker公司专注开源容器引擎的开发,他们的容器引擎产品就叫docker,基于go语言,并遵从Apache2.0协议。
上一篇文章我们跟大家介绍了什么是容器技术,容器技术的底层支持其实就是Linux Container(LXC)技术,LXC技术在 linux 2.6 的 kernel 里就已经存在了,但是LXC设计之初并非为专门为PAAS云计算考虑的,所以LXC缺少一些标准化的管理手段,那时候LXC想用好非常费劲。于是,docker发现了这点,然后针对LXC做了上层标准管理方面的支持,让LXC更加好用。
那么为什么dotCloud公司能发现这个机遇搞出个docker然后声名大噪呢?就像为什么马云能在中国、在合适的时间创立了阿里巴巴,做了中国首富... 其实,这都是时代的造就。我们深入分析IT架构的发展变革史就能明白一些东西了。
早期,我们IT行业要成功开发出一个产品,那么要关心的的东西太多了。机房选址、服务器硬件、网络设备、布线、上架、装系统、搭环境、开发、测试... 只要是跟IT相关的你都得去关心安排好。这个时期是传统IT管理与建设的初期,IT资源成本很高,涉及的人才成本也高。
云计算IAAS时代,AWS、腾讯云、阿里云的出现解决了早期传统IT管理的痛苦,用户有了云将不再面对硬件底层管理的问题,开发和测试都是在云主机上操作。然而,云主机就是一个个不一样的操作系统,硬件底层管理问题没有了,但是中间件相关的问题依然存在!IT运维人员要为开发测试人员提供完善的、稳定的云主机环境,这个过程也是相对复杂的,因为开发测试人员要求的环境也是多种多样,IT运维人员需要花费一定的时间和精力去维护和完善。当前大部分公司还是处在这个阶段。
容器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 采用的是 (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。我想云计算发展到了现在,PAAS容器云时代已经慢慢步入舞台了。之前大家进入云计算领域,一般是从KVM、OpenStack入手。那么容器云时代,你可以从Docker、Kubernetes入手。其实本人写到这,有个很强烈的感受,那就是技术更新实在是太快了,本人之前花了两三年的时间掌握了KVM、OpenStack。本想吃点老本轻松一下,可是发现,根本就不能有这想法,因为容器的到来必将对OpenStack这样的平台有一定的冲击。IT一直都是朝着轻量、高性能、高可用的模式向前发展。所以,我们只能不断学习。不然,就会落下!
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。