1.dockerԴ?源码源码????????Դ??
2.å¦ä½å¦ä¹ Docker
3.Containerd容器管理机制
4.线上环境OOM频发,MyBatis有坑...
5.技术系列开源之DrawDocker源码略读(一)
6.安全干货DockerCVE-2018-6552
dockerԴ?分析????????Դ??
“Website-downloader”是一个利用Node.js开发的工具,其主要功能是随书协助用户下载任何网站的完整源代码,包括所有资源,源码源码如JavaScripts、分析样式表、随书网站后台 源码等。源码源码
为了直观展示效果,分析您可以在文末找到网站源码的随书地址。该项目通过集成wget和archiver工具,源码源码不仅实现了对网站所有资产的分析下载,还支持将其压缩并通过socket通道发送给用户。随书
关于快速启动,源码源码推荐使用docker方式,分析这种方式的随书优势在于方便快捷的启动和停用。下面将展示Dockerfile及docker-compose文件的示例,执行特定命令即可启动。
启动完成后,请检查docker日志以确认无误。访问.0.0.1:,您将能亲眼目睹效果。
对于常规方式启动,“Website-downloader”同样提供了一种强大且易于操作的解决方案。它旨在为需要离线访问网站内容的用户和开发者提供便利,让学习和分析网站构建方式变得更为简单。
您可以通过访问以下链接进行体验:开源地址:github.com/AhmadIbrahii...体验demo:website-downloader.onrender.com...
å¦ä½å¦ä¹ Docker
å¦ä½å¦ä¹ Docker
对äºå¨æ ¡å¦çèè¨ï¼åºè¯¥å¦ä½å»å¦ä¹ dockerï¼æ¯ç«å¦æ ¡æ²¡æå ·ä½çåºç¨éæ±ä½ä¸ºå¼å¯¼ï¼æ以åºè¯¥å¦ä½å»ç 究Dockerï¼è¿æï¼Dockerçæºä»£ç æ没æå¿ è¦å»ç 究ï¼
é¦å æ说æä¸ï¼ææ¯ä¸ä½å¨æµæ±å¤§å¦VLISå®éªå®¤äºè®¡ç®é¡¹ç®ç»çå¦çï¼ä½¿ç¨è¿Dockerï¼ç 究è¿Dockeråå ¶æºç ï¼ä¹å®å¶è¿Dockerã
对äºå¦çå¦ä½å¦ä¹ Dockerï¼æ认为é¦å è¦çä¸ä¸å¦ç个人çç¥è¯èæ¯ãè½å©ç¨çèµæºèµæºã以åä¸ªäººå ´è¶£ååå±æ¹åã
1.å¦ä¹ Dockerï¼å¦æ没æäºè®¡ç®çåºæ¬ç¥è¯ï¼ä»¥åå æ ¸çåºæ¬ç¥è¯ï¼é£ä¹å¦ä¹ 并ç解起æ¥ä¼ç¨ååãä½ä¸ºå®¹å¨ï¼Docker容å¨çä¼å¿å¨åªï¼ä¸è¶³å¨åªï¼æ好äºè§£å®¹å¨çå®ç°æ¯ææ ·çï¼ç®åäºè§£ï¼ï¼æ¥æéå管çï¼Dockerå该å¦ä½ä½ç°è½¯ä»¶å¼åï¼éæï¼é¨ç½²ï¼åå¸ï¼åè¿ä»£ç软件çå½å¨æ管çä¼å¿ã以ä¸ä¸¤ç¹æ认为æä¸ºå ³é®ï¼æè¿ä¸¤æ¹é¢ç认è¯å¿å¿ ä¼å¯¹ä¹åçå·¥ä½å¸®å©å·¨å¤§ã
2.å ³äºå¦ä¹ èµæºï¼èµ·ç ç硬件设æ½æ»æ¯è¦æçãDockeråå ¶çæçåå±å¾å¿«ï¼ä¸ä½¿ç¨çº¯ç论è¯å®æ¶æçå¾®ãå¦å¤ï¼èµæºè¿å æ¬Dockerå®æ¹ï¼å大çµååªä½å¹³å°ï¼ææ¯è®ºåï¼å¼æºç¤¾åºçï¼å¾å¾å¤§æ¿çè§ç¹è½ç¹ç ´èªå·±çå°æï¼æè 让èªå·±ç¥éåªæ¹é¢ç认è¯è¿å¾æ¬ 缺ï¼ä»¥å让èªå·±å°èµ°å¾å¤ç弯路ã
3.ä¸ªäººå ´è¶£çè¯ï¼å½ç»ä¸ºå¼ºæççä¸çãèµ·ç åºè¯¥è®¤åDockerç设计价å¼ï¼ä»¥åDockerçæªæ¥æ½åï¼å½ç¶æä¾æ®çæ¹å¤Docker并带å¨å¤§å®¶çæèï¼ä¹æ¯æ·±åå ³æ³¨ç表ç°ã
4.个人åå±æ¹åï¼æ认为å¦æéè¦æDockerå½ä½è½¯ä»¶çå½å¨æ管çå·¥å ·çè¯ï¼é£ç¨å¥½Dockeræ为éè¦ï¼APIåå½ä»¤çç解ä¸ä½¿ç¨æ¯å¿ éçãå¦æä¸æ³¨ç³»ç»è®¾è®¡æ¹é¢ï¼é£ä¹é¤Docker以ä¸çç¥è¯ä¸ç»éªä¹å¤ï¼è¥æDockeræºç çå¦ä¹ ä¸ç解ï¼é£ä¹è¿äºè¯å®ä¼è®©ä½ çDockeræ°´å¹³æé«ä¸ä¸ªå±æ¬¡ã
-- 8 0
xds
å¦ä¹ Dockerï¼æ大ç好å¤æ¯è·è¿æ°ææ¯åå±æ¹åãæè§å¾å¨æ ¡çåºè¯¥æ²¡æå¤å°ç¡¬æ§éæ±å¨Dockerçç 究ä¸ï¼è¿ä¹æ¯ä¸ºä»ä¹å¦æ ¡æ²¡åå ·ä½åºç¨è¦æ±çåå ãæå®é çåæ³æ¯çä¸äºDocker使ç¨æ¡ä¾ï¼èªå·±å®è·µåºä¸äºç»éªåºè¯¥ä¼å以åç社ä¼å®è·µä¸èµ·å°ä½ç¨ã
ç 究dockerçæºä»£ç ï¼åºè¯¥å°ä½ ä¸å®å³å¿ä»äºäºè®¡ç®æ¹é¢çäºä¸æè ç 究ï¼é£ä¹ä½ å°±éè¦ä»¥ç 究è ç身份å»åä»ç»çæºç åæçå·¥ä½ã
-- 3 0
ååGTDer
æä½ä¸ºåå å·¥ä½çè¿æ¥äººæ¥è¯´ï¼æ认为åªæä½ çæ£åå å·¥ä½åï¼å¨å·¥ä½ä¸å¦ä¹ è·ææä¹ï¼æ¯ç«Dockerç¥è¯äºè®¡ç®å ¶ä¸çä¸ä¸ªè½¯ä»¶å¹³å°èå·²ï¼è¯´ä¸æ¥çä½ æ¯ä¸äºï¼æ°çææ¯åºç°Dockerä¸ä¸å®æ¯å¯ä¸éæ©ã
ä½ä¸ºå¦çäºè§£æ°ææ¯ç¡®å®æ å¯åéï¼ä¸å®è¦è½æç论转å为ç产åææ¯æ£éã
-- 3 0
9lives - ç±çæ´»ï¼ç±äºè®¡ç®ã
å¦ä¹ ä»»ä½ä¸ä¸ªå¼æºæ°ææ¯ï¼é¦å é®èªå·±å 个é®é¢ï¼
1. 为ä»è¦å¦ä¹ å®ï¼
2. å¦ä¹ å®éè¦äºè§£åªäºç¸å ³ç¥è¯ç¹ï¼
3. å¦ä½å¿«éå¦ä¹ ï¼
4. 该ææ¯ç使ç¨åºæ¯æ¯ä»ä¹ï¼
æ¿æ个人çå¦ä¹ ç»éªæ¥ä¸¾ä¾ï¼æ¬äººä¹åæ¯è¾äºè§£OpenStackï¼
为ä»è¦å¦ä¹ dockerï¼
åçï¼
dockeræ¯è½»é级èæåææ¯ï¼docker使linux容å¨ææ¯çåºç¨æ´å ç®ååæ åå
dockerçé度å¾å¿«,容å¨å¯å¨æ¶æ¯«ç§çº§ç
dockerå°å¼ååè¿ç»´èè´£åæ¸
docker解å³äºä¾èµå°ç±é®é¢
dockeræ¯æå ä¹æææä½ç³»ç»
dockeræçé£éåå±ççæå
å¾å¤IT巨头éæ¸å å ¥åæ¯æ
å¦ä¹ å®éè¦äºè§£åªäºç¸å ³ç¥è¯ç¹ï¼
åçï¼
äºè®¡ç®æ¦å¿µç¸å ³ï¼restapi, å¾®æå¡ï¼OpenStackï¼
Linux ç³»ç»ç®¡çï¼è½¯ä»¶å 管çï¼ç¨æ·ç®¡çï¼è¿ç¨ç®¡ççï¼
Linux å æ ¸ç¸å ³ï¼Cgroup, namespace çï¼
Linux æ件系ç»ååå¨ç¸å ³ï¼AUFSï¼BRFS,devicemapper çï¼
Linux ç½ç»ï¼ç½æ¡¥ï¼veth,iptablesçï¼
Linuxå®å ¨ç¸å ³ï¼Appmor,Selinux çï¼
Linuxè¿ç¨ç®¡çï¼Supervisord,Systemd etc)
Linux容å¨ææ¯ï¼LXCçï¼
å¼åè¯è¨ï¼Python, GO,Shell çï¼
3.å¦ä½å¿«éå¦ä¹ ï¼
åçï¼ä¸ªäººä½ä¼æ好æä¸ä¸ªå®é çéæ±æ项ç®æ¥è¾¹å®è·µè¾¹å¦ä¹ ï¼å ¥é¨å¯ä»¥åèï¼ç¬¬ä¸æ¬docker书ï¼åçä¸éï¼é常éåå ¥é¨ãé¤æ¤ä¹å¤ï¼é 读ç人çblogæ¯å¦å®æ¹blog /
BTW: ç读dockerææ¡£
-- 0 0
tuxknight
楼ä¸åä½è¯´çé½å¾å¥½ï¼æåè¡¥å ä¸ç¹ï¼
æ¾ä»½ç¸å ³çå®ä¹ å·¥ä½
-- 0 0
lancer
å·¥ä½åç 究æ¯ä¸¤ä¸ªæ¹åæ个人认为ï¼å·¥ä½éè¦éè¿ä½ çå®é æè½ä¸ºä¼ä¸å¸¦æ¥ç»æµæçï¼èç 究çè¯å¯ä»¥ä¸æ³¨æ个ç¹ãä½æ¯ç 究离ä¸å¼å·¥ä½ï¼å 为工ä½å¯ä»¥è®©ä½ æ´å¥½ççä¼ææ¯å¸¦æ¥çä»·å¼ï¼ä»¥åå¦ä½æä¾æ´å¥½çæå¡ï¼ç¨æ·ä½¿ç¨åºæ¯éè¦é£äºææ¯ççªç ´ãæäºè¿äºè®¤è¯ï¼ç¶åæ´å ä¸æ³¨çç 究æ个ææ¯ç¹ï¼è¿æ ·æ许å¯ä»¥è¯´ææ¯ååä¸æ¯åä¸å¼çã
-- 0 0
绿åè²å½±
dockerç°å¨ååç«çï¼å¼å¾å¦ä¹ ä¸ä¸ã
Containerd容器管理机制
containerd是一个高级容器运行时,由Docker项目衍生,实现CRI规范,fillpoly 绘图源码现为CNCF托管,提供新的容器解决方案的基础。k8s通过containerd创建容器时,containerd生成containerd-shim进程,此进程操作容器以避免containerd挂断导致所有容器退出的问题。containerd-shim用于执行命名空间、cgroups配置,挂载根文件系统等操作。标准化实现由OCI指定,runc为参考实现。
containerd-shim调用runc启动容器,而runc执行后立即退出,containerd-shim则成为容器的父进程,负责监控、状态收集和子进程清理,确保无僵尸进程。
containerd初始化操作通过方法实现。具体创建过程包括容器对象内部处理的多项操作。初始化后,启动容器操作则由上述方法执行。
关于详细实现代码,请参考相关源码:github.com/containerd/c...
深入理解containerd创建、启动容器的代码实现,请访问进一步分析:qikqiak.com/post/contai...
更多讨论和细节分析见:colstuwjx.github.io/...
线上环境OOM频发,MyBatis有坑...
线上服务频繁遭遇 OutOfMemoryError(OOM)问题,对业务造成了严重影响,一天内服务重启多达五次,LayuiMini源码下载导致整个系统几乎瘫痪。通过Skywalking追踪,发现链路调用大部分呈现红色,亟待解决。作为排查者,我接手了这个任务。
首先,我分析了OOM的常见原因,主要包括堆内存和元空间不足。在我们的案例中,Mybatis的问题浮出水面。源码分析显示,Mybatis在拼接SQL时,通过集合存储SQL和参数,当SQL参数过多导致SQL过长时,集合会变得庞大,回收不及时就会引发内存溢出。
由于环境限制,无法直接通过jstack、jmap工具定位问题,这增加了排查的难度。但在网络搜索中,我找到了一篇与DruidDataSource和Mybatis相关的问题,这让我找到了问题的线索,即多线程并发操作可能导致内存占用过高,从而触发OOM。
进一步的fake location 源码源码分析揭示,DynamicContext类中的ContextMap(继承自HashMap)在存储SQL参数和占位符时,存在无法被GC回收的问题。当并发查询量增加时,这可能导致内存溢出。我通过线上复现情景,验证了这一理论,发现服务频繁进行Full GC,最终引发了OOM。
针对问题,我提出解决方案:优化SQL拼接,避免过长的SQL体积,强调代码和SQL编写的重要性。同时,为了应对未来可能的故障,我配置了docker中的OOM保留dump文件,以备不时之需。
技术系列开源之DrawDocker源码略读(一)
本文由神州数码云基地团队整理撰写,若需转载,请注明出处。本文将简要解析开源图形化工具“神笔马良”(DrawDocker)的设计引擎和设计试图视角功能,以供后续开发者参考。分析基于年月日的master分支代码,读者应依据实际情况进行判断。
项目包含侧栏、画布和右侧格式栏,以及上方工具栏。侧栏提供搜索图形、php偷拍源码便笺本、自定义Kubeapps组件栏、更多图形按钮等功能。其中,搜索图形功能通过关键字实现,由Sidebar对象的addSearchPalette方法控制。便笺本功能则用于保存临时图形模板,自定义Kubeapps组件栏则能展示并生成自定义应用组件。Kubeapps应用组件栏显示所有应用组件模板,通过读取kubeappsPalette.json文件的数据,创建包含图形、应用名、chart名和chart地址等信息的应用组件。
创建新的组件栏需新增添加面板方法,并在初始化时调用。更多图形方法位于MoreShapesDialog中,新建的组件栏需添加至条目中才能在“更多图形”中显示。自定义属性或格式图形模板需在shapes和stencils目录下创建相应文件。
画布部分主要由mxGraph对象实现,提供选中、获得样式等功能。右侧格式栏提供绘图、样式、文本、调整图形和安装参数栏,依据选中状态动态显示。样式栏显示图形属性及其值,若为Kubeapps图形,显示应用名、安装状态等。安装参数栏显示安装或删除按钮等。工具栏包含菜单、撤销、重做、删除、重命名、保存、语言等功能,通过Actions、EditorUi等对象实现。
如需改进安装功能,可在Actions对象中修改或定义新动作,甚至在AppController.java文件中调整。项目已开源在GitHub,有兴趣的开发者可自行探索和优化。
安全干货DockerCVE--
cve--
此漏洞未有公开分析,唯一的参考是长亭在滴滴安全大会的PPT,信息简略,仅在完成利用后发现一些未注意到的细节。漏洞基于条件竞争,主要影响未修复版本的is_same_as函数,通过特殊方法使其不执行正常逻辑,继续往下执行。
源码分析
展示了is_same_as源码,以及修复前后版本的对比。apport源码位于2..9版本,追踪源码找到更改过的pid进入get_pid_info,贴出源码。
apport为ubuntu程序,用于处理程序崩溃信息,配置文件如/sys/kernel/core_pattern影响生成core文件的命名方式。核心是确定生成的core文件路径,以及内核coredump.c传入的参数。
核心配置文件为/sys/kernel/core_uses_pid,值为1代表生成的core文件带.pid,0代表不带。同时,/proc/sys/kernel/pid_max限制最大pid值,影响核心循环计数。logrotate配置用于日志管理。
在Ubuntu .中,apport与漏洞版本差异大,选择替换整个apport文件。遇到程序不运行问题,可能涉及core_pattern配置。通过日志分析发现入参多了一个%E,删去后程序恢复正常。
逃逸步骤
利用条件竞争绕过分支,首先kill对应pid,然后通过大量fork等待创建进程,占用pid。利用docker内进程路径控制物理机中core生成路径。生成core前检查ulimit -c,限制core文件大小,设置ulimit -c unlimited。
逃逸第二步
通过logrotate定时任务触发执行core中的指令,将想运行的指令写成字符串形式,保存在core文件中。使用logrotate格式编写命令,确保成功执行。手动触发logrotate命令,监听对应端口以获取返回结果。
Docker 源码分析
本文旨在解析Docker的核心架构设计思路,内容基于阅读《Docker源码分析》系文章后,整理的核心架构设计与关键部分摘抄。Docker是Docker公司开源的基于轻量级虚拟化技术的容器引擎项目,使用Go语言开发,遵循Apache 2.0协议。Docker提供快速自动化部署应用的能力,利用内核虚拟化技术(namespaces及cgroups)实现资源隔离与安全保障。相比虚拟机,Docker容器运行时无需额外的系统开销,提升资源利用率与性能。Docker迅速获得业界认可,包括Google、Microsoft、VMware在内的领导者支持。Google推出Kubernetes提供Docker容器调度服务,Microsoft宣布Azure支持Kubernetes,VMware与Docker合作。Docker在分布式应用领域获得万美元的C轮融资。
Docker的架构主要由Docker Client、Docker Daemon、Docker Registry、Graph、Driver、libcontainer以及Docker container组成。
Docker Client:用户通过命令行工具与Docker Daemon建立通信,发起容器管理请求。
Docker Daemon:后台运行的系统进程,接收并处理Docker Client请求,通过路由与分发调度执行相应任务。
Docker Registry:存储容器镜像的仓库,支持公有与私有注册。
Graph:存储已下载镜像,并记录镜像间关系的数据库。
Driver:驱动模块,实现定制容器执行环境,包括graphdriver、networkdriver和execdriver。
libcontainer:库,使用Go语言设计,直接访问内核API,提供容器管理功能。
Docker container:Docker架构的最终服务交付形式。
架构内各模块功能如下:
Docker Client:用户与Docker Daemon通信的客户端。
Docker Daemon:后台服务,接收并处理请求,执行job。
Graph:存储容器镜像,记录镜像间关系。
Driver:实现定制容器环境,包括管理、网络与执行驱动。
libcontainer:库,提供内核访问,实现容器管理。
Docker container:执行容器,提供隔离环境。
核心功能包括从Docker Registry下载镜像、创建容器、运行命令与网络配置。
总结,通过Docker源码学习,深入了解其设计、功能与价值,有助于在分布式系统实现中找到与已有平台的契合点。同时,熟悉Docker架构与设计思想,为云计算PaaS领域带来实践与创新启发。