每天学一点Docker(2)
容器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)的更多相关文章
- 每天学一点Docker(4)-深入了解容器概念
什么是容器? 容器是一个自包含,可移植,轻量级的软件打包技术.是应用程序在任何地方几乎以相同方式运行.开发人员在开发机上创建好容器,无需任何修改就能在虚拟机,云服务器或公有云主机上运行. 容器与虚拟机 ...
- 每天学一点Docker(6)——镜像和DockerFile
镜像的分层结构: 实际上,Docker Hub 中 99% 的镜像都是通过在 base 镜像中安装和配置需要的软件构建出来的.比如我们现在构建一个新的镜像,Dockerfile 如下: ① 新镜像不再 ...
- 每天学一点Docker(5)——了解Docker架构
Docker的核心组件: 1.Docker客户端 - Client 2.Docker服务器 - Docker deamon 3.Docker镜像 - Image 4.仓库 - Registry 5.D ...
- 每天学一点Docker(3)(制作你的第一个容器)
今天开始制作第一个容器,其实很简单 首先你要准备这些条件: 1.一个Ubuntu系统 2.这个系统能够联网,最起码ping www.baidu.com是可以的 这些准备条件准备好了,接下来就开始做准备 ...
- 每天学一点Docker(1)
Docker能做些什么? 1.docker能够解决虚拟机能够解决的问题 2.隔离应用依赖 3.创建应用镜像并复制 4.创建容易分发的即启即用的应用 5.docker的想法是创建软件程序可移植的轻量容器 ...
- 学一点 MYSQL 双机异地热备份—-MYSQL主从,主主备份原理及实践
简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做 ...
- 每天学一点Python
9月11日 1.用List实现Python里的?:条件表达式 ["false","true"][判断条件] 其实就是一个List[0]还是List[1]的问题. ...
- 【每天学一点Linux】centos7 docker 启动cpu100% 飙升居高不下 无法关机 无法杀死进程
目前不知道什么原因. 重装了docker后仍然不行.安装方式为yum(在线和本地方式). 后来使用了下载static压缩包的方式来使用,就没有再出现如题的问题了.安装包地址为:https://down ...
- 学一点Git--20分钟git快速上手
(图片已修复)在Git如日中天的今天,不懂git都不好意思跟人说自己是程序猿.你是不是早就跃跃欲试了,只是苦于没有借口(契机). 好吧,机会就在今天. 给我20分钟,是的,只要20分钟, 让你快速用上 ...
随机推荐
- 基于python2.7通过boto3实现ec2表格化
#!/usr/bin/env python import xlwt,xlrd,datetime,json,os,xlutils.copy a={ 'VpcPeeringConnection': { ' ...
- JPA学习笔记(8)——映射双向一对多关联关系
双向一对多关联关系 前面的博客讲的都是单向的,而本问讲的是双向的(双向一对多 = 双向多对一) 什么是双向? 我们来对照一下单向和双向 单向/双向 User实体类中是否有List< Order& ...
- 基于QT的异质链表实例
所谓的异质链表就是的节点元素类型能够不同.本实例採用C++抽象类和多态实现. #include <QApplication> #include<QPushButton> #in ...
- PMP杂谈--PMP中一些easy忽视的地方
识别干系人:这个过程是持续的,在整个项目的生命周期中都要持续识别干系人. 组织过程资产和事业环境因素:这两个东西在过程的输入中似乎常常看到,但有时候又看不到,不要纠结了 ,不要浪费脑细胞去背诵哪个有, ...
- java 可变參数列表
Java SE5加入了可变參数列表特性 參数能够这样定义.(Object-args).可变參数用"..."来定义,args是可变參数的数组.举个样例: package sample ...
- MPSOC之8——启动及错误处理
有了BOOT.BIN(fsbl+pmu+atl+uboot).uImage.uramdisk.image.gz,dtb文件,就可以启动了.把上述文件统统拷贝到SD卡,并设置开发板为SD卡启动. 0. ...
- BeautifulSoup 抓取网站url
1 # -*- coding:utf-8 -*- 2 import urlparse 3 import urllib2 4 from bs4 import BeautifulSoup 5 6 url ...
- Mesos初步尝试
记得几年前,用.net做分布式批处理的时候环境搭建很麻烦,虽然参数的分片算法.配置都搞定了,但是.net虚拟机的环境建立是个头疼的事: 节点要自己手工建 环境变量没法从前往后传递 批处理程序改动后的分 ...
- SVN 安装与使用教程总结
转载:http://www.cnblogs.com/armyfai/p/3985660.html SVN简介: 为什么要使用SVN? 程序员在编写程序的过程中,每个程序员都会生成很多不同的版本,这就需 ...
- 《分布式系统原理介绍》【PDF】下载
内容简介 分布式系统理论体系非常庞大,涉及知识面也非常广博,本文精心选择了部分在工程实践中应用广泛.简单有效的分布式理论.算法.协议加以介绍.全文分为两大部分,第一部分介绍了分布式系统的一些基本概念并 ...