Docker基础:概述
概述什么是容器容器技术由来已久,却直到几十年后因dotCloud公司(后更名为Docker)于Docker项目中发明的“容器镜像”技术创造性地解决了应用打包的难题才焕发出新的生命力并以“应用容器”的面目风靡于世,Docker的名字更是响彻寰宇,它催生出或改变了一大批诸如容器编排、服务网格和云原生等技术,深刻影响了云计算领域的技术方向。 容器是一种轻量级、可移植、自包含的软件打包技术,使应用程序可以在几乎任何地方以相同的方式运行。 容器的优势对于开发人员: Build Once、Run Anywhere。 容器意味着环境隔离和可重复性。开发人员只需为应用创建一次运行环境,然后打包成容器便可在其他机器上运行。另外,容器环境与所在的Host环境是隔离的,就像虚拟机一样,但更快更简单。 对于运维人员: Configure Once、Run...
Docker基础:命令总结
常用命令归纳123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657container 管理容器image 管理镜像network 管理网络node 管理Swarm节点plugin 管理插件secret 管理Docker secretsservice 管理服务stack 管理Docker stacksswarm 管理Swarm集群system 查看系统信息volume 管理卷images 查看镜像列表rmi 删除镜像save 将指定镜像保存成 tar 归档文件load 从存档或者STDIN加载镜像build 从一个DockerFile构建镜像commit ...
CDN技术基础
参考:《CDN技术详解》 概述在互联网商业化不久,由于缺乏必要的流量管理和疏通手段,骨干带宽被迅速消耗掉,IP网络流量秩序濒于失衡。为解决这一难题,麻省理工学院的一批顶级科学家提出了CDN解决方案,从此以后,CDN就成为互联网的基础设施,伴随着互联网的潮起潮落而发展。 CDN(Content Distribute Network,内容分发网络)将内容推到网络的边缘,为用户提供就近性的边缘服务,从而保证服务的质量和整个网络上的访问秩序,解决了困扰内容提供商的内容“集中与分散”的两难选择,极大缓解了内容传送瓶颈。CDN的发展促使整个互联网产业进一步分工合作,使网站和应用开发者们能够更关注于上层应用。 产生背景1995年,麻省理工学院教授,互联网发明者Tim...
Python练习:文本内容检索替换
文本内容检索替换需求1python file_replace.py old_str new_str filename 代码123456789101112131415161718import sys# 获取变量old_str = sys.argv[1]new_str = sys.argv[2]filename = sys.argv[3]f = open(filename, 'r+') # 以读写模式打开data = f.read()new_data = data.replace(old_str, new_str)old_count = data.count(old_str)f.seek(0)f.truncate()f.write(new_data) # 写入替换后的内容print(f'{filename}中的{old_str}替换为{new_str},共计{old_count}处。') 验证测试文本test.txt如下: 1234abcddd a fdg...
Python练习:用户登录认证
用户登录认证需求 要求用户输入账号密码进行登陆 用户账号信息保存在文件内 用户密码输入错误三次锁定用户,下次再登录,检测是这个被锁定的用户,则依然不允许登录,提示已被锁定 思路 需要从文件中读取用户信息,保存为字典,key=用户名,value=用户信息; 输入用户名,在字典中查找是否存在该用户名,若存在再判断该用户是否锁定,若锁定则不允许登录,提示已被锁定; 输入密码,查询字典判断密码是否正确,密码正确则登录成功,否则继续输入,直到输错3次提示将被锁定,修改用户状态为锁定状态写入文件; 代码1234567891011121314151617181920212223242526272829303132accounts = {} # 设置一个空字典,用于保存从文件中获取到的信息f1 = open('user.db', 'r') # 读取文件for line in f1: line = line.strip().split(',') # 将每行内容以列表形式返回 ...
Python学习:三元表达式、列表推导式和生成器表达式
三元表达式语法格式如下: 1为真时的结果 if 判断条件 else 为假时的结果 例子123name = input('姓名>>: ')res = '请进' if name == '张三' else '再见'print(res) 结果如下 1234姓名>>: 张三请进姓名>>: 李四再见 列表推导式列表推导式用于使用其他列表创建一个新列表。 语法格式如下: 12345# 格式1[表达式 for 变量 in 列表] # 格式2,对列表进行判断帅选[表达式 for 变量 in 列表 if 条件] 例1123# 求1-9的平方组成的列表l = [x**2 for x in range(1, 10)]print(l) 结果如下: 1[1, 4, 9, 16, 25, 36, 49, 64, 81] 例2123# 求1-9中偶数的平方组成的列表l = [x**2 for x in range(1, 10) if x % 2 ==...
Python学习:风格指南
PEP 8风格指南PEP是Python Enhancement Proposal的缩写,通常翻译为“Python增强提案”。每个PEP都是一份为Python社区提供的指导Python往更好的方向发展的技术文档,其中的第8号增强提案(PEP 8)是针对Python语言编订的代码风格指南。尽管我们可以在保证语法没有问题的前提下随意书写Python代码,但是在实际开发中,采用一致的风格书写出可读性强的代码是每个专业的程序员应该做到的事情,也是每个公司的编程规范中会提出的要求,这些在多人协作开发一个项目(团队开发)的时候显得尤为重要。我们可以从Python官方网站的PEP 8链接中找到该文档,下面我们对该文档的关键部分做一个简单的总结。 分号不要在行尾加分号, 也不要用分号将两条命令放在同一行。 行长度每行不超过80个字符。 例外: 长的导入模块语句 注释里的URL 不要使用反斜杠连接行 Python会将圆括号,中括号和花括号中的行隐式的连接起来 , 你可以利用这个特点. 如果需要, 你可以在表达式外围增加一对额外的圆括号。 12345Yes: foo_bar(self,...
Python学习:函数基础
函数基础除了可以直接使用的内置函数外,Python还支持自定义函数,即将一段有规律的、可重复使用的代码定义成函数,从而达到一次编写、多次调用的目的。 函数的本质就是一段有特定功能、可以重复使用的代码,这段代码已经被提前编写好了,并且为其起一个好听的名字。在后续编写程序过程中,如果需要同样的功能,直接通过起好的名字就可以调用这段代码。 函数的作用 结构化编程对代码的最基本的封装,一般按照功能组织一段代码; 封装的目的为了复用,减少冗余代码; 代码更加简洁美观、可读易懂 函数的定义Python函数:能完成一定的功能,由若干语句组成的语句块、函数名称、参数列表构成,它是组织代码的最小单元。 语法格式 1234def 函数名(参数1,参数2,参数3,...): '''注释''' 函数体 return...
Python学习:数据类型
概述什么是数据数据即变量的值,如name = 'John',John则是我们保存的数据。 Python3 中有六个标准的数据类型: Number(数值) String(字符串) List(列表) Tuple(元组) Sets(集合) Dictionary(字典) 数值Python的数值类型包括常规的类型:整数(没有小数部分的数字)、浮点数(通俗地说,就是有小数部分的数字)以及其它数值类型(复数、分数、有理数、无理数、集合、进制数等)。除了十进制整数,还有二进制数、八进制数、十六进制数。 需要说明的: Python 3.x中的整数不区分一般整数和长整型整数,3.x版本中的整数支持无穷精度; 任何时候浮点数都是不精确的。当带有小数点或科学计数的标记符号e或E,就表示这是浮点数; 当浮点数参与表达式的运算时,会以浮点数的规则进行运算,也就是整数会转换成浮点数类型; 数值类型是不可变对象,不可变意味着不可原处修改; 数值类型不可变说明:假如a = 3333,那么现在内存中会有一个内存块保存数值对象3333,如果修改它,比如对它加上1操作a +=...
Python学习:流程控制
关于流程控制Python 同样提供了现代编程语言都支持的两种基本流程控制结构,分支结构和循环结构: 分支结构用于实现根据条件来选择性地执行某段代码; 循环结构用于实现根据循环条件重复执行某段代码; Python使用if语句提供分支支持,提供了while、for-in循环,也提供了break和continue控制程序的循环结构。 在学习流程控制前,需要了解布尔、比较操作符等知识。 布尔值虽然整型、浮点型和字符串数据类型有无数种可能的值,但“布尔”数据类型只有两种值:True和False。Boolean(布尔)的首字母大写, 因为这个数据类型是根据数学家George Boole命名的。在作为Python代码输入时,布尔值True和False不像字符串,两边没有引号,它们总是以大写字母T或F开头, 后面的字母小写。 例如: 123456789>>> 2==2True>>> a=trueTraceback (most recent call last): File "<stdin>", line 1, in...