容器

Docker入门

时光怂恿深爱的人放手 提交于 2020-02-04 10:25:25
一:目前面临的难题 软件开发最大的麻烦事之一,就是环境配置。用户计算机的环境都不相同,你怎么知道自家的软件,能在那些机器跑起来? 用户必须保证两件事:操作系统的设置,各种库和组件的安装。只有它们都正确,软件才能运行。举例来说,安装一个 Python 应用,计算机必须有 Python 引擎,还必须有各种依赖,可能还要配置环境变量。 如果某些老旧的模块与当前环境不兼容,那就麻烦了。开发者常常会说:"它在我的机器可以跑了"(It works on my machine),言下之意就是,其他机器很可能跑不了。 环境配置如此麻烦,换一台机器,就要重来一次,旷日费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装?也就是说,安装的时候,把原始环境一模一样地复制过来。 二:虚拟机和Linux容器的区别   虚拟机: (1)资源占用多 虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有 1MB,虚拟机依然需要几百 MB 的内存才能运行。 (2)冗余步骤多 虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。 (3)启动慢 启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用程序才能真正运行。   Linux容器: 由于虚拟机存在这些缺点,Linux 发展出了另一种虚拟化技术

STL(1) —— map

我与影子孤独终老i 提交于 2020-02-04 03:55:12
文章目录 一、插入 二、删除 三、查询 四、排序 这篇文章是在做一道ccf题的时候起意写的,也是为了方便自己以后回顾叭。包含一些map的常用简单操作。 一、插入 在使用map时,插入有3种方法。 用insert函数插入pair。 用insert函数插入value_type数据。 用array数组方式插入。 map<int,string> student; //1 student.insert(pair<int,string>(000,"student0"); //2 student.insert(map<int,string>::value_type(001,"student1"); //3 student[12] = "student12"; 这三种方法第一种和第二种效果是一样的,不能违背map的唯一性,也就是如果原本map容器种存在该key值,那么插入失败。但是第三种可以插入覆盖原值。 二、删除 map容器种和删除相关的函数有erase、clear、empty等。 empty 用来判断map容器是否为空。函数返回值为bool型,返回true说明是空map,反之则表示map中有元素。 clear 用来清空map容器。 erase erase函数用来删除指定元素,map中写了三种erase函数方便我们使用。 1、迭代器删除 2、用关键字删除 3、范围删除 //迭代器刪除 iter

常规容器下SpringBootServletInitializer如何实现web.xml作用解析

房东的猫 提交于 2020-02-04 01:52:20
在之前的《使用jsp作为视图模板&常规部署》章节有过一个实践,需要启动类继承自SpringBootServletInitializer方可正常部署至常规tomcat下,其主要能够起到web.xml的作用。下面通过源码简单解析为何其能够替代web.xml。 本章概要 1、源码分析如何实现SpringBootServletInitializer整个加载过程; 2、实现自定义WebApplicationInitializer配置加载; 3、实现自定义ServletContainerInitializer 配置加载; 示例代码如下 1、首先web.xml主要配置各种servlet,filter,listener等,如常见的Log4jConfigListener、OpenSessionInViewFilter、CharacterEncodingFilter、DispatcherServlet等,此部分信息均是容器启动时加载。 2、在springboot中我们从SpringBootServletInitializer源码入手: public abstract class SpringBootServletInitializer implements WebApplicationInitializer{ .................. public void onStartup

【STL 笔记、一】容器:vector

感情迁移 提交于 2020-02-04 01:52:09
文章目录 1 STL 简介 2 容器 vector 2.1 构造 2.2 成员函数 2.2.1 assgin 2.2.2 数据大小操作 2.2.1.empty 2.2.2 容量 2.2.3 删除与插入操作 2.2.4 swap 3 vector总结 1 STL 简介 STL是Standard Template Library的简称,中文名标准模板库 STL可分为 容器(containers)、 迭代器(iterators)、 空间配置器(allocator)、 配接器(adapters)、 算法(algorithms)、 仿函数(functors)六个部分。 选自百度词条 STL百度词条 C++标准中,STL组件被组织命名为以下13个头文件 < algorithm> < deque> < functional> < iterator> < vector> < list> < map> < memory.h> < numeric> < queue> < set> < stack> < utility> 2 容器 vector 向量(vector) 连续存储的元素< vector>; vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 为了更好理解,不用基础类型,自行定义一个MyInt结构体 struct MyInt { string name ; //用作标识符

云上跑容器,如何降低存储成本

ε祈祈猫儿з 提交于 2020-02-03 23:17:04
PX-Autopilot: 自动化的存储容量管理,节省一半的云存储成本 不少客户都在使用K8S来管理容器,并且通过Portworx来管理容器存储。虽然云原生的方式让我们获得了更大的自动化和灵活度,许多客户在容器下层的基础架构层的扩展性方面,仍然有一定的局限。K8S和Portworx能够自动化部署容器应用,但是这些应用所基于的基础架构还无法通过自动化的方式进行扩展。DevOps团队还经常被要求去做基础架构投资成本收益的财务分析,并增加财务管理手段来降低成本和让成本更具备可预测性。当基础架构被转移到公有云后,成本管理就成为更加重要的方面,不少用户在公有云上的成本甚至高于他们原有的本地部署架构的成本。Portworx新发布的PX-Autopilot能够对存储基础架构进行更加有效的运营管理,并且降低一半的存储成本。 PX-Autopilot: 自动化的存储容量管理 PX-Autopilot让客户能够自动化的扩展存储, 不仅是扩展某个容器化应用所属的存储(通过PVC的扩容) ,还可以对基础架构层的存储池进行扩容。Portworx2.3.1最新版本中,已经包含了PX-Autopilot。通过PX-Autopilot,客户能够更加方便的构建企业级自服务K8S应用和数据管理能力, 不论是在本地部署,私有云,还是公有云中 。 我们的目的是帮助客户: 大幅简化为容器应用做存储扩容的操作

动态代理

不羁岁月 提交于 2020-02-03 19:36:08
创建代理 InvocationHandler接口 常见用例 数据库连接以及事物管理 单元测试中的动态Mock对象 自定义工厂与依赖注入(DI)容器之间的适配器 类似AOP的方法拦截器 利用Java反射机制你可以在运行期动态的创建接口的实现。java.lang.reflect.Proxy类就可以实现这一功能。这个类的名字(译者注:Proxy意思为代理)就是为什么把动态接口实现叫做动态代理。动态的代理的用途十分广泛,比如数据库连接和事物管理(transaction management)还有单元测试时用到的动态mock对象以及AOP中的方法拦截功能等等都使用到了动态代理。 创建代理 你可以通过使用Proxy.newProxyInstance()方法创建动态代理。newProxyInstance()方法有三个参数: 1、类加载器(ClassLoader)用来加载动态代理类。 2、一个要实现的接口的数组。 3、一个InvocationHandler把所有方法的调用都转到代理上。 如下例: InvocationHandler handler = new MyInvocationHandler(); MyInterface proxy = (MyInterface) Proxy.newProxyInstance( MyInterface.class.getClassLoader(), new

打算用容器跑生产系统?备份怎么做才靠谱?

我们两清 提交于 2020-02-03 18:05:38
PX-Backup: 云原生应用备份与恢复利器 对于IT系统来说,备份是至关重要的。 很多情况下需要用到备份数据。例如系统被发现有Bug后,运维团队需要从某个具体时间点的备份数据来重新恢复之前的应用。或者需要调出3年前的某批数据,来供审计部门调查合规性。 对于容器化的应用来说,目前的应用备份操作,以及在多环境中追踪数据的完整性和一致性的操作,都是手动且比较复杂的。 有些工具能够启动备份的过程,但是这些工具需要能跟传统的企业级存储系统集成。它们并不能很好的支持Kubernetes的环境,并且不能够提供完整的、端到端的企业级云原生备份解决方案。 PX-Backup能够很好的解决问题。一个端到端的备份解决方案,专门为基于Kubernetes的应用而设计,PX-Backup有效管理容器数据的生命周期,对相关元数据进行归类,增加了数据访问的可见性。 通过简单的鼠标点击即可完成Kubernetes应用的整体备份和恢复,包括数据、应用配置、以及Kubernetes对象。PX-Backup支持应用的备份,不论数据是存储在Portworx Enterprise上,还是存储在公有云中并通过Kubernetes CSI插件进行管理的块存储里:包括微软Azure,亚马逊AWS,Google云。 PX – Backup 一个Kubernetes应用一般包括一个/多个Pods以及其他的Kubernetes对象

迭代器和生成器

◇◆丶佛笑我妖孽 提交于 2020-02-03 15:48:24
迭代 : 访问集合元素的一种方式. 通常把使用for循环取数的过程称为遍历, 也叫迭代. 可迭代对象 (Iterable): 把可以通过for…in…这类语句迭代读取⼀条数据供我们使⽤的对象称之为可迭代对象. 很多容器都是可迭代对象(iterable), 并不是所有容器都是可以迭代的;但凡可以返回一个迭代器的对象都是可迭代对象 ; 容器: 这个称呼在其他博客上看到的, 了解下; 一种把多个元素组织在一起的数据结构,容器中的元素可以逐个地迭代获取,可以用 in , not in 关键字判断元素是否包含在容器中 . 常见的str, list, set, dict都是容器 可以使用 isinstance() 判断一个对象是否是 Iterable 对象 12345678 from collections import Iterableprint(isinstance([], Iterable)) print(isinstance((), Iterable)) # 判断元组print(isinstance({}, Iterable)) # 判断字典print(isinstance("", Iterable)) # 判断字符串print(isinstance(100, Iterable)) # 判断整数print(isinstance(False, Iterable)) # 判断boolean

map映照容器

爷,独闯天下 提交于 2020-02-03 13:41:04
set和map都是泛型库对二叉树的一个泛化。 一、map的相关原理 map映照容器所处理的元素数据,与数据库中的具有键值的记录非常相似,由一个键值和其它若干个数据(映照数据组成),键值和映照数据之间,可建立一个数学上的映照关系。容器的数据结构是采用红黑树进行管理,元素值不允许重复,所使用的节点元素的比较函数,只对元素的键值进行比较,元素的各个数据项可通过键值检索。 数据构成如图所示: (一个pair对象) 如图所示为map容器的一个元素的数据组成,可通过pair封装成一个结构对象。map容器所要做的,就是将这个pair对象插入到红黑树中,完成一个元素的添加,同时,也要提供一个仅使用键值进行比较的函数对象,将它传递给红黑树。由此,就可以利用红黑树的操作,map元素数据插入到二叉树的正确位置,也可以根据键值进行元素的删除和检索。 map通过内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在std map内部所有的数据都是有序的。 二、map的应用 1、创建 (2)map() 利用默认的less<T>函数对象和内存分配器,创建一个没有任何元素的map对象。 map<char,int,greater<char> >m; //创建空map对象,元素的键值类型为char,元素的映照数据类型为int,键值的比较函数对象为greater<char>. (2

(4.4)Docker容器中部署网站

假装没事ソ 提交于 2020-02-03 12:09:59
文章目录 1.步骤如下: 1.步骤如下: (1)创建映射80端口的交互式容器 root@ubuntu : / home / jiwangreal # docker run -p 80 --name web -i -t ubuntu /bin/bash root@a35b9bee17c1 : / # apt-get update (2)安装Nginx服务 root@a35b9bee17c1 : / # apt-get install -y nginx 如果安装nginx成功的话:可以看到 root@d0cc272587eb : / etc # cd /etc/n networks nginx / nsswitch . conf (3)安装文本编辑器vim root@a35b9bee17c1 : / # apt-get install -y vim (4)创建静态页面 root@a35b9bee17c1 : / # mkdir -p /var/www/html root@a35b9bee17c1 : / # cd /var/www/html/ root@a35b9bee17c1 : / var / www / html # vim index.html 内容如下: < html > < head > < title > Nginx in Docker < / title > < /