iNet

容器技术之Docker网络

你说的曾经没有我的故事 提交于 2020-08-10 09:02:31
  上一篇博客我们主要聊了下docker镜像相关的说明以及怎样基于现有镜像制作镜像、分发镜像到docker仓库中的相关测试;回顾请参考 https://www.cnblogs.com/qiuhom-1874/p/12941508.html ;今天我们来聊一聊docker的网络相关说明;   在使用vm虚拟机时,我们知道一个虚拟机可以有三种虚拟网络接口,第一种网络是桥接网络,第二种是NAT网络,第三种是仅主机网络;这三种虚拟网络接口后面对应的都是一个个不同的虚拟网络;我们要想让虚拟机在那个网络中工作就把对应接口更换成那个接口即可;相对于docker来讲,docker内部也有三种虚拟网络接口,它们分别是bridge,host,none这三种;bridge是docker容器默认的网络类型,启动容器不指定网络时默认是bridge,该网络类型是桥接到宿主机的docker0桥上的,而docker0桥上一个NAT桥;host在docker里不是仅主机网络类型,它这里的意思是共享宿主机网络,即同宿主机共享同一网络名称空间;none表示空网络类型,在docker的网络中表现形式就是我们启动容器指定网络类型为none,在容器内部除了lo接口就没有别的其他网络接口,这意味着该容器网络只能自己和自己通信,有点类似vm里的仅主机网络;其实除了以上三种网络,docker也支持自定义网络

linux 网络编程

…衆ロ難τιáo~ 提交于 2020-08-10 07:03:52
1 #include <iostream> 2 #include <strings.h> 3 #include < string .h> 4 #include <sys/types.h> 5 #include <sys/socket.h> 6 #include <netinet/ in .h> 7 #include <arpa/inet.h> 8 #include <stdio.h> 9 #include <stdlib.h> 10 11 using namespace std; 12 13 #define server 0 14 #define client 1 15 16 #define ipaddr "192.168.0.255" 17 #define port 9999 18 19 #define buf_len 1024 20 21 // 数据发送 22 int Process_client( void ){ 23 int sockfd; 24 struct sockaddr_in des_addr; // 地址族,16位端口号,32位IP地址,64位不使用的预留 25 int send_len; // 发送数据的长度 26 char sendline[buf_len] = { " jikexianfeng@outlook.com\n " }; 27 const int

Linux 进程间通信(IPC)总结

半腔热情 提交于 2020-08-09 12:49:44
概述 一个大型的应用系统,往往需要众多进程协作,进程(Linux进程概念见附1)间通信的重要性显而易见。本系列文章阐述了 Linux 环境下的几种主要进程间通信手段。 进程隔离 进程隔离是为保护操作系统中进程互不干扰而设计的一组不同硬件和软件的技术。这个技术是为了避免进程A写入进程B的情况发生。 进程的隔离实现,使用了虚拟地址空间。进程A的虚拟地址和进程B的虚拟地址不同,这样就防止进程A将数据信息写入进程B。 虚拟地址空间 当创建一个进程时,操作系统会为该进程分配一个 4GB 大小的虚拟进程地址空间。之所以是 4GB ,是因为在 32 位的操作系统中,一个指针长度是 4 字节,而 4 字节指针的寻址能力是从 0x00000000~0xFFFFFFFF ,最大值 0xFFFFFFFF 表示的即为 4GB 大小的容量。与虚拟地址空间相对的,还有一个物理地址空间,这个地址空间对应的是真实的物理内存。要注意的是这个 4GB 的地址空间是“虚拟”的,并不是真实存在的,而且每个进程只能访问自己虚拟地址空间中的数据,无法访问别的进程中的数据,通过这种方法实现了进程间的地址隔离。 针对 Linux 操作系统,将最高的1G字节(从虚拟地址 0xC0000000 到 0xFFFFFFFF )供内核使用,称为 内核空间 ,而较低的 3G 字节(从虚拟地址 0x00000000 到0xBFFFFFFF)

select函数参数及其使用

人走茶凉 提交于 2020-08-09 01:42:49
Select在Socket编程中还是比较重要的,它能够监视我们需要监视的文件描述符的变化情况——读写或是异常。   Select的函数格式(Unix系统下的伯克利socket编程,和windows下的略有区别,体现两个方面:一是select函数的第一个参数,在windows下可以忽略,但在linux下必须设为最大文件描述符加1;二是结构fd_set在两个系统里定义不一样): int select( int maxfdp,fd_set * readfds,fd_set * writefds,fd_set * errorfds, struct timeval * timeout); /* 参数列表 int maxfdp是一个整数值,是指集合中所有文件描述符的范围,即所有文件描述符的最大值加1,不能错!在Windows中这个参数的值无所谓,可以设置不正确。    fd_set *readfds是指向fd_set结构的指针,这个集合中应该包括文件描述符,我们是要监视这些文件描述符的读变化的,即我们关心是否可以从这些文件中读取数据了,如果这个集合中有一个文件可读,select就会返回一个大于0的值,表示有文件可读,如果没有可读的文件,则根据timeout参数再判断是否超时,若超出timeout的时间,select返回0,若发生错误返回负值。可以传入NULL值,表示不关心任何文件的读变化。  

Linux网络编程-很全面

喜夏-厌秋 提交于 2020-08-08 12:57:06
注:作者王晓,本人认为总结得很好,故记之,绝无侵权之意。 1. LINUX网络编程基础知识 1 1.1. TCP/IP协议概述 1 1.2. OSI参考模型及TCP/IP参考模型 1 1.3. TCP协议 3 1.4. UDP协议 5 1.5. 协议的选择 6 2. 网络相关概念 6 2.1. socket概念 7 2.2. socket类型 8 2.3. socket信息数据结构 8 2.4. 数据存储优先顺序的转换 8 2.5. 地址格式转化 9 2.6. 名字地址转化 10 3. socket编程 13 3.1. 使用TCP协议的流程图 13 3.2. 使用UDP协议的流程图 24 3.3. 设置套接口的选项setsockopt的用法 31 3.4. 单播、广播、组播(多播) 32 1. LINUX网络编程基础知识 1.1. TCP/IP 协议概述 协议protocol:通信双方必须遵循的规矩 由iso规定 rpc文档 osi参考模型:(应-表-会-传-网-数-物) è 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 tcp/ip模型4层: 应用层{http超文本传输协议 ftp文件传输协议 telnet远程登录 ssh安全外壳协议 stmp简单邮件发送 pop3收邮件} 传输层{tcp传输控制协议,udp用户数据包协议} 网络层{ip网际互联协议

MySQL 数据表设计规范

家住魔仙堡 提交于 2020-08-08 11:10:02
数据命名规范 所有数据库对象名称必须使用小写字母并用下划线分割。 所有数据库对象名称禁止使用 MySQL 保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来)。 数据库对象的命名要能做到见名识意,并且最后不要超过 32 个字符。 临时库表必须以 tmp 为前缀并以日期为后缀,备份表必须以 bak 为前缀并以日期 (时间戳) 为后缀。 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查询效率降低)。 数据库基本设计规范 1、所有表必须使用 InnoDB 存储引擎 没有特殊要求(即 InnoDB 无法满足的功能如:列存储,存储空间数据等)的情况下,所有表必须使用 InnoDB 存储引擎 MySQL 5.5 之前默认使用 Myisam,5.6 以后默认的为 InnoDBInnoDB 支持事务,支持行级锁,更好的恢复性,高并发下性能更好。 2、数据库和表的字符集统一使用 UTF8MB4 兼容性更好,统一字符集可以避免由于字符集转换产生的乱码,不同的字符集进行比较前需要进行转换会造成索引失效。 3、所有表和字段都需要添加注释 使用 comment 从句添加表和列的备注 从一开始就进行数据字典的维护。 4、尽量控制单表数据量的大小,建议控制在 500 万以内 500 万并不是 MySQL

关于Linux操作系统的开机过程详解

偶尔善良 提交于 2020-08-07 21:39:26
由于操作系统正在变得越来越复杂,所以开机引导和关机下电的过程也越来越智能化。从简单的DOS系统转移到 Windows NT系统,人们已经亲身感受到了这些变化——这已不仅仅是核心操作系统的启动引导和关闭了,还包括必须要同时启动或者关闭相当数量的服务项目。类似于 Windows NT,Linux系统启动过程需要打开的服务项目也是数量极大的。   这里,我们假设大家已经熟悉其它操作系统的引导过程,了解硬件的自检引导步骤,就只从Linux操作系统的引导加载程序(对个人电脑而言通常是LILO)开始,介绍Linux开机引导的步骤。   加载内核   LILO启动之后,如果你选择了Linux作为准备引导的操作系统,第一个被加载的东西就是内核。请记住此时的计算机内存中还不存在任何操作系 统, PC(因为它们天然的设计缺陷)也还没有办法存取机器上全部的内存。因此,内核就必须完整地加载到可用RAM的第一个兆字节之内。为了实现这个目的,内核 是被压缩了的。这个文件的头部包含着必要的代码,先设置CPU进入安全模式(以此解除内存限制),再对内核的剩余部分进行解压缩。   执行内核   内核在内存中解压缩之后,就可以开始运行了。此时的内核只知道它本身内建的各种功能,也就是说被编译为模块的内核部分还不能使用。最基本的是, 内核必须有足够的代码设置自己的虚拟内存子系统和根文件系统(通常就是ext2文件系统)

Linux+Python高端运维班第一次作业

*爱你&永不变心* 提交于 2020-08-07 08:31:31
Linux+Python 高端运维班第一次作业 1 、按系列罗列 Linux 的发行版,并描述不同发行版之间的联系与区别。 1 ) linux 的发行版介绍 slackware : Slackware Linux 是由 Patrick Volkerding 开发的 GNU/Linux 发行版,一直坚持 KISS 原则。 suse: 在欧洲比较流行的 linux 发行版本 sles : suse 企业版 opensuse : suse 桌面免费发行版本 debian :服务器版,消耗资源少,稳定。 ubuntu mint redhat :成立于 1992 年 rhel : redhat enterprise linux ,用于企业商用,为了保证服务器稳定,每 18 个月发行一个新版本 centos: 开源版本,和 RHEL 几乎一样,兼容 rhel 的格式,已被 redhat 收购。 fedora : linux 免费桌面版,得到 redhat 官方支持,用于测试新软件,每 6 个月发行一个新版本 Archlinux Gentoo LFS:Linux From scratch Androld:kernel+busybox+java 虚拟机,主要用于移动终端 2 )不同发行版之间的联系 都是在开源的 linux 内核代码进行再次开发而形成不同的发行版,而且必须支持 GNU

WSL2启动Jupyter,自动使用宿主机浏览器访问

馋奶兔 提交于 2020-08-06 10:51:57
使用本方法前,请确保Jupyter安装完成。 思路说明: 按以下思路编写shell脚本(文末直接查看脚本) 指定使用WSL2网络地址0.0.0.0启动Jupyter jupyter notebook --ip=0.0.0.0 ifconfig 查看WSL2 IPV4地址 将启动时输出的访问地址中的IP替换为WSL2 IPV4地址 通过wsl2打开宿主机浏览器,访问上一步中输出的地址 wsl中允许调用window命令或执行.exe文件。例如在wls中执行以下命令,可以打开chrome并访问百度。 ${chrome路径}/chrome.exe "http://www.baidu.com" 此处需要注意:windows目录中可以包含空格。在wsl命令行中直接使用到带空格的目录时,直接加上反斜杠对空格进行转义即可。但是在shell脚本中,即使进行了转义,使用时还是会报错。 解决的办法是,先用 ln -s ${.exe路径} ${指定路径}/${别名} 将需要使用到的exe文件直接链接到指定目录,再在shell脚本中进行调用。 例如:(请根据实际情况修改exe路径,及链接的目标路径) # 我使用的是新版edge,exe路径为“C:/Program Files (x86)/Microsoft/Edge/Application/msedge.exe”,在wsl中只需要将“C:”改为“/mnt/c

Haproxy+Keepalived高可用环境部署梳理(主主和主从模式)

懵懂的女人 提交于 2020-08-06 09:35:12
Nginx、LVS、HAProxy 是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,通常会结合Keepalive做健康检查,实现故障转移的高可用功能。 1)在四层(tcp)实现负载均衡的软件: lvs------>重量级 nginx------>轻量级,带缓存功能,正则表达式较灵活 haproxy------>模拟四层转发,较灵活 2)在七层(http)实现反向代理的软件: haproxy------>天生技能,全面支持七层代理,会话保持,标记,路径转移; nginx------>只在http协议和mail协议上功能比较好,性能与haproxy差不多; apache------>功能较差<br> 总的来说,一般是lvs做4层负载;nginx做7层负载;haproxy比较灵活,4层和7层负载均衡都能做 一般对负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术。具体的应用需求还得具体分析: 1)如果是中小型的 Web 应用,比如日PV小于1000 万,用 Nginx 就完全可以了; 2)如果机器不少,可以用DNS轮询, LVS所耗费的机器还是比较多的;大型网站或重要的服务,且服务器比较多时, 可以考虑用LVS。 还有一种是通过硬件来进行进行,常见的硬件有比较昂贵的F5和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护