Dock学习(一):容器介绍
一、什么是容器
1、容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。开发人员在自己的笔记本上创建并测试好的容器,无需任何修改就能够在生产系统的虚拟机、或物理服务器、或公有云主机上运行。
2、容器与虚拟机的异同:
容器与虚拟机都是为应用提供封装和隔离。
容器由两部分组成:
1)应用程序本身;
2)依赖部分,如应用程序需要的组件库或其他软件;
容器在宿主操作系统的用户空间中运行,与操作系统的其他进程隔离,这一点显著区别于虚拟机。
传统的虚拟化技术,比如VMWare、KVM,目标均是创建完整的虚拟机。为了运行应用程序,除了部署应用自身及其依赖,还需要安装整个操作系统。
两者区别如下图所示:
由图中对比可知,由于所有的容器共享一个宿主操作系统,这使得容器在体积上要比虚拟机小很多。另外,启动容器不需要启动整个操作系统,所以容器部署和启动速度更快,开销也更小,也更容易迁移。
二、为什么使用容器
在谈论为什么使用容器之前,先看一下之前为什么用不着容器。之前的系统,几乎所有的系统均采用三层架构就可以很好的解决使用需求。而当今的系统,需要使用更多的服务,比如MQ、缓存、数据库来构建和组装应用。而且应用程序很可能被部署到不同的环境,比如虚拟服务器、私有云、公有云上。
所以,对于当今系统一方面应用中包含了多种服务,这些服务有自己所依赖的组件库或软件包;另一方面存在多种部署环境,应用在运行时可能需要动态迁移到不同的环境中,如何保证各个服务能够在各种环境中正常运行就是一个很难解决的问题。
借助于运输行业集装箱的启发,Docker将集装箱思想运用到软件打包上,为代码提供了一个基于容器的标准化运输系统。Docker可以将任何应用及其依赖打包成一个轻量级、可移植、自包含的容器,容器可以运行在任何操作系统上。
由此可知,使用容器的原因就是:容器使软件具备了超强的可移植能力。从Docker的标志性图片中,也很形象的表达Docker的思想,像集装箱一样可以方便的运送货物。
三、容器的特性
对于开发人员而言,容器意味着环境隔离和可重复性,开发人员只需为应用创建一次运行环境,然后打包成容器便可以在其他机器上运行。另外,容器环境与所在的宿主系统环境是隔离的,就像虚拟机一样,但是比虚拟机更快更简单。真正实现了Build Once,Run Anywhere(一次运行,到处运行)
对于运维人员而言,只需要配置好标准的运行环境,服务器就可以运行任何容器。这使得运维人员的工作效率更高,同时也使工作也变的一致和可重复。由此可见,容器消除了开发、测试、生产环境的不一致性。
四、容器生态系统
一谈到容器,大家都会想到Docker,Docker几乎是容器的代名词。确实,是Docker将容器技术发扬光大,同时围绕Docker还有一个生态系统。
容器生态系统包括如下几部分:
1、容器核心技术,就是能够让Container(容器)在宿主系统上运行起来的技术,包括:
1)容器规范
除了Docker之外,还有其他容器,如HeroKu、NodeJitsu。为了保障容器之间可以兼容,Docker、CoreOS、Google等公司成立了OCI组织(Open Container Initiative),制定开放的容器规范。
目前有两种规范:a)Runtime Spec;b)Image Format Spec;这两种规范让不同组织和厂商开发的容器能够在不同的容器Runtime上运行,保证了容器的可移植性和互操作性。
2)容器Runtime
容器Runtime是容器真正可以运行的地方,Runtime需要和操作系统kernel紧密协作,为容器提供运行环境。
目前主流的容器Runtime有:
a)lxc:运行于Linux上的容器Runtime,可以运行Docker;
b)runc:是Docker开发的容器Runtime,是现在Docker默认的Runtime;
c)rkt:是CoreOS开发的容器Runtime,可以运行Docker;
3)容器管理工具
容器管理工具对内与Runtime交互,对外为用户提供Interface,比如CLI,可以使用户有工具来管理容器,相关工具有:
a)lxd是lxc对应的管理工具;
b)docker engine是对runc的管理工具,该工具包括Deamon和Cli两个部分。对于通常说的Docker,一般指docker engine。
c)rkt cli是rkt的管理工具;
4)容器定义工具
容器定义工具的作用是允许用户定义容器的内容和属性,这样容器就能够被保存,共享和重建。相关工具有:
a)docker image是docker容器的模板,容器runtime依据docker image创建容器;
b)docker file是包含若干命令的文本文件,用于创建出docker image;
c)ACI(App Container Image)与docker image类似,它是由CoreOS开发的rkt容器的image格式;
5)Registry
容器是通过image(镜像)创建的,需要有一个仓库来统一存放image,这些仓库就是Registry。
a)Docker Registry,可以利用Docker Registry构建私有的Registry;
b)Docker Hub:https://hub.docker.com/ 是Docker为公众提供的托管Registry,上面有许多现成的Image;
c)Quay.io:https://quay.io提供与Docker Hub类似的服务;
6)容器OS
容器OS是专门运行容器的操作系统,与常规OS相比,容器OS通常体积更小,启动更快。因为是为容器定制的OS,通常它们运行容器的效率会更高。
a)CoreOS;
b)atomic;
c)ubuntu core;
2、容器平台技术,能够让容器作为集群在分布式环境中运行。
1)容器编排引擎,基于容器的应用一般会采用微服务架构,在这种架构下,不同应用被划分成不同的服务容器集群,集群中的容器会根据业务需要被动态的创建、迁移和销毁。
所谓容器编排,通常包括容器管理、高度、集群定义和服务发现等。通过容器编排引擎,容器被有机的组合成微服务应用,实现业务需求。编排引擎分为:
a)swarm:是Docker开发的容器编排引擎;
b)k8s:google开发的开源容器编排引擎,支持Docker和CoreOS;
c)mesos+marathon:mesos是一个通用的集群资源调度平台;两者一起提供容器编排引擎功能;
2)容器管理平台,是在容器编排引擎之上的一个更为通用的平台,通常容器管理平台支持多种编排引擎,抽象了编排引擎的底层实现细节,为用户提供更方便的功能。
a)Rancher
b)ContainerShip;
3)基于容器的Paas,它为微服务应用开发人员提供了开发、部署和管理应用的平台,用户不必关心底层基础设施而专注于应用的开发。
a)Deis;
b)Flynn;
c)Dokku;
3、容器支持技术
1)容器网络
容器的出现使网络拓扑变得更加动态和复杂,用户需要专门的解决方案来管理容器与容器、容器与其他实体之间的连通性和隔离性。
a)Docker Network;
b)Flannel;
c)Weave;
d)Calico;
2)服务发现
在微服务应用中,集群会根据负载的强弱对容器进行动态增减,或者根据宿主资源的不同进行动态迁移,容器的IP和端口也会发生变化。服务发现就是提供一种让客户端能够知道如何访问容器提供的服务的机制。服务发现会保存容器集群中所有微服务最新的信息,如IP和端口,以向外提供API。
a)etcd;
b)consul;
c)zookeeper;
3)监控
a)docker ps/top/stats;
b)docker stats API;
c)sysdig;
d)cAdvisor/Heapster;
e)Weave Scope;
4)数据管理
容器经常在不同的宿主之间迁移,需要保证持久化数据也能够动态迁移。
a)Flocker;
5)日志管理
日志为问题排查和事件管理提供了重要依据。
a)docker logs:Docker原生的日志工具;
b)logspout:对日志提供了路由功能,它可以收集不同容器的日志并转发给其他工具后进行处理;
6)安全性
a)OpenSCAP:它能够对容器镜像进行扫描,发现潜在的漏洞;
大家可关注我的公众号
知识学习来源:CloudMan:《每天5分钟玩转Docker容器技术》
Dock学习(一):容器介绍的更多相关文章
- ASP.NET Core Web开发学习笔记-1介绍篇
ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...
- 人工智能深度学习Caffe框架介绍,优秀的深度学习架构
人工智能深度学习Caffe框架介绍,优秀的深度学习架构 在深度学习领域,Caffe框架是人们无法绕过的一座山.这不仅是因为它无论在结构.性能上,还是在代码质量上,都称得上一款十分出色的开源框架.更重要 ...
- iOS学习之NSBundle介绍和使用
iOS学习之NSBundle介绍和使用 http://blog.csdn.net/totogo2010/article/details/7672271 新建一个Single View Applicat ...
- Oracle GoldenGate学习之Goldengate介绍
Oracle GoldenGate学习之Goldengate介绍 (2012-10-02 17:07:27) 标签: 检查点 数据传输 队列 进程 分类: Goldengate Goldengate介 ...
- Spring.NET依赖注入框架学习--实例化容器常用方法
Spring.NET依赖注入框架学习---实例化容器常用方法 本篇学习实例化Spring.NET容器的俩种方式 1.通过XmlObjectFactory创建一个Spring.NET容器 IResour ...
- JMeter学习工具简单介绍
JMeter学习工具简单介绍 一.JMeter 介绍 Apache JMeter是100%纯JAVA桌面应用程序,被设计为用于测试客户端/服务端结构的软件(例如web应用程序).它可以用来测试静态 ...
- 5.docker学习之容器
容器创建 我们已经知道,镜像是只读的,而基于镜像创建出来的容器是可读写的,所以,一般我们实际中,会经常使用对应镜像创建容器并且使用这些容器.同样,如果我们想要使用容器,那么我们必须首先需要创建容器.而 ...
- BootStrap容器介绍
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8& ...
- 《从0到1学习Flink》—— 介绍Flink中的Stream Windows
前言 目前有许多数据分析的场景从批处理到流处理的演变, 虽然可以将批处理作为流处理的特殊情况来处理,但是分析无穷集的流数据通常需要思维方式的转变并且具有其自己的术语(例如,"windowin ...
- Docker 容器介绍
Docker 容器介绍 Docker 是一个基于 Go 语言的开源应用容器引擎,它既能实现虚拟化,又可用于将应用服务打包成轻量.可移植的容器,从而可以发布到任何 Linux 平台.除了优秀了沙箱机制外 ...
随机推荐
- Android零基础入门第75节:Activity状态和生命周期方法
前面两期我们学习了Activity的创建和注册.以及启动和关闭,也学会了重写onCraete方法,这些知识在实际开发中远远不够,还需要学习了解更多. 生命周期就是一个对象从创建到销毁的过程,每一个对象 ...
- Capsule Network
Capsule Network最大的特色在于vector in vector out & 动态路由算法. vector in vector out 所谓vector in vector out ...
- java基础之super关键字
一.在java里面,对于super关键字通常有两种用法: 1. 用在子类的构造方法里(初始化用),主要是调用父类的默认构造方法,如果父类有不止一个构造方法,可以通过super指定具体的构造函数,比如 ...
- 类成员函数指针的特殊之处(成员函数指针不是指针,内含一个结构体,需要存储更多的信息才能知道自己是否virtual函数)
下面讨论的都是类的非静态成员函数. 类成员函数指针的声明及调用: 1 2 3 4 5 6 7 //pr是指向Base类里的非静态成员函数的指针 //其行参为(int, int),返回值为void vo ...
- PHP阿里大鱼短信验证
PHP阿里大鱼短信验证 第一步 登陆阿里大于注册账号,在用户管理中心创建应用,确定AppKEY和App Secret还有配置签名 第二步 在应用管理中选择SDK下载,或者直接点击http://down ...
- WD-线程KTHREAD结构(WRK)
线程是系统处理器调度的基本单元,而且线程调度是在内核层完成的,所以,KTHREAD 的许多域都跟Windows 的线程调度机制有关. 找到进程的线程可以使用!process 1 2 3 kd> ...
- windows Service 之调试过程(附加到进程里调试,而且启动时间不能超过30秒)
最近第一次用C#写了一个windows service ,其实实现的内容比较简单.就是启动remoting 连接,但是调试相对初次写windws service 的我来说,比较烦.没有经验,而且没办法 ...
- 梭子鱼VS多备份 虽殊途却同归
备份,对于企业来说,不仅是一个已经拥有多年历史的传统IT工作,还关系着企业自身的生死存亡.在云计算时代下,备份业务成为企业的必选项,已经成为云计算服务最为热门的领域之一.基于云的备份正在深刻改变着备份 ...
- 转载几篇文章URL
读了百伯在线Jobbole的几篇文章,转给需要的朋友.如下: 产品小设计大体验:http://blog.jobbole.com/39593/ 苹果是一家有工程师的设计公司:Google是一家有设计师的 ...
- 记一次 qW3xT.4,解决挖矿病毒。
最近感觉我的服务器特别卡,打开数据库都半天,刚开始以为网咯不好也没太在意. 利用top命令: 这时候问题出来了,最高cpu占用100%,那我用啥??? 根据进程id 一看究竟,ps -ef|grep ...