1+2+4+8=15的位运算关系
转换二进制
0001 是1
0010 是2
0100 是4
1000 是8
做或(|)运算
11111 是15
1 | " vimrc begin |
##
1、用top、ps、pidstat 差哪个进程占用cpu过高(确认进程)
2、然后用pstack、perf 查进程下线程内的执行堆栈 (确认线程及堆栈信息哪执行的异常的函数)
##前言
直接上图,借用的。
不允许隐式类型转换
基本声明使用
1 | fmt.Printf("hello word" + "\n") |
变量交换
1 |
|
匿名变量
1 | // 匿名变量 (变量不被用到时会报错 所以用_来代替) |
常量
1 |
|
变量作用域
全局变量和局部变量 函数题外 var声明 全局 函数体内如果有同名局部变量 则局部变量优先
数组 :
初始化固定长度
1 | var tmpArr = [10]int{} |
切片:
可变长度,容量不够按照2的倍数增长容量空间,共享存储结构 (len()获取元素个数,cap获取容量)
map:
相当于js 的json对象 形式可以自定义k {“asd”:1,”qwe”:2}
1 | //声明 |
循环
1 | // 循环 |
指针
指针 1、指针存储 变量的内存地址 2、变量加&获取地址 3、指针前家* 获取指针指向的变量的值 4、修改指针变量的值,所有指向改内存的变量都会被修改
1 | var ipa int = 312 |
struct结构体
1 | //自定义数据结构类型 |
1、七层模型:
有应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
大致举例
2、4层模型(tcp/ip协议族):
应用层,传输层,网络层,网络接入层四个层次
3、http属于应用层、tcp和udp属于传输层
4、IP (网际协议)、TCP(传输控制协议)、HTTP(应用层协议)、UDP(用户数据报协议)
5、传输层用来传输网络数据,应用层用来定义传输的网络数据的规则使其有意义
1、属于应用层
2、http基于tcp通过三次握手建立链接
3、www浏览的一个协议
4、http/1.1开始使用长链接
1.连接(Connection):一个传输层的实际环流,它是建立在两个相互通讯的应用程序之间。
2.消息(Message):HTTP通讯的基本单位,包括一个结构化的八元组序列并通过连接传输。
3.请求(Request):一个从客户端到服务器的请求信息包括应用于资源的方法、资源的标识符和协议的版本号
4.响应(Response):一个从服务器返回的信息包括HTTP协议的版本号、请求的状态(例如“成功”或“没找到”)和文档的MIME类型。
5.资源(Resource):由URI标识的网络数据对象或服务。
6.实体(Entity):数据资源或来自服务资源的回映的一种特殊表示方法,它可能被包围在一个请求或响应信息中。一个实体包括实体头信息和实体的本身内容。
7.客户机(Client):一个为发送请求目的而建立连接的应用程序。
8.用户代理(Useragent):初始化一个请求的客户机。它们是浏览器、编辑器或其它用户工具。
9.服务器(Server):一个接受连接并对请求返回信息的应用程序。
10.源服务器(Originserver):是一个给定资源可以在其上驻留或被创建的服务器。
11.代理(Proxy):一个中间程序,它可以充当一个服务器,也可以充当一个客户机,为其它客户机建立请求。请求是通过可能的翻译在内部或经过传递到其它的服务器中。一个代理在发送请求信息之前,必须解释并且如果可能重写它。
代理经常作为通过防火墙的客户机端的门户,代理还可以作为一个帮助应用来通过协议处理没有被用户代理完成的请求。
12.网关(Gateway):一个作为其它服务器中间媒介的服务器。与代理不同的是,网关接受请求就好象对被请求的资源来说它就是源服务器;发出请求的客户机并没有意识到它在同网关打交道。
网关经常作为通过防火墙的服务器端的门户,网关还可以作为一个协议翻译器以便存取那些存储在非HTTP系统中的资源。
13.通道(Tunnel):是作为两个连接中继的中介程序。一旦激活,通道便被认为不属于HTTP通讯,尽管通道可能是被一个HTTP请求初始化的。当被中继的连接两端关闭时,通道便消失。当一个门户(Portal)必须存在或中介(Intermediary)不能解释中继的通讯时通道被经常使用。
14.缓存(Cache):反应信息的局域存储。
1、属于传输层
2、面向链接,三次握手进行链接通信
3、对比udp速度慢、传输可靠、适用传输大量数据
1 | $ brew cask install docker |
1 | $ docker pull nginx:1.19.3 |
这样nginx镜像就下载下来了,可以用 docker images 查看
1 | $ docker run --name nginx-1.19.3 |
参数说明:
-v 表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上
–name nginx-1.19.3:设置容器名称。
-p 80:80: 端口进行映射,将本地 80 端口映射到容器内部的 80 端口。
-d: 设置容器在在后台一直运行。
1 | $ docker exec -it nginx-1.19.3 |
进来后可以看看nginx的配置文件等信息,
现在我们已经把配置文件映射到宿主机上了我们可一到宿主机的对应目录调调改改nginx配置文件
1 | #宿主机 config |
然后exit退出 ,然后重启下nginx
1 | $ docker restart nginx-1.19.3 |
现在我们就可以运行我们的nginx了 127.0.0.1
但是现在只能运行查看html等静态文件,看不了php,这是为什么呢?因为我们还没装php
1 | $ docker pull php:7.3 |
1 | $ docker run --name php-7.3 |
参数说明:
-expose 对其他容器报漏9000端口,但不能和主机通信 。
重点说明:
-此处php挂在的目录需要与nginx中的www目录相同,因为正常来说nginx和php在一台机器上,www目录要php和nginx都能访问到
-可以运行后发现好多扩展没有,可以使用进入docker容器使用docker提供的命令进行安装 例如mysql
因为使用的源是fpm包 所以很多扩展都没有装
1 | $ docker-php-ext-install pdo |
现在已经安装了nginx和php了为啥还是不能解析php文件呢
原因在于nginx和php两个容器之间还有没进行通信
那么怎么进行通信呢
1、我们要修修改nginx中fastcgi中请求php的地址参数 fastcgi_pass 127.0.0.1:9000; 改为 fastcgi_pass 172.25.0.2:9000;
2、重启nginx,就可以了呀
那么问题来了。这个php的ip哪来的。
我们默认使用docker的bridge模式 此网络创建一个名为docker0的虚拟网桥,并将容器连接到一个docker0虚拟网桥,所有网桥下的容器共享Network Namespace
上面已经大致的了解了怎么安装nginx和php了 ,mysql和上面的方法一样我就不举例了
下面说如何使用compose进行安装呢?compose安装都需要什么呢?
使用 Dockerfile 定义应用程序的环境。
使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
最后,执行 docker-compose up 命令来启动并运行整个应用程序。
Dockerfile 这个玩意没有也能装,他是用来自定义镜像的,我们用通用镜像就可以
1 | version: "3" |
参数解释
version:这个是表示用哪个docker-compose版本来解析,不用版本模版语法有差异 这里用的3
networks:用来声明所使用的网络环境
services:这个就是服务容器的集合,里面每一块都是一个服务
container_name:用来定一容器的名称
image:表示锁使用镜像的,也可以使用build命令来指定dockerfile文件路径从上下文路径 ./Dockerfile 所构建镜像
volumes:挂载
services 中的networks这里来指定使用哪个网络,指定当前容器在当前网段的ip
expose:对外报漏的端口
ports:宿主机和容器的端口映射
注意事项
1) 如果指定ip需要自己创建一个网络空间 不能使用默认的,这也解决了每次容器ip变动的问题
1 | docker network local_net bridge |
2) 关于虚拟域名配置
这就要做一下nginx容器的host配置如上yml文件中extra_hosts,当前宿主机的本地host也要加
然后修改nginx的配置 如下是我的meidaifu.conf的配置
1 | server { |
然后修改yml文件 中nginx的配置
1 | nginx: |
1 | docker-compose up -d |
然后就可以运行了。
如果可以在果面版的docker中查看的更清楚
docker-compose down 停止并删除容器
docker-compose stop 停止并不删除容器
当前目录创建 phpfile/Dockerfile
1 | # base image |
然后修改 compose文件中php的配置为
1 | php: |
build 和image 同时出现 则image 将为build后镜像生成的名字和tag
然后
1 | docker-compose up -d |
然后你就可以拿这你的配置文件 到处耍了。
查看另一片文章docker遇到的相关问题
1、这种搭建方式是否符合最佳事实践方案标准?
2、如果多台服务器需要部署如何管理?
1) 如果出现 bash: vim : command not found 需要安装下vim
1 | $ apt-get update |
2) 如果出现 bash: apt-get : command not found 尝试使用yum安装
1 | $ yum install vim -y |
3) 如果容器内出现 [Errno 13] Permission denied (错误描述如下)
1 | $ yum install vim -y |
4) 查看所有容器的ip
1 | $ docker inspect --format='{{.Name}} - {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) |
5) docker中安装php扩展
1 | $ docker-php-ext-install pdo |
6) 提示文件挂载目录不可使用
可以查看一下doc可以挂载的授权目录的列表可以在桌面版上看一下
7) 如果创建网络出现 ERROR: Pool overlaps with other one on this address space
该错误的意思是docker已有一个容器占用了目前docker-compose里的subnet。
1 | docker network prune |
7) 创建一个自己的网络
1 | docker network create --subnet=172.25.0.0/24 --driver=bridge local_net |
elasticsearch 是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。
1 | $ docker pull elasticsearch |
1 | $ docker run --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" -d elasticsearch |
1 | $ docker exec -it elasticsearch /bin/bash |
1 | http.cors.enabled: true |
1 | $ exit |
1 | $ cd /usr/share/elasticsearch/plugins/ |
1 | $ docker pull kibana |
1 | $ docker run --name kibana -p 5601:5601 -d kibana |
1 | GET _search |
1 | PUT loaravel-log-2020.11.05 |
查询搜索条件算分
索引的命名规则
创建一个新indx时 设置 setting mapping(字段类型,分词规则)
index template
聚合统计搜索使用(aggs) bucket按照规则诗句划分不同的组(相当于mysql group),metric 用于数据集的统计(可以统计bucket生成的数据集中的字段进行分析,例如平均值)
search -》协调节点-》查询所有分片-》取回id和排序合并-》去对应分片的数据节点取出具体doc信息
主节点 index(存储索引index信息,索引关联对应的分片) -》