Iptables学习笔记
背景KVM安装了虚拟机通过NAT方式访问外放,但是端口映射一直不成功,可能是iptables哪里配置有问题。
起因在CentOS学习KVM笔记-网络篇的时候需要映射虚拟机端口,按照网上的iptables介绍的端口映射规则,加了这三条规则,但是没有效果。
123iptables -A INPUT -p tcp --dport 10122 -j ACCEPTiptables -t nat -A PREROUTING -d 192.168.124.21 -p tcp -m tcp --dport 10122 -j DNAT --to-destination 192.168.122.101:22iptables -t nat -A POSTROUTING -s 192.168.122.0/255.255.255.0 -d 192.168.122.101 -p tcp -m tcp --dport 22 -j SNAT --to-source 192.168.122.1
iptables介绍iptables概念按照正常的理解上,iptables是个防火墙,跟windows里面的防火墙规则类似。 ...
Docker垃圾镜像和容器批量删除
使用一段时间Docker后会产生很多临时镜像(悬虚镜像),数量还少勉强手动逐条删除,一段时间不清理数量多起来删除很费时,所以想批量删除。可以利用linux三剑客命令awk
awkawk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
使用方法 : awk ‘{pattern + action}’ {filenames}编程时用法 : command1 | awk {print $1}
输出结果第一列数据
1docker images | awk '{print $1}'
再配合grep查找关键字,可以用正则表达式,xargs结果作为参数给docker rmi,删除指定标签的镜像
1docker images | awk '{print $1}' | grep mysql | xargs -t docker rmi
删除临时镜像
1doc ...
CentOS安装Docker
安装Docker1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
1uname -r
2、使用 root 权限登录 Centos。确保 yum 包更新到最新
1yum update
3、卸载旧版本(如果安装过旧版本的话)
12345678yum remove -y docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是device ...
CentOS学习KVM笔记-磁盘篇
基础概念KVM 虚拟化中使用的镜像格式通常为 RAW 和 QCOW2 两种格式.
QCOW2
qcow2 镜像格式是 QEMU 模拟器支持的一种磁盘镜像。它也是可以用一个文件的形式来表示一块固定大小的块设备磁盘。与普通的 raw 格式的镜像相比,有以下特性:占用空间小,即使文件系统不支持空洞(holes);支持写时拷贝(COW, copy-on-write),镜像文件只反映底层磁盘的变化;支持快照(snapshot);镜像文件能够包含多个快照的历史;支持 zlib 的压缩;支持 AES 加密qcow2 第二代的QEMU写时复制格式,QEMU推荐的镜像格式,支持稀疏文件,支持AES加密,支持基于zlib的压缩,支持snapshot,支持后备镜像
RAW
RAW 格式镜像文件又被称为 原始镜像 或 裸设备镜像, RAW 格式镜像文件能够直接当作一个块设备类似/dev/sdb 设备可以直接挂载;可以使用dd指令创建一个 File 就能够模拟 RAW 镜像文件;性能较 QCOW2 要更高;能够随意转换格式;RAW不支持快照raw 简单的二进制镜像文件,一次性占用 ...
Docker容器关闭后无法重启
hexo容器一直映射80端口。docker重启后起不来hexo,报错如下
12ERROR: for hexo-server Cannot start service hexo-server: driver failed programming external connectivity on endpoint hexo-server (32643e5b5ba8b0adb6f203032e5e36cd6b3e531ab908f0ab77bb4a877a21cef6): Error starting userland proxy: /forwards/expose/port returned unexpected status: 500ERROR: Encountered errors while bringing up the project.
查看端口netstat -ano | grep 80
123λ netstat -ano | grep 80 TCP 0.0.0.0:80 0.0.0.0:0 LISTENING ...
Shell脚本格式dos和unix
在运行docker镜像的时候,报错No such file or dir执行的shell脚本文件明明存在。结果意想不到竟然是shell脚本有格式的区别。
在执行shell脚本时提示这样的错误主要是由于shell脚本文件是dos格式,即每一行结尾以\r\n来标识,而unix格式的文件行尾则以\n来标识。
查看shell脚本文件格式方法
cat -A filename 从显示结果可以判断,dos格式的文件行尾为^M$,unix格式的文件行尾为$。
od -t x1 filename 如果看到输出内容中存在0d 0a的字符,那么文件是dos格式,如果只有0a,则是unix格式。
vi filename打开文件,执行 : set ff,如果文件为dos格式在显示为fileformat=dos,如果是unxi则显示为fileformat=unix。
解决方法
使用linux命令dos2unix filename,直接把文件转换为unix格式
使用sed命令sed -i “s/\r//“ filename 或者 s ...
Docker打包镜像设置代理
出现问题最近在做frp的docker镜像的时候需要从github上下载frp程序,curl速度死活上不去。命令行我一直都有设置国外代理,显然Dockerfile文件生成的时候跟cmd不相干。设置了docker的代理也不行(现在想想好傻,docker代理是拉取hub里镜像才有用,不过一般都用国内hub)
解决问题最后突然想到之前在打包镜像的时候更新程序也设置了国内源,茅舍顿开,果断在curl上加上代理,问题解决,速度直接上到2M/s
curl -x 10.0.75.1:1080 https://xxxx
差点就想直接下载程序COPY进去了
实在没有条件搭梯子的可以采用国内gitee,一般都有相应的克隆仓库
拓展问题其他类似问题也可以用解决,wget或者系统程序更新可以更换国内镜像源
Alpine更换包下载源
在打包基于alpine系统的docker镜像的时候,每次更新到一半因为网络问题中断掉
在Dockerfile开头加入这行,更换apk包源为阿里云
1RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
速度杠杠的!!!
CentOS学习KVM笔记-网络篇
网络模型
四种网络模型1、隔离模型:虚拟机之间组建网络,该模式无法与宿主机通信,无法与其他网络通信,相当于虚拟机只是连接到一台交换机上。2、路由模型:相当于虚拟机连接到一台路由器上,由路由器(物理网卡),统一转发,但是不会改变源地址。3、NAT模型:在路由模式中,会出现虚拟机可以访问其他主机,但是其他主机的报文无法到达虚拟机,而NAT模式则将源地址转换为路由器(物理网卡)地址,这样其他主机也知道报文来自那个主机,在docker环境中经常被使用。4、桥接模型:在宿主机中创建一张虚拟网卡作为宿主机的网卡,而物理网卡则作为交换机。
隔离模型
如上图所示,Guest1和Guest2都是在宿主机上创建的虚拟机,虚拟机的网卡分为前半段和后半段,前半段位于虚拟机上,后半段在宿主机上,按照图中所示,前半段就是eth0,它是在虚拟机内部看到的网卡名字,而后半段就是vnet0和vnet1,它们是在宿主机上看到的网卡名字。实际上,在Guest1上所有发往eth0的数据就是直接发往vnet0,是由vnet0进行数据的传送处理。在隔离模式下,宿主机创建一个虚拟交换机vSwitch,然后把vnet0和vnet ...
Kafka入门
背景学习事件总线(EventBus)涉及到MQ的实现,于是想做个基于Kafka的实现,顺便整理基础概念。
EventBusEventBus 是一种事件发布订阅模式,通过 EventBus 我们可以很方便的实现解耦,将事件的发起和事件的处理的很好的分隔开来,很好的实现解耦。
KafkaKafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。它拥有以下三大核心功能:
发布和订阅数据流,类似于传统消息队列(RabbitMQ,RocketMQ)的功能
以容错的方式存储数据流的功能
实时处理数据流的功能
为了支持以上的三大核心功能,Kafka有四个核心的API:
The Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。
The Consumer API 允许一个应用程序订阅一个或多个 topic ,并且对发布给他们的流式数据进行处理。
The Streams API 允许一个应用程序作为一个流处理器,消费一个或者多个topic产生的输入流,然后生产一个输出流到一个或多个topic中 ...