容器技术

第 11 章 关联容器

大憨熊 提交于 2020-02-25 20:42:43
第 11 章 关联容器 标签: C++Primer 学习记录 关联容器 第 11 章 关联容器 11.1 使用关联容器 11.2 关联容器概述 11.3 关联容器操作 11.4 无序容器 11.1 使用关联容器 标准库中定义了 8个关联容器,这些容器的不同体现在三个维度上。 或者是一个 set,或者是一个 map。 或者要求不重复的关键字,或者允许重复关键字,允许重复的容器的名字中都包含单词 multi。 或者按顺序保存元素或无序保存。不保持关键字按顺序存储的容器的名字都以 unordered开头。 11.2 关联容器概述 当初始化一个 map时,必须提供关键字类型和值类型。将每个关键字——值对包围在花括号中: {key, value} map<string, string> authors = { {"Joyce", "James"}, {"Austen", "Jane"} }; map或 set中的关键字必须是唯一的,用含有重复元素的容器的迭代器来初始化 map或set,得到的结果中对于重复元素也只会有一份拷贝。 对于有序容器,关键字类型必须定义元素比较的方法。默认情况下,标准库使用 < 运算符来比较两个关键字。当然,也可以使用自定义的操作来比较两个关键字。此时必须在定义关联容器类型时就提供此操作的类型。 bool compare(const A &lhs, const A

Docker安装系列教程

Deadly 提交于 2020-02-25 20:19:38
首先准备一台Centos7版本的虚拟机,它支持docker容器技术。本案例使用centos7虚拟机安装docker容器。 一、安装 1.启动虚拟机,配置虚拟机能够访问互联网 2. 安装支持软件包,提供yum-config-manager功能和驱动依赖 #yum install -y yum-utils device-mapper-persistent-data lvm2 3.设置Docker yum源 #yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo 4.查看仓库中所有docker版本 5. 安装docker最新版 #yum install docker-ce 6.启动docker并设为开机启动 #systemctl start docker #systemctl enable docker 二、配置 1.配置docker加速器为中国官方或阿里,编辑 /etc/docker/daemon.json文件 2.启动docker服务,查看docke版本 3.查看docker.centos7的IP地址 4.使用 docker search 查找centos镜像 5.使用docker pull下载centos镜像 6.使用docker images 查看所有镜像 三

云计算学习路线图课件:学Docker容器怎样快速入门?

心已入冬 提交于 2020-02-25 15:37:46
“云计算”作为未来网络甚至未来计算机行业的发展趋势,得到了广泛重视。越来越多的人想通过学习云计算收获高薪,学习云计算的过程中会接触到Docker容器,这究竟是为什么?如何快速高效的学好Docker容器、进而学好云计算呢? docker就像一个集装箱一样,里面放着自己所需要的应用程序。docker内部使用的是Linux容器技术,并且提供一个完整的文件系统,独立的网络环境。 docker 和vm虚拟机的主要区别在于,vm虚拟机启动之前需要制定好资源,例如CPU,内存,硬盘等,这会占用了一些无用的资源,而且vm虚拟机启动慢。而Docker是进程级别的应用,运行在宿主机上,启动速度快,会按需分配系统资源,不会像虚拟机一样会占用无用的资源,docker容器之间是相互隔离的,Docker的迁移性好,方便运维人员把应用迁移到其他主机上而不用重新配置环境,并且docker有自己的生态,里面都有别人写好的应用,可以直接拉取下来,启动就可以使用,总之docker使用起来很轻松,Docker 中包括三个基本的概念: Image(镜像) 相当于软件的安装包 Container(容器) 相当于软件运行时候在一个容器里面运行你所需要的应用(容器里面相当于也是一个linux系统) Repository(仓库) 相当于应用商城上面的安装包 Docker是基于Linux 容器技术的开源项目

云计算学习路线图课件:Kubernetes知识点详解

吃可爱长大的小学妹 提交于 2020-02-25 15:37:08
提及云计算,绝大多数人的反应是这样的:它是一门新兴技术,是互联网发展的未来趋势,云计算核心技术比较多,学习不易。不过如果你真的想要学好云计算,也是有其规律可循的,从基础到进阶、由简单到复杂,不断的学习加练习,你就可以学好它。 Kubernetes,简称K8s,是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes的目标是让部署容器化的应用简单并且高效(powerful),Kubernetes提供了应用部署、规划、更新、维护的一种机制,Kubernetes不仅仅支持Docker,还支持Rocket,这是另一种容器技术。 使用Kubernetes可以:自动化容器的部署和复制;随时扩展或收缩容器规模;将容器组织成组,并且提供容器间的负载均衡;很容易地升级应用程序容器的新版本;提供容器弹性,如果容器失效就替换它等等。Kubernetes核心概念知识: Pod-容器组 Pod是Kubernetes的基本操作单元,指定多个有关联容器(有调用关系依赖)构成一个Pod。Pod包含的容器运行在同一个Minion上(Worker Node),Pod的设计理念是支持多个容器在一个Pod中共享网络地址和文件系统。 Deployment-部署 Deployment是最近几个版本才有的,部署表示用户对K8s集群的一次更新操作。部署是一个比RS应用模式更广的API对象,可以创建

Kubernetes(K8s)入门到实践(一)----Kubernetes入门

a 夏天 提交于 2020-02-24 23:03:32
前言 作为一名网络工程的大学生,在前段时间学习了云计算和大数据的相关技术后,我迫切的想要获得更多的自动化持续交互的相关技术。目前非常火热的Kubernetes技术简称(K8s)是由谷歌开源的Docker容器集群管理系统,功能非常强大,也激起了我浓厚的学习兴趣。 以后我会将这一系列关于Kubernetes的技术文章和学习心得一并分享出来,供大家一块学习和交流。 1. Kubernetes是什么 首先, 我们在学习Kubernetes之前一定要先了解一下什么是Kubernetes。 第一,它是一个全新的基于容器技术的分布式架构领先方案,并且是由谷歌保密十几年之久的秘密武器-Borg的一个开源版本。 Borg是谷歌的一个久负盛名的内部使用的大规模集群管理系统,它基于容器技术,目的是实现资源管理的自 动化,以及跨多个数据中心的资源利用率的最大化。 然后,Kubernetes是一个开放的开发平台。与J2EE不同,它不局限于 任何一种语言 ,没有限定任何编程接口,所以不论是用Java、Go、C++还是用Python编写的服务,都可以被映射为Kubernetes的Service(服务),并通过标准的TCP通信协议进行交互。 此外,Kubernetes平台对现有的编程语言、编程框架、中间件没有任何侵入性,因此现有的系统也很容易改造升级并迁移到Kubernetes平台上。 最后

Docker存储驱动之AUFS简介

可紊 提交于 2020-02-24 16:06:58
简介   AUFS曾是Docker默认的首选存储驱动。它非常稳定、有很多真实场景的部署、很强的社区支持。它有以下主要优点:   极短的容器启动时间。   有效的存储利用率。   有效的内存利用率。   虽然如此,但由于它没有包含在Linux内核主线中,所有很多Linux发行版并不支持AUFS。   以下章节介绍AUFS的特性,并且它们如何作用于Docker。 特性 镜像分层和部署   AUFS是一种联合文件系统。它使用同一个Linux host上的多个目录,逐个堆叠起来,对外呈现出一个统一的文件系统。AUFS使用该特性,实现了Docker镜像的分层。下图展示出ubuntu:latest的镜像的分层。       注意 :在Docker1.10之前,layer的ID对应着其在/var/lib/docker下的目录名称,但在Docker1.10之后,不再有这种直接的对应关系。   对于一个容器来说, 只有顶层的容器layer是可读写的,而下面的layer都是只读 的。 读写文件   Docker使用AUFS的CoW(Copy-on-Write)技术来实现镜像共享和最小化磁盘空间的使用。AUFS作用于文件层,也就是说AUFS CoW拷贝整个文件——即使文件只修改了一点点的内容。所以,它对容器的性能影响很明显,尤其拷贝多层镜像下的大文件,或者是在一个深层次的目录树中进行搜索。   不过

从实战角度超级详解中大型企业微服务化的六大核心关键技术

痞子三分冷 提交于 2020-02-24 15:38:27
在之前文章: 超全详解Java开发环境搭建 一文中,部分博友提出程序的自动化部署等相关问题,本篇文章就来解决该问题,即企业微服务化,如何实现服务的自动化部署?服务自动化部署需要哪些技术? 本篇文章从实战角度讲解中大型公司微服务化最核心最关键的六大技术,即jenkins,docker,maven,git,gitlab,harbor(本篇文章未讲解nexus,在后续文章再讲解),关于六大技术,会在接下来的文章中从架构,理论,实战,常见难点和常见误区等角度精细化讲解。 Tip:本篇文章适合具有一定linux和docker基础的读者,对于不熟悉linux和docker的读者朋友,可以先关注,后续文章会对每个专题从入门到架构进行讲解。 一 docker安装 1.卸载旧版本 yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine 2.安装相关工具 yum install -y yum-utils \ device-mapper-persistent-data \ lvm2 3.选择稳定仓库 yum-config-manager \ --add-repo

C++ STL介绍——简介

守給你的承諾、 提交于 2020-02-22 22:48:07
目录 1、什么是STL 2、STL中六大组件 2.1 容器(Container) 2.2 迭代器(Iterator) 2.3 算法(Algorithm) 2.4 仿函数(Functor) 2.5 适配器(Adaptor) 3、其他部分链接 @目录 1、什么是STL STL Standard Template Library ,即标准模板库,是一个具有工业强度的,高效的C++ 程序库。它被容纳于C++ 标准程序库 C++ Standard Library 中,是 ANSI/ISO C++ 标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。 STL的一个重要特点是数据结构和算法的分离。尽管这是个简单的概念,但这种分离确实使得STL变得非常通用。例如,由于STL的 sort() 函数是完全通用的,你可以用它来操作几乎任何数据集合,包括链表,容器和数组; STL另一个重要特性是它不是面向对象的。为了具有足够通用性,STL主要依赖于模板而不是封装,继承和虚函数(多态性)——OOP的三个要素。你在STL中找不到任何明显的类继承关系。这好像是一种倒退,但这正好是使得STL的组件具有广泛通用性的底层特征。另外,由于STL是基于模板,内联函数的使用使得生成的代码短小高效;

STL容器迭代过程中删除元素技巧

本秂侑毒 提交于 2020-02-22 22:32:56
1. 连续内存序列容器 (vector,string,deque) 序列容器的 erase 方法返回值是指向紧接在被删除元素之后的元素的有效迭代器,可以根据这个返回值来安全删除元素。 vector<int> c; for(vector<int>::iterator it = c.begin(); it != c.end();) { if(need_delete()) it = c.erase(it); else ++it; } 2. 关联容器 (set,multiset,map,multimap) 关联容器的 erase 方法没有返回值,被删除的迭代器失效,所以删除前必须确保能得到下一个迭代器,可以用 “ 后置递增迭代器 ” 技术。 map<int,int> m; for(map<int,int>::iterator it = m.begin(); it != m.end();) { if(need_delete()) m.erase(it++); else ++it; } m.erase 得到 it 的一个副本,在 erase 真正开始之前 it 已经递增了。 所以 erase 得到了当前的迭代器,在 erase 内部工作开始之前 it 已经 ++ 了,正好满足我们的需要。 3. 非连续内存序列容器 (list) 只所以单独列出来是因为以上两种方法对 list 都适用

docker容器的底层技术

半腔热情 提交于 2020-02-22 13:43:07
cgroup(实现资源限制) cgroup全称control group。linux操作系统通过cgroup可以设置进程使用CPU、内存和IO资源的限制。--cpu-shares、-m、--device-write-bps实际上就是在配置cgroup。 在/sys/fs/cgroup/cpu/docker目录中,linux会为每个容器创建一个cgroup目录,以容器的长ID命名的目录中包含所有与cpu相关的cgroup配置,文件cpu.shares保存的就是--cpu-shares的配置,同样的,/sys/fs/cgroup/memory/docker和/sys/fs/cgroup/blkio/docker中保存的就是内存以及block io的cgroup配置 namespace(实现资源隔离) 在每个容器中,都有文件系统、网卡等资源,这些资源看上去都是容器自己的。拿容器来说,每个容器都会认为自己有一块独立的网卡。即使host上只有一块物理网卡。这种方式非常好,它使得容器更像一个独立的计算机 linux实现这种方式的技术是namespace。namespace管理着host中全局唯一的资源。可以让每个容器都觉得只有自己在使用它。换句话说,namespace实现了容器间资源的隔离 Linux使用了6种namespace,分别对应6种资源:mount、uts、ipc、pid