编辑
2023-03-02
Dockerfile
00

目录

2023-2-10
docker原理
docker底层技术原理
K8S Kubernetes原理
2023-2-12
chatgpt:列举一些常用的k8s命令
线程阻塞和死锁问题怎么去定位分析,有什么现象?
ui自动化,一个元素明明定位到了,点击无效(也没报错),如果解决?
2023-2-25
docker使用场景总结
Dockfile

2023-2-10

docker原理

docker是一个cs架构的系统,一个创建容器的工具

想要搞懂docker看它两句口号就行:

build, ship and Run # 搭建发送运行

build once, Run any where # 搭建一次到处用

镜像:将代码、依赖库、配置、环境变量打包成独立软件包,它是静态的

容器:使用docker命令将镜像解压后的东西,它是动态的,可被创建、暂停、删除、启动

仓库:存放镜像的地方

shell
systemctl start docker #启动docker service docker restart #重启docker docker ps # 查看容器 docker start docker restart docker logs docker rm docker pull #拉镜像 docker images # 列出镜像 docker image rm # 删除镜像

docker底层技术原理

docker基于linux中LXC linux container linux虚拟容器技术实现,其有两大方法:

cgroup:control group

namespace:

两者区别:namespace为了隔离进程组之间的资源(组内资源可互相见,组外互相不可见),cgroup为了一组线程组统一资源监控和限制

K8S Kubernetes原理

一个管理容器的工具,可以说大批量创建容器的工具

K8S包含:一个master节点(主节点)和一群node节点(计算节点)

master节点:

  1. API Server:是K8S系统对外接口,供客户端和其他组件调用
  2. Scheduler:对集群内部资源调度
  3. Controller manager:负责管理控制器
  4. etcd:

node节点:Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod

  1. docker:创建容器的
  2. kubelet: 创建、修改、删除、监控它所在node上的pod
  3. kube-proxy:为pod对象提供代理
  4. fluentd:负责日志收集、存储、查询
kubectl get nodes
kubectl delete pods
bash
kubectl logs -f my-pod

2023-2-12

chatgpt:列举一些常用的k8s命令

shell
下面是一些常用的 Kubernetes 命令: 1. `kubectl get`:查询集群中的资源对象。 2. `kubectl describe`:获取资源对象的详细信息。 3. `kubectl apply`:更新集群中的资源对象。 4. `kubectl delete`:删除集群中的资源对象。 5. `kubectl create`:在集群中创建新的资源对象。 6. `kubectl exec`:在容器中执行命令。 7. `kubectl logs`:查询容器的日志。 8. `kubectl port-forward`:在本地端口上转发请求到容器。 9. `kubectl rollout`:管理部署的更新。 10. `kubectl top`:查询集群中资源的使用情况。

线程阻塞和死锁问题怎么去定位分析,有什么现象?

定位线程阻塞和死锁问题需要从以下几个方面入手:

  1. 观察线程的状态:通常使用线程监控工具(如 jstack)来查看每个线程的状态,以确定是否有线程处于阻塞状态。
  2. 查看线程栈:线程栈可以帮助您确定线程正在执行哪个方法,从而确定阻塞的原因。
  3. 检查线程锁:如果多个线程在等待对同一个锁的访问,则可能存在死锁。可以使用线程监控工具(如 jstack)来查看锁的状态,以确定是否存在死锁。
  4. 日志分析:查看日志文件以确定问题的时间和持续时间,并在该时间段内检查其他事件,以确定问题的根本原因。

此外,需要注意的是,线程阻塞和死锁问题会导致程序性能下降或完全停止,因此您可能会注意到以下现象:

  • 应用程序的响应时间变慢
  • 应用程序的性能下降
  • 应用程序不响应或完全停止

利用上述信息可以帮助您定位线程阻塞和死锁问题,并找到合适的解决方案。为了预防这些问题,建议您在编写代码时遵循好的编程实践,如使用锁的适当使用方式,避免对同一个锁的无限等待,等等。

如果问题无法通过以上方法解决,可以考虑使用性能监测工具(如 JVisualVM)或分析工具(如 jmap)来获取更多信息,并找到更有效的解决方案。

ui自动化,一个元素明明定位到了,点击无效(也没报错),如果解决?

如果在 UI 自动化测试中遇到了类似的问题,您可以试试以下解决方案:

  1. 检查定位元素是否正确:确保定位到的元素是您想要点击的元素。
  2. 等待元素可用:使用显式等待或隐式等待,等待元素出现并变得可操作。
  3. 检查元素是否可见:确保定位到的元素是可见的,并且不被其他元素覆盖。
  4. 调整坐标:如果元素被覆盖,可以通过调整元素的坐标来点击。
  5. 检查元素是否被禁用:确保定位到的元素是启用的。

如果以上方法都无效,您可以通过使用浏览器开发工具检查元素的 HTML 结构和 JavaScript 代码,以更好地了解元素的行为。

2023-2-25

docker使用场景总结

windows安装docker问题:

  1. C盘空间太小不够用,docker安装路径默认c盘不可选,如何解决?

在空间较大的目标盘下新建Program Files\Docker文件夹

使用powershell执行下面命令

shell
mklink /j "C:\Program Files\Docker" "D:\Program Files\Docker"

依据Dockerfile构建镜像:

shell
docker build -t gitdocccker:v1 .

用上面打好的镜像部署到容器:

shell
docker run -d -p 2001:2001 --name gitdocccker-v1 gitdocccker:v1

-d后台运行,-p端口映射,--name将容器命名为gitdocccker-v1其镜像从gitdocccker tag为v1的仓库部署

将上面打好的镜像推到个人帐号docker hub中:

shell
docker push gitdocccker/test:v1

遇到端口冲突,本地2001端口被占用,如何腾出此端口呢?

shell
netstat -ano | findstr ":2001" # windows平台使用此命令 netstat -tulpn | grep ":2001" # linux平台使用此命令 taskkill /PID <PID> /F #杀死被占用端口的应用 kill -9 <PID>

-tulpn tcp、udp、listen、port、name

命令行退出后如何重新进入docker容器?

shell
docker ps #先列出正在运行的容器信息 docker exec -it <mycontainerID> bash #使用容器id或者名字进入

1.上传文件 docker cp /root/test.txt ecef8319d2c8:/root/

上传:本机文件在前,容器文件夹在后

将宿主机 root 目录下的文件test.txt拷贝到容器id为ecef8319d2c8的 root 目录下。

2.下载文件 docker cp ecef8319d2c8:/root/test.txt /root/

下载:容器文件在前,本机文件夹在后

将容器id为ecef8319d2c8的 root 目录下的文件test.txt拷贝到宿主机 root 下。

Dockfile

dockerfile
FROM python:3.8 as builder WORKDIR /pythonAutomationFramework ADD . /pythonAutomationFramework COPY ./requirements.txt ./requirements.txt RUN apt update -y \ && apt upgrade -y \ && apt install -y net-tools \ && apt install -y wget \ && apt install -y default-jre \ && wget https://github.com/allure-framework/allure2/releases/download/2.21.0/allure_2.21.0-1_all.deb \ && dpkg -i allure_2.21.0-1_all.deb \ && pip install --no-cache-dir -r requirements.txt CMD python run_api_test.py && python generate_api_test_report.py && tail -f /dev/null

第1行:环境指定python3.8

第2行:创建指定脚本运行所在文件夹

第3行:<.>这个点表示当前目录所有东西拷贝到pythonAutomationFramework文件夹

第4行:将requirements.txt依赖包拷贝到pythonAutomationFramework文件夹下

第5行:运行一堆系统依赖包,依据需求填写,多行参考\ && 写法,apt后面跟-y意思是确认执行的意思,不带这个命令的话,docker build会中断,先升级apt是升级docker内部软件数据库,这样可以方便后面下载指定的软件,由于allure需要依赖java,故下载jre

第13行:执行终端命令行运行脚本多个用 && 隔开,最后加入tail -f /dev/null语句是为了脚本结束容器不至于退出EXITED,为什么会退出?python脚本执行完后docker检测到没有前后台任务,就退出container

/dev/null文件是个linux黑洞,任何写入到此文件的东西都会被丢弃,

因此tail命令不会输出任何信息,这个tips稳定几乎不占内存,无需修改业务程序逻辑

启动selenium-server

shell
java -jar selenium-server-standalone-3.141.0.jar -host 127.0.0.1 -port 4444