docker是一个cs架构的系统,一个创建容器的工具
想要搞懂docker看它两句口号就行:
build, ship and Run # 搭建发送运行
build once, Run any where # 搭建一次到处用
镜像:将代码、依赖库、配置、环境变量打包成独立软件包,它是静态的
容器:使用docker命令将镜像解压后的东西,它是动态的,可被创建、暂停、删除、启动
仓库:存放镜像的地方
shellsystemctl 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基于linux中LXC linux container linux虚拟容器技术实现,其有两大方法:
cgroup:control group
namespace:
两者区别:namespace为了隔离进程组之间的资源(组内资源可互相见,组外互相不可见),cgroup为了一组线程组统一资源监控和限制
一个管理容器的工具,可以说大批量创建容器的工具
K8S包含:一个master节点(主节点)和一群node节点(计算节点)
master节点:
node节点:Docker、kubelet、kube-proxy、Fluentd、kube-dns(可选),还有就是Pod
kubectl get nodes
kubectl delete pods
bashkubectl logs -f my-pod
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`:查询集群中资源的使用情况。
定位线程阻塞和死锁问题需要从以下几个方面入手:
此外,需要注意的是,线程阻塞和死锁问题会导致程序性能下降或完全停止,因此您可能会注意到以下现象:
利用上述信息可以帮助您定位线程阻塞和死锁问题,并找到合适的解决方案。为了预防这些问题,建议您在编写代码时遵循好的编程实践,如使用锁的适当使用方式,避免对同一个锁的无限等待,等等。
如果问题无法通过以上方法解决,可以考虑使用性能监测工具(如 JVisualVM)或分析工具(如 jmap)来获取更多信息,并找到更有效的解决方案。
如果在 UI 自动化测试中遇到了类似的问题,您可以试试以下解决方案:
如果以上方法都无效,您可以通过使用浏览器开发工具检查元素的 HTML 结构和 JavaScript 代码,以更好地了解元素的行为。
windows安装docker问题:
在空间较大的目标盘下新建Program Files\Docker文件夹
使用powershell执行下面命令
shellmklink /j "C:\Program Files\Docker" "D:\Program Files\Docker"
依据Dockerfile构建镜像:
shelldocker build -t gitdocccker:v1 .
用上面打好的镜像部署到容器:
shelldocker run -d -p 2001:2001 --name gitdocccker-v1 gitdocccker:v1
-d后台运行,-p端口映射,--name将容器命名为gitdocccker-v1其镜像从gitdocccker tag为v1的仓库部署
将上面打好的镜像推到个人帐号docker hub中:
shelldocker push gitdocccker/test:v1
将
遇到端口冲突,本地2001端口被占用,如何腾出此端口呢?
shellnetstat -ano | findstr ":2001" # windows平台使用此命令 netstat -tulpn | grep ":2001" # linux平台使用此命令 taskkill /PID <PID> /F #杀死被占用端口的应用 kill -9 <PID>
-tulpn tcp、udp、listen、port、name
命令行退出后如何重新进入docker容器?
shelldocker 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 下。
dockerfileFROM 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
shelljava -jar selenium-server-standalone-3.141.0.jar -host 127.0.0.1 -port 4444