import os
|
|
判断
|
|
分割
|
|
from urllib.parse import urljoin
|
|
|
|
|
|
|
|
|
|
介绍
DockerSwarm 是Docker的一项功能,可以很容易地大规模投放Docker窗主机和容器. Docker窗群,或码头集群,该功能是由一个或多个主机Dockerized作为经典的节点,任何数量的工作节点组成.设置这样的系统需要仔细操纵Linux防火墙.
Docker Swarm正常工作所需的网络端口有:
TCP端口2376进行安全Docker窗客户端通信.此端口是Docker Machine工作所必需的. Docker机器用于编排Docker主机.
TCP端口2377 .此端口用于Docker Swarm或群集的节点之间的通信.它只需要在管理器节点上打开.
TCP和UDP端口7946的节点之间的通信(容器网络发现).
UDP端口4789的覆盖网络通信(容器入口联网).
注意:除了这些端口,端口22 (SSH的流量),并在集群上运行需要提供特定服务的其他端口必须是开放.
预前准备
设置组成集群的主机,包括至少一个群集管理器和一个群组工作者.您可以按照教程如何提供和管理远程Docker在Ubuntu 16.04Docker主机设置这些.
注意:您会注意到命令(在这篇文章中所有的命令)不能与前缀sudo .这是因为它假设您正在使用的登录到服务器docker-machine ssh使用Docker窗机设置后命令.
在本文中,您将学习如何使用所有Linux发行版上提供的不同防火墙管理应用程序在Ubuntu 16.04上配置Linux防火墙.这些防火墙管理应用程序是FirewallD,IPTables工具和UFW,简单的防火墙. .虽然本教程包含三种方法,每种方法都提供相同的结果,因此您可以选择最熟悉的方法.
UFW
UFW是Ubuntu发行版上的默认防火墙应用程序,包括Ubuntu 16.04
如果你只是设置你的Docker主机,UFW已经安装.您只需要启用和配置它
在将用作Swarm管理器的节点上执行以下命令:
之后,重新加载并启用UFW:
|
|
这可能不是必需的,但是在任何时候更改并重新启动防火墙时,都不必重新启动Docker守护程序:
|
|
然后在将用作工作线程的每个节点上,执行以下命令:
|
|
关闭防火墙
FirewallD
FirewallD是Fedora,CentOS和基于它们的其他Linux发行版上的默认防火墙应用程序.但FirewallD也可用于其他Linux发行版,包括Ubuntu 16.04.
如果您选择使用FirewallD而不是UFW,请首先卸载UFW:
|
|
当开机启动时会生成如下文件:
在将是Swarm管理器的节点上,使用以下命令打开必要的端口:
|
|
注意 :如果你犯了一个错误,需要删除的条目,输入
重新加载防火墙:
然后重新启动Docker.
然后在将用作Swarm工作程序的每个节点上,执行以下命令:
关闭防火墙
IPTables
要在任何Linux发行版上使用IPtables,您必须首先卸载任何其他防火墙实用程序.如果您从FirewallD或UFW切换,请先卸载它们.
|
|
接下来,使用此命令清除所有现有规则:
|
|
现在,您可以添加使用规则, iptables实用程序.第一组命令应该在将用作Swarm管理器的节点上执行.
|
|
在将用作Swarm工作程序的节点上,执行以下命令:
如果您希望在使用此方法后切换到FirewallD或UFW,正确的方法是首先停止防火墙:
|
|
查看开启端口
|
|
from datetime import date,datetime,timedelta
|
|
datetime.datetime 会精确到 %H%M%S 而datetime.date 不需要
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sorted函数按key本身的值对字典排序
对v值的排序
|
|
如果你想要合并的字符串是在一个序列或者 iterable 中,那么最快的方式就是使用 join() 方法
|
|
|
|
socket套接字.是一种通信机制,用于描述IP地址和端口,是一个通信链的句柄.操作socket就像操作Unix一样,一切皆是文件,.
0.0.0.0有多少个网卡,都可以连接到本机.
程序之间进行内存数据交换(通信)比较麻烦:每个程序的内存空间都是被保护的,不能被别的程序直接访问,所以要通过某种介质,管道或第三方工具,去通信.
nosql(第三方):将内存的数据缓存进来,供其它的程序调用,所有的程序都可以往里存数据,所有的程序都可以取数据.相当于实现了一个共享的内存空间.
而所谓的网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信(网络socket)
socket.AF_UNIX;只能够用于单一的Unix系统进程间通信
socket.AF_INET:服务器之间网络通信
socket.AF_INET6 IPv6
socket 处于第4层(传输层) ICMP(网络层)
socket通信的数据格式
socket.SOCK_STREAM :PCP三次握手
socket.SOCKDGRAM:UDP
socket.SOCK_RAW 原始套接字 可以处理普通套接字不能处理的ICMP,IGMP等网络报文 可以可以伪造IP
|
|
accept():等待客户端连接时阻塞与非阻塞
recv():等待客户端发送信息时阻塞与非阻塞,两者才是只能服务一个客户端的关键
|
|
利用进程来完成多任务,其实就是启动一个子进程(线程)来完成client.start()
也就是说: 来一个客户端连接分配一个进程或线程为其服务
区别在于:进程的cow(写时copy):能共用的资源尽量共用,实在不行才copy
|
|
但如果当有一个Socket使用到耗时的代码时,其它的Socket也将被阻塞
同时使用轮询机制,所以效率不高
Linux平台下的通过epoll来高效管理socket(server_socket,client_socket)
epoll的优点:socket通过事件通知机制(由socket本身的状态来告诉epoll,哪个socket可用,就不需要去轮询所有的socket了,更加高效的得到可用的Socket)
不是轮询的方式,epoll它只管你”活跃”的连接,而跟连接总数无关
参考
list derivation(列表推导式)
|
|
|
|
配置 pip conf,自动设置源
install pip 以及普通用户安装包的路径
install pip3 以及普通用户安装包的路径
root用户安装包之后的路径
更新pip
一键导出/安装所有安装包列表
|
|
|
|
|
|
安装好Anaconda之后,可以用conda install numpy来管理python包,就像pip一样 同时届有notebook: jupyter notebook –ip=127.0.0.1
https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 下载
sh xx.sh
同时也可以在pychome中也可以用jupyter notebook格式的文件了
信息的存储单位:位(bit)–>字节(Byte=8bit,已经可以表示所有的英语符号)–>字符(char=2Byte) 1K =1024byte 1M = 1024K G T P
字节是电脑最小的处理单元 一个字节:0x01
字符:也是一个信息单位,它是各种文字和符号的总称.比如人类 各国看得懂的文字,符号,图形符号,数字.
字符编码:是指对于字符集中的字符,将其编码为特定的二进制数,以便计算机处理.
解码:将计算机处理后的二进制信息,转换成人类看得懂的字符.
字符集和字符编码往往被认为是同文义的概念.ASCII字符编码既表示了字符集也表示了的对应的字符编码.
ASCII字符集:共有128个字符(美国,本身只需要一个字节),包含显示字符(英文大小写,阿拉伯数字)和控制字符(回车,空格键)
GB2312字符集:中国标准的简体中文字符集,其中还有一个中国的GBK字符集
Unicode字符集:世界各国语言中使用到的所有字符.用了4个字节,2个字符.汉字’严’的Unicode编码是十六进制数4E25,转化成二进制有15位
UTF-8:是一种针对Unicode的可变长度字符编码,它使用一到四个字节来表示字符.ASCII字符继续用一个字节表示.中文可能用到4个字节.
先来一个关于简单的ASCII字符集,解码和编码的例子
中文字符集的例子
|
|
|
|
在Python中,最基本的数据结构就是序列(sequence).序列中的每个元素都会分配一个序号即元素的位置也称为索引.序列的第一索引是0,最后一个是-1.
序列有6种内建的序列.最常用的是元组(不可以改),列表(可以修改)和字符串,还有Unicode字符串,buffer对象,xrange对象.内建函数会返回元组,它与Python内部的动作方式有关,几乎在所有的情况下都可以用列表替代元组.例外的情况是:使用元组作为字典的键.
所有序列类型都可以进行某些特定的操作:索引(indexing),分片(slicing),加(adding两种相同的类型的序列才能进行连接操作),乘(multiplying),以及检查某个元素是否属于序列成员(成员资格) in,除此之处,Python还有计算序列长度len(),找出最大元素max()和最小元素min()的内建函数以及迭代(iterator)
l = list(‘hello’) [‘h’,’e’,’l’,’l’,’o’]list函数适用于所有类型的序列,而不仅仅是字符串.list()为内建函数.
x=[31,5,7,8]
y=sorted(x),这个函数实际上可以用于任何序列,任何可迭代对象,却总是返回一个列表. sorted(‘Python’)
元素赋值(不能超过索引进行赋值):是替换而不是累加
|
|
删除元素
|
|
追加元素
|
|
分片赋值
l.count(‘h’):统计某元素在列表中出现的次数.
l.index(‘h’):用于列表中找出某个元素在列表中第一个匹配的索引位置.
l.reverse():将列表元素反向存放,它返回的是一个迭代器(iterator)对象.
sort():在原位置对列表进行排序.在”原位置排序”意味着改变原来的列表,从而让其中的元素按一定的顺序排列,而不是简单地返回一个已经排序的列表副本.
|
|
元组通过圆括号 括起来的.如果你用逗号分隔了一些值,那么你就自动创建的元组.
tuple([1,2,3]):以一个序列作为参数并把它转换为元组.tuple并不是真正的函数,而是一种类型.
dict()像list,tuple,str一样,不是真正的函数,都只是类型.这些方法如果都不带参数,返回的都是对应的空字典,列表,元组,字符串.
创建字典
|
|
典的基本操作
|
|
到V
|
|
修改V
|
|
删除 K-V
|
|
更新
|
|
K in d # 检查d中是否含有键为K的项. v in l:# 查找列表的值,而不索引
键视图的一个很少被了解的特性就是它们也支持集合操作,比如集合并、交、差运算
dict copy
copy 拷贝返回一个相同的字典,此处是 Java 中的浅拷贝
共用对象的引用,独立的基本类型的引用
deepcopy 是深拷贝,有自己独立的存储空间
zip():并行迭代,返回一个元组的列表,zip可以处理不等长的序列,当最短的序列用完的时候就会停止.
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
|
|
More info: Writing
|
|
More info: Server
|
|
More info: Generating
|
|
More info: Deployment