容器runtime

容器runtime是容器真正运行的地方,runtime需要和操作系统kernel紧密结合,为容器提供运行环境。

比如说,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.

lxd是lxc对应的容器管理工具;runc的管理工具是docker engine。docker engine 包含后台 deamon 和 cli 两个部分。我们通常提到 Docker,一般就是指的 docker engine。rkt 的管理工具是 rkt cli。

容器定义工具

容器定义工具允许用户定义容器的内容属性,这样容器就能够被保存,共享和重建

docker image 是 docker 容器的模板,runtime 依据 docker image 创建容器。

dockerfile 是包含若干命令的文本文件,可以通过这些命令创建出 docker image。

ACI (App Container Image) 与 docker image 类似,只不过它是由 CoreOS 开发的 rkt 容器的 image 格式。

仓库Registy

容器是通过image创建的,需要一个仓库统一存放image,这个仓库就叫做Registy

企业可以用 Docker Registry 构建私有的 Registry。

Docker Hub(https://hub.docker.com)是 Docker 为公众提供的托管 Registry,上面有很多现成的 image,为 Docker 用户提供了极大的便利。

Quay.io(https://quay.io/  )是另一个公共托管 Registry,提供与 Docker Hub 类似的服务。

容器OS

因为容器有runtime,所以几乎所有的linux、MAC OS和windows都可以运行容器

容器 OS 是专门运行容器的操作系统。与常规 OS 相比,容器 OS 通常体积更小,启动更快。因为是为容器定制的 OS,通常它们运行容器的效率会更高。

目前已经存在不少容器 OS,CoreOS、atomic 和 ubuntu core 是其中的杰出代表。

容器平台技术

容器核心技术能够让让容器在单个主机上运行,容器平台技术能够让容器作为集群在分布式环境中运行。容器平台技术如下图:

分为容器编排技术、容器管理平台、基于容器的PaaS。

容器编排引擎

基于容器的应用一般会采用微服务架构。在这中间架构下,应用被划分成不同的组件,并以服务的方式运行在各个容器中,通过API对外提供服务,为了保证服务的高可用,每个组件会运行多个相同的容器。

这些容器会组成集群,集群中的容器会根据业务动态的创建、迁移和销毁。

这样基于微服务架构的系统实际上是一个动态可伸缩的系统。容器编排引擎就排上用场了。

编排(orchestration),通常包括容器管理、调度、集群定义和服务发现。通过容器编排引擎、容器被有机的组合成微服务应用,实现业务需求。

docker swarm 是 Docker 开发的容器编排引擎。

kubernetes 是 Google 领导开发的开源容器编排引擎,同时支持 Docker 和 CoreOS 容器。

mesos 是一个通用的集群资源调度平台,mesos 与 marathon 一起提供容器编排引擎功能。

以上三者是当前主流的容器编排引擎。

容器管理平台

容器管理平台是在容器编排引擎之上的一个更为通用的平台。通常容器管理平台能够支持多个编排引擎,抽象了编排引擎的底层实现细节。

比如:application catalog和一键应用部署

Rancher和Containership是容器管理平台的典型代表

容器支持技术

容器网络

容器使得网络变得复杂,用户需要专门的解决方案来管理容器与容器,容器与其他实体之间的连通性和隔离性。

docker network是docker原生的解决方案。

服务发现

微服务的最大特点是动态变化,当负载增加时,集群会自动创建新的容器;负载减小,多余的容器就会被销毁。容器也会根据主机的资源情况在不同主机上迁移,容器的IP和端口也随之改变。

在这种情况下,必须要让客户端能够知道如何访问容器提供的服务。这就是服务发现的工作。

服务发现会保存集群中所有微服务的最新信息,比如IP和端口,对外提供的API,提供服务和查询等。

比较主流的是etcd,consul,zookeeper。

每天学一点Docker(2)的更多相关文章

  1. 每天学一点Docker(4)-深入了解容器概念

    什么是容器? 容器是一个自包含,可移植,轻量级的软件打包技术.是应用程序在任何地方几乎以相同方式运行.开发人员在开发机上创建好容器,无需任何修改就能在虚拟机,云服务器或公有云主机上运行. 容器与虚拟机 ...

  2. 每天学一点Docker(6)——镜像和DockerFile

    镜像的分层结构: 实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的.比如我们现在构建一个新的镜像,Dockerfile 如下: ① 新镜像不再 ...

  3. 每天学一点Docker(5)——了解Docker架构

    Docker的核心组件: 1.Docker客户端 - Client 2.Docker服务器 - Docker deamon 3.Docker镜像 - Image 4.仓库 - Registry 5.D ...

  4. 每天学一点Docker(3)(制作你的第一个容器)

    今天开始制作第一个容器,其实很简单 首先你要准备这些条件: 1.一个Ubuntu系统 2.这个系统能够联网,最起码ping www.baidu.com是可以的 这些准备条件准备好了,接下来就开始做准备 ...

  5. 每天学一点Docker(1)

    Docker能做些什么? 1.docker能够解决虚拟机能够解决的问题 2.隔离应用依赖 3.创建应用镜像并复制 4.创建容易分发的即启即用的应用 5.docker的想法是创建软件程序可移植的轻量容器 ...

  6. 学一点 MYSQL 双机异地热备份—-MYSQL主从,主主备份原理及实践

    简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做 ...

  7. 每天学一点Python

    9月11日 1.用List实现Python里的?:条件表达式 ["false","true"][判断条件] 其实就是一个List[0]还是List[1]的问题. ...

  8. 【每天学一点Linux】centos7 docker 启动cpu100% 飙升居高不下 无法关机 无法杀死进程

    目前不知道什么原因. 重装了docker后仍然不行.安装方式为yum(在线和本地方式). 后来使用了下载static压缩包的方式来使用,就没有再出现如题的问题了.安装包地址为:https://down ...

  9. 学一点Git--20分钟git快速上手

    (图片已修复)在Git如日中天的今天,不懂git都不好意思跟人说自己是程序猿.你是不是早就跃跃欲试了,只是苦于没有借口(契机). 好吧,机会就在今天. 给我20分钟,是的,只要20分钟, 让你快速用上 ...

随机推荐

  1. 基于python2.7通过boto3实现ec2表格化

    #!/usr/bin/env python import xlwt,xlrd,datetime,json,os,xlutils.copy a={ 'VpcPeeringConnection': { ' ...

  2. JPA学习笔记(8)——映射双向一对多关联关系

    双向一对多关联关系 前面的博客讲的都是单向的,而本问讲的是双向的(双向一对多 = 双向多对一) 什么是双向? 我们来对照一下单向和双向 单向/双向 User实体类中是否有List< Order& ...

  3. 基于QT的异质链表实例

    所谓的异质链表就是的节点元素类型能够不同.本实例採用C++抽象类和多态实现. #include <QApplication> #include<QPushButton> #in ...

  4. PMP杂谈--PMP中一些easy忽视的地方

    识别干系人:这个过程是持续的,在整个项目的生命周期中都要持续识别干系人. 组织过程资产和事业环境因素:这两个东西在过程的输入中似乎常常看到,但有时候又看不到,不要纠结了 ,不要浪费脑细胞去背诵哪个有, ...

  5. java 可变參数列表

    Java SE5加入了可变參数列表特性 參数能够这样定义.(Object-args).可变參数用"..."来定义,args是可变參数的数组.举个样例: package sample ...

  6. MPSOC之8——启动及错误处理

    有了BOOT.BIN(fsbl+pmu+atl+uboot).uImage.uramdisk.image.gz,dtb文件,就可以启动了.把上述文件统统拷贝到SD卡,并设置开发板为SD卡启动. 0. ...

  7. BeautifulSoup 抓取网站url

    1 # -*- coding:utf-8 -*- 2 import urlparse 3 import urllib2 4 from bs4 import BeautifulSoup 5 6 url ...

  8. Mesos初步尝试

    记得几年前,用.net做分布式批处理的时候环境搭建很麻烦,虽然参数的分片算法.配置都搞定了,但是.net虚拟机的环境建立是个头疼的事: 节点要自己手工建 环境变量没法从前往后传递 批处理程序改动后的分 ...

  9. SVN 安装与使用教程总结

    转载:http://www.cnblogs.com/armyfai/p/3985660.html SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需 ...

  10. 《分布式系统原理介绍》【PDF】下载

    内容简介 分布式系统理论体系非常庞大,涉及知识面也非常广博,本文精心选择了部分在工程实践中应用广泛.简单有效的分布式理论.算法.协议加以介绍.全文分为两大部分,第一部分介绍了分布式系统的一些基本概念并 ...