设为首页 收藏本站
查看: 698|回复: 0

[经验分享] 第一章docker学习历程

[复制链接]

尚未签到

发表于 2018-5-26 14:53:18 | 显示全部楼层 |阅读模式


Dcoker 概述

docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源代码托管在Github上,基于go语言并遵从Apache2.0协议开源;docker让开发者可以打包他们的应用以及依赖包到一个可移植的container中,然后发布到任何流行的Linux机器上;以前发布软件时,以二进制文件,如office-2016.exe;扩展LXC为LinuxContainer的简写;Linux Container容器是一种内核虚拟化技术,完全使用沙箱机制,可以提供轻量级的虚拟化,以便隔离进程和资源,而且无需要提供指令解释机制以及全虚拟化的其他复杂性;LXC主要通过来自kernel的namespace实现每个用户实例之间的相互隔离,相互之间不会有任何接口(类似iPhone的app);通过cgroup实现对资源的配额和度量;几乎没有性能开销,可以很容易地在机器和数据中心中运行;最重要的是他们不依赖于任何语言、框架或包装系统


  docker学习流程图
DSC0000.jpg docker各部分组件概念介绍:
容器的生态系统:

让大家先从整体上了解容器都包含那些技术,各种技术之间的相互关系是什么,然后再来看我们的教程都会涉及生态中的哪些部分;

容器核心技术:
    是指能够让container在host上运行起来的那些技术;包括容器规范、容器runtime、容器管理工具、容器定义工具、Registry以及容器OS,下面分别介绍;将展开讨论架构、镜像、容器、网络和存储;
    容器规范
        容器不光是Docker,还有其他容器,比如CoreOS的rkt;为了保证容器生态的健康发展,保证不同容器之间能够兼容,包含Docker、CoreOS、Google在内的若干公司共同成立了一个叫OpenContainerInitiative(OCI)的组织,其目是制定开放的容器规范;目前OCI发布了两个规范:runtimespec和imageformatspec;有了这两个规范,不同组织和厂商开发的容器能够在不同的runtime上运行;这样就保证了容器的可移植性和互操作性;
    容器runtime
        runtime是容器真正运行的地方;runtime需要跟操作系统kernel紧密协作,为容器提供运行环境;如果大家用过Java,可以这样来理解runtime与容器的关系;Java程序就好比是容器,JVM则好比是runtime;JVM为Java程序提供运行环境;同样的道理,容器只有在runtime中才能运行;lxc、runc和rkt是目前主流的三种容器runtime;lxc是Linux上老牌的容器runtime;Docker最初也是用lxc作为runtime;runc是Docker自己开发的容器runtime,符合oci规范,也是现在Docker的默认runtime,rkt是CoreOS开发的容器runtime,符合oci规范,因而能够运行Docker的容器
    容器管理工具
        容器管理工具对内与runtime交互,对外为用户提供interface,比如CLI;这就好比除了JVM,还得提供java命令让用户能够启停应用不是,lxd是lxc对应的管理工具,runc的管理工具是dockerengine;dockerengine包含后台deamon和cli两个部分;我们通常提到Docker,一般就是指的dockerengine;rkt的管理工具是rktcli;
    容器定义工具
        容器定义工具允许用户定义容器的内容和属性,这样容器就能够被保存,共享和重建;dockerimage是docker容器的模板,runtime依据dockerimage创建容器;dockerfile是包含若干命令的文本文件,可以通过这些命令创建出dockerimage;ACI(AppContainerImage)与dockerimage类似,只不过它是由CoreOS开发的rkt容器的image格式;
   Registry
        容器是通过image创建的,需要有一个仓库来统一存放image,这个仓库就叫做Registry;企业可以用DockerRegistry构建私有的Registry;DockerHub(https://hub.docker.com)是Docker为公众提供的托管Registry,上面有很多现成的image,为Docker用户提供了极大的便利;Quay.io(https://quay.io/)是另一个公共托管Registry,提供与DockerHub类似的服务;
    容器OS
        由于有容器runtime,几乎所有的Linux、MACOS和Windows都可以运行容器;但这不并没有妨碍容器OS的问世;容器OS是专门运行容器的操作系统;与常规OS相比,容器OS通常体积更小,启动更快;因为是为容器定制的OS,通常它们运行容器的效率会更高;目前已经存在不少容器OS,CoreOS、atomic和ubuntucore是其中的杰出代表;

进阶知识:
    包括将容器真正用于生成所必须的技术,包括多主机管理、跨主机网络、监控、数据管理、日志管理和安全管理;

容器平台技术
    容器核心技术使得容器能够在单个host上运行;而容器平台技术能够让容器作为集群在分布式环境中运行;在生态环境中占据着举足轻重的位置,对于容器是否能够落地,是否能应用于生产至关重要;我们将详细讨论容器编排引擎、容器管理平台和基于容器的PaaS,学习和实践业界最具代表性的开源产品;容器平台技术包括容器编排引擎、容器管理平台和基于容器的PaaS;
    容器编排引擎
        基于容器的应用一般会采用微服务架构;在这种架构下,应用被划分为不同的组件,并以服务的形式运行在各自的容器中,通过API对外提供服务;为了保证应用的高可用,每个组件都可能会运行多个相同的容器;这些容器会组成集群,集群中的容器会根据业务需要被动态地创建、迁移和销毁;大家可以看到,这样一个基于微服务架构的应用系统实际上是一个动态的可伸缩的系统;这对我们的部署环境提出了新的要求,我们需要有一种高效的方法来管理容器集群;而这,就是容器编排引擎要干的工作;所谓编排(orchestration),通常包括容器管理、调度、集群定义和服务发现等;通过容器编排引擎,容器被有机的组合成微服务应用,实现业务需求;dockerswarm是Docker开发的容器编排引擎;kubernetes是Google领导开发的开源容器编排引擎,同时支持Docker和CoreOS容器;mesos是一个通用的集群资源调度平台,mesos与marathon一起提供容器编排引擎功能;以上三者是当前主流的容器编排引擎
    容器管理平台
        容器管理平台是架构在容器编排引擎之上的一个更为通用的平台;通常容器管理平台能够支持多种编排引擎,抽象了编排引擎的底层实现细节,为用户提供更方便的功能,比如applicationcatalog和一键应用部署等;Rancher和ContainerShip是容器管理平台的典型代表;
    基于容器的PaaS
        基于容器的PaaS为微服务应用开发人员和公司提供了开发、部署和管理应用的平台,使用户不必关心底层基础设施而专注于应用的开发;Deis、Flynn和Dokku都是开源容器PaaS的代表;

容器支持技术
    面这些技术被用于支持基于容器的基础设施
    容器网络
        容器的出现使网络拓扑变得更加动态和复杂;用户需要专门的解决方案来管理容器与容器,容器与其他实体之间的连通性和隔离性;dockernetwork是Docker原生的网络解决方案;除此之外,我们还可以采用第三方开源解决方案,例如flannel、weave和calico;不同的方案设计和实现方式不同,各有优势和特定,我们可以根据实际需要来选型;
    服务发现
        动态变化是微服务应用的一大特点;当负载增加时,集群会自动创建新的容器;负载减小,多余的容器会被销毁;容器也会根据host的资源使用情况在不同host中迁移,容器的IP和端口也会随之发生变化;在这种动态的环境下,必须要有一种机制让client能够知道如何访问容器提供的服务;这就是服务发现技术要完成的工作;服务发现会保存容器集群中所有微服务最新的信息,比如IP和端口,并对外提供API,提供服务查询功能;etcd、consul和zookeeper是服务发现的典型解决方案;
    监控
        监控对于基础架构非常重要,而容器的动态特征对监控提出更多挑战;针对容器环境,已经涌现出很多监控工具和方案;dockerps/top/stats是Docker原生的命令行监控工具;除了命令行,Docker也提供了statsAPI,用户可以通过HTTP请求获取容器的状态信息;sysdig、cAdvisor/Heapster和WeaveScope是其他开源的容器监控方案;
    数据管理
        容器经常会在不同的host之间迁移,如何保证持久化数据也能够动态迁移,是Flocker这类数据管理工具提供的能力;
    日志管理
        日志为问题排查和事件管理提供了重要依据;dockerlogs是Docker原生的日志工具;而logspout对日志提供了路由功能,它可以收集不同容器的日志并转发给其他工具进行后处理;
    安全性
        对于年轻的容器,安全性一直是业界争论的焦点;OpenSCAP能够对容器镜像进行扫描,发现潜在的漏洞;

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-481472-1-1.html 上篇帖子: docker笔记(转自:陈沙克日志) 下篇帖子: Swarm 如何存储数据?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表