专栏首页宝哥的专栏Docker系列学习文章 - 什么是docker?(二)
原创

Docker系列学习文章 - 什么是docker?(二)

| 导语 前面我们介绍了什么是容器,那么这篇文章我们继续跟大家讲解什么是docker。 docker是目前最火的LXC高级容器引擎,docker到现在几乎是容器的代名词了,所以学习容器从docker入手是非常正确的!

一、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。我想云计算发展到了现在,PAAS容器云时代已经慢慢步入舞台了。之前大家进入云计算领域,一般是从KVM、OpenStack入手。那么容器云时代,你可以从Docker、Kubernetes入手。其实本人写到这,有个很强烈的感受,那就是技术更新实在是太快了,本人之前花了两三年的时间掌握了KVM、OpenStack。本想吃点老本轻松一下,可是发现,根本就不能有这想法,因为容器的到来必将对OpenStack这样的平台有一定的冲击。IT一直都是朝着轻量、高性能、高可用的模式向前发展。所以,我们只能不断学习。不然,就会落下!

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Docker系列学习文章 - 如何安装Docker(三)

    | 导语 前面介绍了关于容器和docker的知识,那么从这篇文章开始,正式进入实操,带大家手把手安装docker环境。

    宝哥@devops运维
  • Docker系列学习文章 - docker镜像基本操作(五)

    | 导语上一篇文章我们讲解了如何简单运行一个Nginx、Mysql、Redis容器服务。我们运行的很顺利,因为我们就用了一条命令就搞定了。确实,docker就是...

    宝哥@devops运维
  • Docker系列学习文章 - 镜像仓库的介绍(七)

    | 导语 前面我们讲了镜像的制作,知道了镜像是怎么生成的。但是镜像制作好了后,要怎么管理?他们存在哪里。通过本篇文章的讲解,大家就清楚了。

    宝哥@devops运维
  • 学习docker on windows (1): 为什么要使用docker

    为什么要用Docker? 如果我们想使用某种pc软件, 那么在互联网上查找并安装软件的流程大致如下图: ? 那么这就有几个问题要弄清楚: 从哪里获得软件 Ap...

    solenovex
  • centos中docker的安装

    糊糊糊糊糊了
  • 两小时入门 Docker

    Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2....

    芋道源码
  • 必学必会 ● 1小时入门 Docker,让部署应用更快更简单

    Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2....

    我的小碗汤
  • 两小时入门 Docker

    Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2....

    蓝默空间
  • 两小时入门 Docker

    Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2....

    好好学java
  • docker入门总结,从使用的角度谈起

    大凡先进技术的产生,都不是凭空捏造的,更不是花花瓶子作秀博眼球的。或是要解决某些需求,某些痛点。有其存在的道理和价值。

    特立独行的猫a

扫码关注云+社区

领取腾讯云代金券