day01-Docker

  前沿:Docker几乎是容器的代名词,围绕Docker还有一个生态系统,Docker是这个生态环境的基石。

  容器生态系统包含:核心技术、平台技术和支持技术

 1、核心技术:指能够让container在host上运行起来的那些技术

  

  1.1、容器规范:容器不光是Docker,还有其他容器,比如CoreOS的rkt。为了保证容器生态的健康发展,保证容器之间能兼容,包含Docker、CoreOS、Google在内的若干公司共同成立一个叫Open Container Initiative(OCI)的组织,其目的是制定开放的容器规范。目前OCI发布了两个规范:runtime spec和image format spec。有了这两个规范,不同组织和厂商开发的容器能够在不同的runtime上运行。这样就保证了容器的可移植性和互操作性。

  1.2、容器runtime:lxc、runc和rkt是目前主流的三种容器

  runtime是容器真正运行的地方。runtime需要跟操作系统kernel紧密协作,为容器提供运行环境。容器好比Java程序,runtime好比JVM。JVM为Java程序提供运行环境。同样的道理,容器只有在runtime中才能运行。

  1. lxc是Linux上老牌的容器runtime。Docker最初也是用lxc作为runtime。
  2. runc是Docker自己开发的容器runtime,符合OCI规范,也是现在Docker的默认runtime。
  3. rkt是CoreOS开发的容器runtime,符合OCI规范,因而能够运行Docker容器。

  1.3、 容器管理工具:光有runtime还不够,用户还得有工具来管理容器。容器管理工具对内与runtime交互,对外为用户提供interface,比如CLI。这好比处理JVM,还得提供Java命令让用户能够启动应用。

  1. lxc对应的管理工具:lxd
  2. runc对应的管理工具:docker engine。docker engine包含后台daemon和cli两个部分。我们通常提到Docker,一般就是指的docker engine。
  3. rkt对应的管理工具:rkt cli。

  1.4、容器自定义工具:运行用户定义容器内容和属性,这样容器就能够被保存、共享和重建。

  1. docker image:是docker容器模板,runtime根据docker image创建容器;
  2. dockerfile:是包含若干命令的文本文件,可以通过这些命令创建出docker image;
  3. ACI(App Container Image)与docker image类似,只不过它是由CoreOS开发的rkt容器的image格式。

  1.5、Registry:容器通过image创建的,需要有一个仓库来统一存放image,这个仓库就叫做Registry。

  1. 企业可以用Docker Registry构造自己私有的Registry;
  2. Docker Hub:是Docker为公众提供的托管Registry,上面有很多现成的image,为Docker用户提供了极大的便利;
  3. Quay.io:是另一个公共托管Registry,提供与Docker Hub类似的服务。

   1.6、容器OS:由于有容器runtime,几乎所有的Linux、MAC OS和Windows都可以运行容器。但这并没有妨碍容器OS的问世。

   容器OS是专门运行容器的操作系统。与常规OS相比,容器OS通常体积更小,启动更快。CoreOS、atomic和ubuntu core是其中的杰出代表。

 2、平台技术:核心技术使得容器能够在单个host上运行。而平台技术能够让容器作为集群在分布式环境中运行。

   

   2.1、容器编排(orchestration)引擎:基于容器的应用一般都会采用微服务架构。在这种架构下,应用被划分为不同的组件,并以服务的形式运行在各自的容器中,通过API对外提供服务。为了保证应用的高可用,每个组件都可能运行在各自的容器中。这些容器会组成集群,集群中的容器会根据业务需要被动态地创建、迁移和销毁。

  微型服务是另一项突破性的技术,而不是一种使用容器进行部署的软件体系结构。微服务是一种Web服务的轻量级实现,与标准web服务相比,它的启动速度非常。这是通过在一个服务中打包一个功能单元并将其嵌入到一个轻量级的web服务器二进制文件中来实现的。

  可以看到,这样一个基于微服务架构的应用系统实际上是一个动态可伸缩的系统。这对我们的部署环境提出了新的要求,我们需要一种高效的方法来管理容器集群。而这,就是容器编排引擎要干的工作。

  编排:所谓编排,通常包括容器管理、调度、集群定义和服务发现等。通过容器编排引擎,容器被有机的组合成微服务应用,实现业务需求。以下是当前主流的容器编排引擎:

  在生产环境中,Docker、Rocker和其他容器平台不能在单个主机上运行,原因是它们暴露于单个故障点。当一个容器集合单个主机上运行时,如果主机失败,在该主机上运行的所有容器也将失败。为了避免这种情况,需要使用容器主机集群。解决这个问题的第一个开放源码的容器集群平台之一是Apache Mesos。它最初作为一个研究项目在加州大学伯克利分校开发,后来在2012年左右转移到了Apache。Google采取了类似的步骤实现一个先进的、开源的容器集群管理系统,名为Kubernetes。Docker还启动了一个名为Docker Swarm的解决方案。

  1. docker swarm:是Docker开发的容器编排引擎;
  2. kubernetes:是Google领导开发的开源容器编排引擎,同时支持Docker和CoreOS容器。是一个开源的Linux容器自动化运维平台,它消除了容器化应用程序在部署、伸缩时涉及到的许多手动操作。话句话说,你可以将很多台主机组合成集群来运行Linux容器,而Kubernetes可以帮助你简单高效地管理那些集群。构成这些集群的主机还可以跨越公有云、私有云以及混合云。
  3. mesos:是一个通用的集群资源调度平台,mesos与marathon一起提供容器编排引擎功能。Mesos是Apache软件基金会维护的一个开源软件,它负责管理一批服务器集群,并将所有服务器集群的CPU、GPU、内存、存储、端口和其它相关计算资源进行了抽象统一,让用户进行动态配置和使用,提高整个系统的资源利用率,并以集群分布式的方式保证系统运行的高可用和弹性扩展。Marathon是一个成熟的、轻量级的,扩展性很强的Apache Mesos的容器编排框架,它主要用来调度和运行常驻服务(long-running service),提供了友好的界面和Rest API来创建和管理应用。

  2.2、容器管理平台:是架构在容器编排引擎之上的一个更为通用的平台。通常容器管理平台能够支持多种编排引擎,抽象了编排引擎的底层实现细节,为客户提供更方便的功能,比如application catalog和一键部署等。Rancher和ContainerShip是容器管理平台的典型代表。

  2.3、基于容器的PaaS:为微服务应用开发人员和公司提供了开发、部署和管理应用的平台,使用户不必关心底层基础设施而专注于应用开发。Deis、Flynn和Dokku都是开源容器Pass的代表。

 3、容器支持技术:

   

  3.1、容器网络: 容器的出现使网络拓扑变得更加动态和复杂。用户需要专门的解决方案来管理容器与容器、容器与其他实体之间的连通性和隔离性。docker network是Docker原生所谓网络解决方案。除此之外,我们还可以采用第三方开源解决方案,例如flannelweavecalico。不同的方案设计和实现方式不同。

  3.2、服务发现:动态变化是微服务应用的一大特点。当负载增加时,集群会自动创建新的容器;负载减小,多余的容器会被销毁。容器会根据host的资源使用情况在不同host中迁移,容器的IP和端口也会随之发生变化。

  这种动态的环境下,必须要有一种机制让client能够知道如何访问容器提供的服务。这就是服务发现技术要完成的工作。

  服务发现会保存容器集群中所有微服务最新的信息,比如IP和端口,并对外提供API,提供服务查询功能。etcd、consul和zookeeper是服务发现典型解决方案。

  3.3、监控:监控对于基础架构非常重要,而容器的动态特征对监控提出更多挑战。针对容器环境,已经有很多监控工具和方案:docker ps/top/stats是Docker原生的命令行监控工具。除了命令行,Docker也提出了stats API,用户可以通过HTTP请求获取容器的状态信息。sysdig、cAdvisor/Heapster和Weave Scope是其他开源容器监控方案。

  3.4、数据管理:容器经常会在不同host之间迁移,如何保存持久化数据也能够动态迁移,是Flocker这类数据管理工具提供的能力。

  3.5、日志管理:日志为问题排查和事件管理提供了重要依据。docker log是Docker原生的日志工具。而logspout对日志提供了路由功能,它可以收集不同容器的日志并转发给其他工具进行后续处理。

  3.6、安全性:OpenSCAP能够对容器镜像进行扫描,发现潜在的漏洞。

 

 

注:

1、较旧的Docker称为docker或docker-engine。

 

 

 -------------------------------------------------------------------------------

 参考:

https://mp.weixin.qq.com/s/Mn8wQiyKInB_RJ7MWb0Bgw

https://mp.weixin.qq.com/s/HYkAmiOiSwmeJJIKhSVovQ

https://mp.weixin.qq.com/s/OVE0LUHeH9vRSIgikS7jCQ
 -------------------------------------------------------------------------------

 

 

-----------------------------------我是结束线---------------------------------------

posted @ 2021-12-20 11:10  小吴的日常  阅读(76)  评论(0)    收藏  举报