精华内容
下载资源
问答
  • 十分钟明白什么是容器技术

    千次阅读 2018-07-06 14:40:51
    一、什么是容器? 容器这个词,当你第一眼看它或许脑子里是这东西:瓶瓶罐罐、装水、装其他东西的玩意。 不管是什么,总的来说,容器给人第一印象就是——“装”。 那今天我们要说的容器技术是怎么一个概念呢?...

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~

    本文由宝哥@devops运维 发表于云+社区专栏

    一、什么是容器?

    容器这个词,当你第一眼看它或许脑子里是这东西:瓶瓶罐罐、装水、装其他东西的玩意。

    img

    不管是什么,总的来说,容器给人第一印象就是——“装”。

    那今天我们要说的容器技术是怎么一个概念呢?其实,IT里的容器技术是英文单词Linux Container的直译。container这个单词有集装箱、容器的含义(主要偏集装箱意思)。不过,在中文环境下,咱们要交流要传授,如果翻译成“集装箱技术” 就有点拗口,所以结合中国人的吐字习惯和文化背景,更喜欢用容器这个词。不过,如果要形象的理解Linux Container技术的话,还是得念成集装箱会比较好。我们知道,海边码头里的集装箱是运载货物用的,它是一种按规格标准化的钢制箱子。集装箱的特色,在于其格式划一,并可以层层重叠,所以可以大量放置在特别设计的远洋轮船中(早期航运是没有集装箱概念的,那时候货物杂乱无章的放,很影响出货和运输效率)。有了集装箱,那么这就更加快捷方便的为生产商提供廉价的运输服务。

    img

    因此,IT世界里借鉴了这一理念。早期,大家都认为硬件抽象层基于hypervisor的虚拟化方式可以最大程度上提供虚拟化管理的灵活性。各种不同操作系统的虚拟机都能通过hypervisor(KVM、XEN等)来衍生、运行、销毁。然而,随着时间推移,用户发现hypervisor这种方式麻烦越来越多。为什么?因为对于hypervisor环境来说,每个虚拟机都需要运行一个完整的操作系统以及其中安装好的大量应用程序。但实际生产开发环境里,我们更关注的是自己部署的应用程序,如果每次部署发布我都得搞一个完整操作系统和附带的依赖环境,那么这让任务和性能变得很重和很低下。

    基于上述情况,人们就在想,有没有其他什么方式能让人更加的关注应用程序本身,底层多余的操作系统和环境我可以共享和复用?换句话来说,那就是我部署一个服务运行好后,我再想移植到另外一个地方,我可以不用再安装一套操作系统和依赖环境。这就像集装箱运载一样,我把货物一辆兰博基尼跑车(好比开发好的应用APP),打包放到一容器集装箱里,它通过货轮可以轻而易举的从上海码头(CentOS7.2环境)运送到纽约码头(Ubuntu14.04环境)。而且运输期间,我的兰博基尼(APP)没有受到任何的损坏(文件没有丢失),在另外一个码头卸货后,依然可以完美风骚的赛跑(启动正常)。

    img

    Linux Container容器技术的诞生(2008年)就解决了IT世界里“集装箱运输”的问题。Linux Container(简称LXC)它是一种内核轻量级的操作系统层虚拟化技术。Linux Container主要由Namespace和Cgroup两大机制来保证实现。那么Namespace和Cgroup是什么呢?刚才我们上面提到了集装箱,集装箱的作用当然是可以对货物进行打包隔离了,不让A公司的货跟B公司的货混在一起,不然卸货就分不清楚了。那么Namespace也是一样的作用,做隔离。光有隔离还没用,我们还需要对货物进行资源的管理。同样的,航运码头也有这样的管理机制:货物用什么样规格大小的集装箱,货物用多少个集装箱,货物哪些优先运走,遇到极端天气怎么暂停运输服务怎么改航道等等… 通用的,与此对应的Cgroup就负责资源管理控制作用,比如进程组使用CPU/MEM的限制,进程组的优先级控制,进程组的挂起和恢复等等。

    img

    二、容器技术的特点

    容器的特点其实我们拿跟它跟硬件抽象层虚拟化hypervisor技术对比就清楚了,我们之前也提到过,传统的虚拟化(虚拟机)技术,创建环境和部署应用都很麻烦,而且应用的移植性也很繁琐,比如你要把vmware里的虚拟机迁移到KVM里就很繁琐(需要做镜像格式的转换)。那么有了容器技术就简单了,总结下容器技术主要有三个特点:

    • \1. 极其轻量:只打包了必要的Bin/Lib;
    • \2. 秒级部署:根据镜像的不同,容器的部署大概在毫秒与秒之间(比虚拟机强很多);
    • \3. 易于移植:一次构建,随处部署;
    • \4. 弹性伸缩:Kubernetes、Swam、Mesos这类开源、方便、好使的容器管理平台有着非常强大的弹性管理能力。

    img

    三、容器的标准化

    当前,docker几乎是容器的代名词,很多人以为docker就是容器。其实,这是错误的认识,除了docker 还有coreos。所以,容器世界里并不是只有docker一家。既然不是一家就很容易出现分歧。任何技术出现都需要一个标准来规范它,不然各搞各的很容易导致技术实现的碎片化,出现大量的冲突和冗余。因此,在2015年,由Google,Docker、CoreOS、IBM、微软、红帽等厂商联合发起的OCI(Open Container Initiative)组织成立了,并于2016年4月推出了第一个开放容器标准。标准主要包括runtime运行时标准和image镜像标准。标准的推出,有助于替成长中市场带来稳定性,让企业能放心采用容器技术,用户在打包、部署应用程序后,可以自由选择不同的容器Runtime;同时,镜像打包、建立、认证、部署、命名也都能按照统一的规范来做。

    两种标准主要包含以下内容:

    1. 容器运行时标准 (runtime spec)

    a). creating:使用 create 命令创建容器,这个过程称为创建中 b). created:容器创建出来,但是还没有运行,表示镜像和配置没有错误,容器能够运行在当前平台 c). running:容器的运行状态,里面的进程处于 up 状态,正在执行用户设定的任务 d). stopped:容器运行完成,或者运行出错,或者 stop 命令之后,容器处于暂停状态。这个状态,容器还有很多信息保存在平台中,并没有完全被删除

    1. 容器镜像标准(image spec)

    a). 文件系统:以 layer 保存的文件系统,每个 layer 保存了和上层之间变化的部分,layer 应该保存哪些文件,怎么表示增加、修改和删除的文件等; b). config 文件:保存了文件系统的层级信息(每个层级的 hash 值,以及历史信息),以及容器运行时需要的一些信息(比如环境变量、工作目录、命令参数、mount 列表),指定了镜像在某个特定平台和系统的配置。比较接近我们使用 docker inspect 看到的内容; c). manifest 文件:镜像的 config 文件索引,有哪些 layer,额外的 annotation 信息,manifest 文件中保存了很多和当前平台有关的信息; d). index 文件:可选的文件,指向不同平台的 manifest 文件,这个文件能保证一个镜像可以跨平台使用,每个平台拥有不同的 manifest 文件,使用 index 作为索引。

    四、容器的主要应用场景

    容器技术的诞生其实主要解决了PAAS的层的技术实现。像OpenStack、Cloudstack这样的技术是解决IAAS层的问题。IAAS层和PAAS层大家估计也听得很多了,关于他们的区别和特性我这里不在描述。那么容器技术主要应用在哪些场景呢?目前主流的有以下几种:

    \1. 容器化传统应用 容器不仅能提高现有应用的安全性和可移植性,还能节约成本。

    每个企业的环境中都有一套较旧的应用来服务于客户或自动执行业务流程。即使是大规模的单体应用,通过容器隔离的增强安全性、以及可移植性特点,也能从 Docker 中获益,从而降低成本。一旦容器化之后,这些应用可以扩展额外的服务或者转变到微服务架构之上。

    \2. 持续集成和持续部署 (CI/CD) 通过 Docker 加速应用管道自动化和应用部署,交付速度提高至少 13 倍。

    现代化开发流程快速、持续且具备自动执行能力,最终目标是开发出更加可靠的软件。通过持续集成 (CI) 和持续部署 (CD),每次开发人员签入代码并顺利测试之后,IT 团队都能够集成新代码。作为开发运维方法的基础,CI/CD 创造了一种实时反馈回路机制,持续地传输小型迭代更改,从而加速更改,提高质量。CI 环境通常是完全自动化的,通过 git 推送命令触发测试,测试成功时自动构建新镜像,然后推送到 Docker 镜像库。通过后续的自动化和脚本,可以将新镜像的容器部署到预演环境,从而进行进一步测试。

    \3. 微服务 加速应用架构现代化进程。

    应用架构正在从采用瀑布模型开发法的单体代码库转变为独立开发和部署的松耦合服务。成千上万个这样的服务相互连接就形成了应用。Docker 允许开发人员选择最适合于每种服务的工具或技术栈,隔离服务以消除任何潜在的冲突,从而避免“地狱式的矩阵依赖”。这些容器可以独立于应用的其他服务组件,轻松地共享、部署、更新和瞬间扩展。Docker 的端到端安全功能让团队能够构建和运行最低权限的微服务模型,服务所需的资源(其他应用、涉密信息、计算资源等)会适时被创建并被访问。

    \4. IT 基础设施优化 充分利用基础设施,节省资金。

    Docker 和容器有助于优化 IT 基础设施的利用率和成本。优化不仅仅是指削减成本,还能确保在适当的时间有效地使用适当的资源。容器是一种轻量级的打包和隔离应用工作负载的方法,所以 Docker 允许在同一物理或虚拟服务器上毫不冲突地运行多项工作负载。企业可以整合数据中心,将并购而来的IT资源进行整合,从而获得向云端的可迁移性,同时减少操作系统和服务器的维护工作。

    问答

    docker和docker-compose有什么不同?

    相关阅读

    童航君:腾讯云CIS服务和clear container

    小白也能玩转Kubernetes 你与大神只差这几步

    王蕴达:腾讯云 Kubernetes 一键部署实践

    此文已由作者授权腾讯云+社区发布,原文链接:https://cloud.tencent.com/developer/article/1116709?fromSource=waitui

    欢迎大家前往腾讯云+社区或关注云加社区微信公众号(QcloudCommunity),第一时间获取更多海量技术实践干货哦~

    展开全文
  • 什么是容器适配器 就是由基本的容器适配(改造)出来的那些容器,其它没啥特殊的。 比如stack,因为我们可以把stack理解成只是对vector、deque或list的访问加一点限制而已(只能从头部访问),所以没有必要把stack...

    什么是容器适配器

    就是由基本的容器适配(改造)出来的那些容器,其它没啥特殊的。
    比如stack,因为我们可以把stack理解成只是对vector、deque或list的访问加一点限制而已(只能从头部访问),所以没有必要把stack做成一个基本容器,使用其它的基本容器再稍微封装改造一下就OK了,所以stack在STL中就只是一个“容器适配器”,而不是一个基础容器。

    来源:https://bbs.csdn.net/wap/topics/310196740


    用法

    1.stack
    
    stack<int> s;
    stack< int, vector<int> > stk;  //覆盖基础容器类型,使用vector实现stk
    s.empty();  //判断stack是否为空,为空返回true,否则返回false
    s.size();   //返回stack中元素的个数
    s.pop();    //删除栈顶元素,但不返回其值
    s.top();    //返回栈顶元素的值,但不删除此元素
    s.push(item);   //在栈顶压入新元素item
    
    
    2.queue & priority_queue
    
    queue<int> q; //priority_queue<int> q;
    q.empty();  //判断队列是否为空
    q.size();   //返回队列长度
    q.push(item);   //对于queue,在队尾压入一个新元素
                   //对于priority_queue,在基于优先级的适当位置插入新元素
    
    //queue only:
    q.front();  //返回队首元素的值,但不删除该元素
    q.back();   //返回队尾元素的值,但不删除该元素
    
    //priority_queue only:
    q.top();    //返回具有最高优先级的元素值,但不删除该元素
    
    原文:https://blog.csdn.net/qq_37521235/article/details/77386871 
    

     

    展开全文
  • 写在前面 今天菜白要开始学习K8S了,...什么是虚拟化技术,什么是容器,什么是Docker,什么是K8S? 如果不知道虚拟化,不知道容器,不知道Docker,直接学K8S,就好比没活过尿泥就像盖摩天大楼(我瞎比的)。因此我...

    写在前面

    今天菜白要开始学习K8S了,其实在很古早的时候菜白就微微看过一点点K8S的内容,但是一直没有深入研究(其实就是没有研究)。现在等于从零开始学习,如果你也想从零开始学习不要错过这篇文章(没有别的意思)。

    什么是虚拟化技术,什么是容器,什么是Docker,什么是K8S?

    如果不知道虚拟化,不知道容器,不知道Docker,直接学K8S,就好比没活过尿泥就像盖摩天大楼(我瞎比的)。因此我们第一步,先从虚拟化开始讲起。

    虚拟化技术

    1. 为什么要提出虚拟化技术

    最初虚拟化技术的应用和发展源于大型机对分时系统的需求[1]。如何理解这句话呢,我觉得可以把这里的大型机理解成为一个客栈,客栈其实解决了我们对于住宿的时分需求,说客栈的出现让我们不至于因为进京赶考的需求而在全国甚至各地购置我们的房产。

    2. 什么是虚拟化技术

    从字面上理解虚拟化技术就是将某某虚拟化,那因为我们现在在讨论计算机,因此虚拟化技术就是将物理机虚拟化的一种技术。虚拟化技术即Virtualization,wiki上的解释是:In computing, virtualization refers to the act of creating a virtual (rather than actual) version of something, including virtual computer hardware platforms, storage devices, and computer network resources.我的理解,虚拟化是实现云计算的一种手段[2]

    容器技术

    在刘鹏的《云计算》书中,把虚拟化分为了两类,一类是建立在宿主机上的,也就是宿主机是有操作系统的,另一类是宿主机没有操作系统的,我们把前者称为寄居虚拟化,后者称为裸机虚拟化。

    寄居虚拟化

    寄居虚拟化,最底层是物理硬件,物理硬件之上是主机的操作系统,操作系统之上是VMM(virtual machine monitor,虚拟机管理层),再往上就是客户的虚拟户了。在这种技术里面,虚拟机对各种物理设备(CPU、内存、硬盘等)的调用,都是通过VMM层和宿主机的操作系统一起协调才完成的。VMware和VirtualBox都是基于这种方式实现的。

    裸机虚拟化

    裸机虚拟化,直接将VMM安装在硬件设备与物理硬件之间。VMM在这种模式下又叫做Hypervisor,虚拟机有指令要执行时,Hypervisor会接管该指令,模拟相应的操作[3]

    容器虚拟化

    刚刚说到的两种技术都属于一般虚拟化技术,而容器技术是一种特殊的虚拟化技术。容器的本质,一句话解释,就是一组受到资源限制,彼此间相互隔离的进程。可以看出,容器是没有自己的OS的,直接共享宿主机的内核,也没有hypervisor这一层进行资源隔离和限制,所有对于容器进程的限制都是基于操作系统本身的能力来进行的[4]

    所以容器其实是虚拟化技术的一种。

     

    Docker

    Docker是一个用于开发,交付和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,从而可以快速交付软件。借助Docker,您可以以与管理应用程序相同的方式来管理基础架构。通过利用Docker的快速交付,测试和部署代码的方法,您可以大大减少编写代码和在生产环境中运行代码之间的延迟[5]

    1. Docker架构

    Docker使用客户端-服务器架构。Docker ClientDocker Daemon进行对话,Daemon完成了构建,运行和分发Docker容器的繁重工作。Docker ClientDaemon可以 在同一系统上运行,或者您可以将Docker Client连接到远程Docker DaemonDocker ClientDaemonUNIX套接字或网络接口上使用REST API进行通信。

     

    这里面其实就涉及到我们Docker运行的三板斧,build, pullrun。下面这张图其实很好的描述了我们容器运行的三个步骤, Client可以在镜像库当中建立一个自己需要的镜像;或者我们可以从Registries当中拉去别人已经创建好的镜像;最后就可以在Container当中运行也就是run我们的镜像了。

    2. Docker的组件

    Docker Daemon

    Docker Daemon(dockerd)侦听Docker API请求并管理Docker对象,例如图像,容器,网络和卷。Daemon还可以与其他Daemon通信以管理Docker服务。

    Docker Client

    Docker Client(docker)是许多Docker用户与Docker交互的主要方式。当您使用诸如之类的命令时docker run,客户端会将这些命令发送到dockerd,以执行它们。该docker命令使用Docker API。Docker Client可以与多个Daemon通信。

    Docker Registries

    Docker Registries存储Docker映像。Docker Hub是任何人都可以使用的公共注册表,并且Docker配置为默认在Docker Hub上查找映像。您甚至可以运行自己的私人注册表。如果使用Docker数据中心(DDC),则其中包括Docker可信注册表(DTR)。

    使用docker pull或docker run命令时,所需的图像将从配置的注册表中提取。使用该docker push命令时,会将映像推送到配置的注册表。

    Docker Object

    使用Docker时,您正在创建和使用映像,容器,网络,卷,插件和其他对象。本节是其中一些对象的简要概述。

    镜像

    一个镜像是用于创建一个Docker 容器指令的只读模板。通常一个镜像基于另一个镜像,并进行一些其他自定义。例如,您可以基于该ubuntu 映像构建映像,但安装Apache Web服务器和您的应用程序,以及运行该应用程序所需的配置详细信息。

    您可以创建自己的镜像,也可以仅使用其他人创建并在注册表中发布的镜像。要构建自己的镜像,您可以 使用简单的语法创建一个Dockerfile,以定义创建镜像并运行它所需的步骤。Dockerfile中的每条指令都会在镜像中创建一个层。更改Dockerfile并重建镜像时,仅重建那些已更改的层。与其他虚拟化技术相比,这是使映像如此轻巧,小型和快速的部分原因。

     

    容器

    容器是镜像的可运行实例。您可以使用Docker API或CLI创建,启动,停止,移动或删除容器。您可以将容器连接到一个或多个网络,将存储附加到该网络,甚至根据其当前状态创建新镜像。

    默认情况下,容器与其他容器及其主机之间的隔离程度相对较高。您可以控制容器的网络,存储或其他基础子系统与其他容器或与主机的隔离程度。

    容器由其镜像以及在创建或启动时为其提供的任何配置选项定义。删除容器后,未存储在持久性存储中的状态更改将消失。

    K8S

    Kubernetes,又称作K8S,据说8代替了K和S中间的8个字母,所以称作K8S。

    1. K8S是什么?

    Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化[6]。看到这里大家肯定已经懵逼了,我是谁,我在哪里,Docker是什么,K8S是什么,他们两个又有什么恩怨情仇?

    其实K8S和Docker并不像之前三个概念一样是相互继承或者是嵌套的关系。还记得Docker的概念吗,“Docker是一个用于开发,交付和运行应用程序的开放平台”,而Kubernetes是容器集群管理系统,是一个开源的平台,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

    原则上,Kubernetes可以使用任何容器化技术。 Kubernetes可以集成的两个最流行的选项是rkt和Docker。 然而,Docker赢得了最大的细分市场,并且在完善Docker和Kubernetes之间的集成方面付出了很多努力,比任何其他容器化技术都要多。

    同样,Docker公司提供了自己的容器编排引擎,名为Docker Swarm。但即使他们意识到Kubernetes已经发展到甚至Docker for Desktop(Mac OS和Windows)都带有自己的Kubernetes发行版的事实[7]

    所以他们之间的关系我们可以这么理解,如果把整个集群比作一辆车,Docker就是汽车的引擎,K8S就是汽车的制造商,K8S可以选择其他品牌的引擎,当然Docker可以选择其他汽车制造商,甚至是自有品牌。

    2. K8S组件

    一个 Kubernetes 集群包含 集群由一组被称作节点的机器组成。这些节点上运行 Kubernetes 所管理的容器化应用。集群具有至少一个工作节点和至少一个主节点。

    工作节点托管作为应用程序组件的 Pod 。主节点管理集群中的工作节点和 Pod 。多个主节点用于为集群提供故障转移和高可用性。

    本文档概述了交付正常运行的 Kubernetes 集群所需的各种组件。

    这张图表展示了包含所有相互关联组件的 Kubernetes 集群。

    我们根据上面这样图进行逐一讲解,整个K8S分成了三个部分:K8S的control plane,K8S的Nodes以及途中没有显示的插件部分(Addons)

    控制平面组件(Control Plane Components

    它组件就是整个K8S的指挥中心,保证K8S节点的顺利运行。我看到这里面其实也分成了5个部分,每个部分功能各不相同。

    kube-apiserver

    顾名思义,这个是Kube的接口服务,他类似一个中转站,传递Control Plane和Node之间的信息主节点上负责提供 Kubernetes API 服务的组件;它是 Kubernetes 控制面的前端。kube-apiserver 在设计上考虑了水平扩缩的需要。 换言之,通过部署多个实例可以实现扩缩。

    etcd

    etcd我本来想找到全称,这样可能好记一点,但是并没有找到。大家强行记一下吧,etcd是兼具一致性和高可用性的键值数据库,可以作为保存 Kubernetes 所有集群数据的后台数据库。您的 Kubernetes 集群的 etcd 数据库通常需要有个备份计划。

    kube-scheduler

    kube-scheduler顾名思义,他就是一个安排工具,主节点上的组件,该组件监视那些新创建的未指定运行节点的 Pod,并选择节点让 Pod 在上面运行。

    调度决策考虑的因素包括单个 Pod 和 Pod 集合的资源需求、硬件/软件/策略约束、亲和性和反亲和性规范、数据位置、工作负载间的干扰和最后时限。

    kube-controller-manager

    在主节点上运行控制器的组件。

    从逻辑上讲,每个控制器都是一个单独的进程,但是为了降低复杂性,它们都被编译到同一个可执行文件,并在一个进程中运行。

    我们来看一下这些控制器包括:

    • 节点控制器(Node Controller): 负责在节点出现故障时进行通知和响应。

    • 副本控制器(Replication Controller): 负责为系统中的每个副本控制器对象维护正确数量的 Pod。

    • 端点控制器(Endpoints Controller): 填充端点(Endpoints)对象(即加入 Service 与 Pod)。

    • 服务帐户和令牌控制器(Service Account & Token Controllers): 为新的命名空间创建默认帐户和 API 访问令牌。

    cloud-controller-manager

    cloud-controller-manager 运行与基础云提供商交互的控制器。

    • 节点控制器(Node Controller): 用于检查云提供商以确定节点是否在云中停止响应后被删除

    • 路由控制器(Route Controller): 用于在底层云基础架构中设置路由

    • 服务控制器(Service Controller): 用于创建、更新和删除云提供商负载均衡器

    • 数据卷控制器(Volume Controller): 用于创建、附加和装载卷、并与云提供商进行交互以编排卷

     

    Node

    Kubelet

    一个在集群中每个节点上运行的代理。它保证容器都运行在 Pod 中。

    kubelet 接收一组通过各类机制提供给它的 PodSpecs,确保这些 PodSpecs 中描述的容器处于运行状态且健康。kubelet 不会管理不是由 Kubernetes 创建的容器。

    kube-proxy

    kube-proxy 是集群中每个节点上运行的网络代理,实现 Kubernetes Service 概念的一部分。

    kube-proxy 维护节点上的网络规则。这些网络规则允许从集群内部或外部的网络会话与 Pod 进行网络通信。

    如果操作系统提供了数据包过滤层并可用的话,kube-proxy会通过它来实现网络规则。否则,kube-proxy 仅转发流量本身。

    容器运行环境(Container Runtime)

    容器运行环境是负责运行容器的软件。

    Kubernetes 支持多个容器运行环境: Docker、containerd、cri-o、rktlet以及任何实现 Kubernetes CRI (容器运行环境接口)。

     

     

    展开全文
  • 什么是容器???

    2017-02-15 09:49:59
    今天研究一下什么是容器???  那么容器到底是什么呢?在csdn的论坛上人们众说纷纭:1)容器 和原意放东西的地方差不多,把链表了,数组一类的结构称作容器!2)在面向对象的编程中,你所面对的东西都叫对象,...

                  今天研究一下什么是容器???

                  那么容器到底是什么呢?在csdn的论坛上人们众说纷纭:1)容器 和原意放东西的地方差不多,把链表了,数组一类的结构称作容器!2)在面向对象的编程中,你所面对的东西都叫对象,是想一下,来存放对象集合的东西叫什么?3)从特征上来看,容器主要分为顺序容器(list和vector)和关联容器(map和set)。通俗地说,vector就是可以自动增长大小的数组,它在内存中所处的空间是连续的,list就是链表,这两者的区别主要是关注它们的插入特性和对元素的后续访问要求。如果我们要随机访问一个容器,则vector 比list好得多;如果我们需要在容器的任意位置插入或删除元素,则list 又比vector好得多。4)容器就是装对象的东西。比如数组,链表,哈希表。
    他们之所以被成为“容器”就是因为他们的存在在很大程序上就是为了容纳一组别的东西。

                   但是在百度上的说法更让人易于理解,那就是实际上容器就是一个服务程序,在服务器一个端口就有一个提供相应服务的程序,而这个程序就是处理从客户端发出的请求,如java中的Tomcat容器,ASP的IIS或PWS都是这样的容器,一个服务器不止一个容器的

                    webscope是一种容器技术

                    何为容器?容器是一种服务调用规范框架,J2EE大量运用了容器和组件技术来构分层的企业级应用。在J2EE规范中,相应的有WEB Container和EJB Container等。

                     WEB Container,给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP、SERVLET直接跟容器中的服务接口交互,不必关注其它系统问题。WEB Container主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。比如,Resin 2.1.x以上版本提供的Servlet Container就实现了J2EE的Servlet 2.3规范。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节,直接引用环境变量。

                      session,request,response就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。

                      1.1. 容器的职责
                      容器的职责因具体执行的服务调用规范的不同而有差别,比如Servlet Container只需实现Servlet 2.3规范。而Portlet Container,如Pluto,则需要具体实现基于JSR 168  portlet 规范,具体的技术规范,比如需要实现基于容器级的事件处理机制Action Event、Message Event等。从水平的方向来看,通常容器提供系统级的服务调用。
                      1.2. 容器与应用服务器
                      容器是服务调用规范的具体实现,比如EJB Container是对EJB 2.0规范的实现。然而,实现只是衡量规范的执行程度,通常容器是由应用服务器来具体执行,从这个层面来说,应用服务器又可以称之为容器的容器。
                      1.3. 容器与IOC原则
                      IOC,Inversion Of Control,即倒置控制,IOC自面向对象诞生起就存在,并不是最新技术,象SRP、OCP和DIP等面向对象的基本法则一样。Inversion Of Control,这个短语是由Brian Foote在他的一篇论文中最先使用的(http://www.laputan.org/drc/drc.html)。组件所需的一切通过Contexts、Configurations和Loggers的方式赋予组件。
                      在组件容器中,组件不需要实现或扩展(不依赖)容器类和接口,由容器在组件需要时提供其它依赖组件实例。反例:EJB其中的EJB组件需要实现几个接口,需要用JNDI或全局注册表得到其它EJB实例。
                       IOC,实现了组件与容器间的解耦,意味着在开发组件时同样可以采用从上至下的方法。不需要建立一个注册类,客户端必须调用此注册类才能获得组件实例。

                       各容器的区别

                        map 是关联容器他的每一个元素都是由一个键值和一个数据值组成的
                        使用区别:
                        1 .如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
                        2 .如果你需要大量的插入和删除,而不关心随即存取,则应使用list
                        3 .如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque



    展开全文
  • 昨晚看到容器技术和虚拟化技术。 之前没研究过, 想知道什么是容器?什么是虚拟化技术? 有好的文章或者图书推荐看看,谢谢~
  • 什么是容器?为什么需要关注它?

    千次阅读 2018-03-25 07:02:43
    什么是容器?你需要它们吗?为什么?在这篇文章中,我们会回答这些基本问题。 但是,为了回答这些问题,我们要提出更多的问题。当你开始考虑怎么用容器适配你的工作时,你需要弄清楚:你在哪开发应用?你在哪测试它...
  • 什么是容器云?

    千次阅读 2019-06-24 11:30:10
    作者:宝哥@devops运维 链接:http://t.cn/ECwSNgj容器技术近几年云行业发展中不可缺少的一环。Docker和k8s的大热极大可能会推动云计算P...
  • Docker解读(什么是容器

    万次阅读 2018-04-20 21:10:40
    容器映像一个软件的轻量级独立可执行软件包,包含运行它所需的一切:代码,运行时,系统工具,系统库,设置。不管环境如何,集装箱化软件都可以运行相同的Linux和Windows应用程序。容器将软件与其周围环境隔离开来...
  • 通俗讲解:什么是容器?为什么我们要使用它?

    万次阅读 多人点赞 2018-12-17 10:35:04
    什么是容器?我们可以从现实生活中容器的概念来类比。 简单地说,一个容器包含了完整的运行时环境:除了应用程序本身之外,这个应用所需的全部依赖、类库、其他二进制文件、配置文件等,都统一被打入了一个称为...
  • 容器是什么?跟接口是什么关系?集合又是什么?求大神帮忙??????
  • 1.什么是容器 简单来说容器是一种内核技术的虚拟化体现(Cgroup和Namespace),容器可以在核心CPU上运行本地指令,有效的将单个操作系统进行分组管理和隔离。 2.什么是Docker 一种容器技术、提供了非常方便的...
  • 10分钟读懂什么是容器云?

    万次阅读 2019-06-18 11:12:49
    戳蓝字“CSDN云计算”关注我们哦!作者 | 宝哥@devops运维来源|http://t.cn/ECwSNgj容器技术近几年云行业发展中不可缺少的一环。Docke...
  • 什么是容器

    千次阅读 2008-09-10 10:25:00
    模板最普通的用法是容器,容器是用来创建包含其他对象的对象。有许多不同的容器模板,包括链接的列表(list),向量(vectors)也就是(arrays),sets,和maps。容器模板让程序员在使用前人总结的精炼的数据结构中获益。...
  • 容器是一个标准化的软件单元,它将代码及其所有依赖关系打包,以便应用程序从一个计算环境快速可靠地运行到另一个计算环境。Docker容器映像一个轻量级,独立的可执行软件包,包含运行应用程序所需的一切:代码,...
  • 5分钟让你懂得什么是容器技术?

    千次阅读 2019-05-16 11:59:50
    容器是轻量级的操作系统级虚拟化,允许我们在资源隔离的进程中运行应用程序及其依赖项。运行应用程序所需的所有必要组件都打包为一个映像,可以重复使用。当一个映像被执行时,它在一...
  • 那么什么是IAAS、PAAS、SAAS呢? 我们下面来讲一讲。 我们知道TCP/IP有七层协议,协议的出现和规定就是让标准能够统一,这样无论是开发者、使用者、网络设备厂商都能按照这公认的协议来学习和生产。如果没有协议,我...
  • 容器(Container) 容器就是一种文件格式,比如flv,mkv等。包含下面5种流以及文件头信息。 流(Stream) 一种视频数据信息的传输方式,5种流:音频,视频,字幕,附件,数据。 帧(Frame) 帧代表一幅...
  • 微型容器,IOC,DI,都在讨论服务组件,并不一般的用户类。容器中存在的都服务。AuthenticationService 一个有用的服务。它可以被容器自动组装。一般来说,容器里面有2个类有统一服务接口没有意义的。服务...
  • 1.什么是容器?2.为什么需要它?3.举例说明4、容器是如何解决这个问题的呢?5、虚拟机和容器有些类似,那么二者之间有什么区别呢?6、容器有哪些优点呢? 1.什么是容器? 容器是完全使用沙箱机制,相互之间不会有...
  • 首先,docker究竟是什么玩意呢?我们可以把它看成虚拟机,能在一台服务器上隔离出若干个互不干扰的环境,还能限制资源的使用量。 我们先来瞧一瞧,没有使用docker容器部署应用的时候的场景: 哈二的公司开发了3个...
  • 什么是WEB容器什么是EJB容器

    千次阅读 2013-08-20 21:14:44
    web容器给运行在其中的应用程序组件(jsp、servlet)提供一个运行环境,使jsp,servlet直接用容器中的环境变量接口交互,不必考虑其他系统问题。主要由web服务器实现,如:tomcat、weblogic等,该容器提供的接口严格...
  • 什么是 Servlet 容器

    千次阅读 多人点赞 2019-04-30 23:10:08
    2、什么是 Servlet 容器? 3、什么是 Servlet? 4、Servlet 容器和 Web 服务器如何处理一个请求的? 5、JVM 的作用 我们简单的谈一谈关于Web服务器,Servlet 容器及其与JVM 的关系。其实Servlet 容器只不过是一个...
  • 什么是copyonwrite容器

    2017-09-28 07:57:00
    通俗的理解当往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处可以对...
  • 什么是Servlet容器

    万次阅读 多人点赞 2017-12-04 10:00:44
    在本文中,我写了一些关于Web服务器、... 想要知道什么是Servlet容器,我们首先要知道什么是Web服务器。  Web服务器使用HTTP协议来传输数据。最简单的一种情况是,用户在浏览器(客户端,client)中输入一
  • 虚拟机和容器什么不同

    千次阅读 2020-07-20 23:00:06
    虚拟机的好处受欢迎的虚拟机提供商什么是容器?容器种类集装箱的好处受欢迎的集装箱供应商虚拟机使用与容器使用虚拟机与容器有什么不同 虚拟机和容器都可以充分利用计算机硬件和软件资源。容器是新兴的事物,但是...
  • C++容器讲解 容器是什么

    千次阅读 2012-04-18 10:28:59
    在房间里我们可以放很多东西,比如说桌子了,椅子了,电视机等等吧,那么我们在容器里面也可以放很多东西,比如说一些对象了,所以在这个容器里也可以放很多不同的对象,然而容器本身也一个对象,为什么要放入这个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,210
精华内容 16,484
关键字:

什么是容器